Raspberry Pi 備忘録 / Mbedもあるよ!

Raspberry Pi であれこれやった事の記録

Raspberry pi Zero で オフィス環境の可視化 その6 マイクロSDカード破損?色々変える

2016-12-05 から稼働していたオフィス環境のログングマシン Raspberry pi zero ですが、2019年7月から動いてないことがわかりました。

Root ファイルシステムの Super block が見つからないとか、破損しているだとかのメッセージですが、fsck などでも対処できず、マイクロSDカードが破損したのではないかと考えています。

約2年半で破損したようです。

これを気に色々変えます

代替マシンは 3B+

代替マシンは 3B+ でいいかな・・・と思っています。

当初は、Zero の低電力、低価格、小型さに惹かれて Zero で各種センサーを動かしていましたが、いくつかの理由で Raspberry pi 3B+ にしようとおもっています。

1.セットアップに無駄に時間がかかる。

apt update など。
単純に遅い。

2.あまり小型化できていない

確かに本体は小さいが、センサーとケーブルを綺麗にまとめきれていないので、本体の小ささは活きていない。

USBハブも邪魔です。

3.電力はコンセントから取れている

zeroなら、モバイルバッテリーでもしっかり動く、、、のですが、オフィスに置くので、別に、そこまで低電力ではなくていいです・・・。

普通にコンセントに刺します。

4.RPI3B+ 余ってる

これがでかい。

埃をかぶり続けそうなので、使用することにしました。

5.USB BOOT したい

これが1番でかい。

そもそもマイクロSDは、常時使用には向いていません。

3B+は、デフォルトでUSB Boot 対応なので、 BalenaEtcher で、USBメモリなどに OS を焼き付ければそれで終わりです。

なお、2B Version 1.2 ``a22042``` なら、usb boot 対応らしい。

cpu info と Version 対応表

Checking Your Raspberry Pi Revision Number & Board Version - Raspberry Pi Spy

K30 co2センサー

Rpi3B+ での設定メモ

GPIO で UART を使えるようにする

raspi-config > interface options > Serial

シェルで使用する? NO

シリアルポートハードウェア? YES

$ ls /dev/ttyS0 
/dev/ttyS0

サンプルを取得する

https://www.co2meter.com/pages/indoor-air-quality-links

AN137 - Interfacing Raspberry Pi to SenseAir K30 Sensor via UART. Sample Code (ZIP)

K-30.py

サンプルを一部改変しています。

python3 向けに、print を () 付きにして、 ser.write を byte 指定の b"" に変更。

resp も、int が帰ってくるようなので、そのまま受け取っています。

#rpi serial connections
#Python app to run a K-30 Sensor
import serial
import time

ser = serial.Serial("/dev/ttyS0",baudrate =9600,timeout = .5)
print("  AN-137: Raspberry Pi3 to K-30 Via UART\n")
ser.flushInput()
time.sleep(1)

for i in range(1,21):
        ser.flushInput()
        ser.write(b"\xFE\x44\x00\x08\x02\x9F\x25")
        time.sleep(.5)
        resp = ser.read(7)
        #high = ord(resp[3])
        #low = ord(resp[4])
        high = resp[3]
        low = resp[4]
        co2 = (high*256) + low
        print("i = ",i, " CO2 = " +str(co2))
        time.sleep(.1)

BME280 湿度、温度、気圧センサー

f:id:pongsuke:20191216110749j:plain

BME280 が、設定が楽そうなので、新規に購入しました。

www.switch-science.com

I2C と SPI の両方に対応している。

仕様

電源電圧 : DC 1.8~3.3V
通信方式 : I2C(最大3.4MHz) SPI(最大10MHz)
測定レンジ 
温度 : -40~+85℃
湿度 : 0~100%
気圧 : 300~1100 hPa
分解能
温度 : 0.01℃
湿度 : 0.008%
気圧 : 0.18Pa
測定精度
温度 : ±1℃
湿度 : ±3%
気圧 : ±1hPa
I2Cアドレス
SDO LOW : 0x76
SDO HIGH: 0x77

i2C でやる

なんとなく、i2c にします。

配線

BME280 – スイッチサイエンス

ラズパイの場合、本体のプルアップ抵抗が有るので、抵抗は不要とのこと。

I2C用のプルアップ抵抗は未実装です。
Raspberry Piで使う場合はこの基板にプルアップ抵抗は不要です。 (Raspberry Pi基板上にI2Cのプルアップ抵抗が実装済みのため)

I2Cアドレスの設定方法
I2Cアドレスは、
 
SDO端子をGNDにつなぐと0x76
SDO端子をVioにつなぐと0x77
になります。必ずどちらかにつないでください。

うーん、、、なんとなく、SDOを、GND にしました。
(あとから気が付きましたが、サンプルスクリプトは、0x76 なので、GNDおすすめ)

BME280 RPI3B+
SDO, GND GND
SCK I2C_SCL1
SDI I2C_SDA1
CSB,Vio 3.3V
Vcare なし
$ i2cdetect -y 1
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- -- 
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
70: -- -- -- -- -- -- 76 --

スクリプト

スイッチサイエンスのスクリプトを、一部改変して使う。

BME280/bme280_sample.py at master · SWITCHSCIENCE/BME280 · GitHub

ライブラリ 追加
$ pip3 install smbus2
スクリプト修正

print を () で囲む。

起動
$ python3 bme280_sample.py 
temp : 22.06  ℃
pressure : 1027.39 hPa
hum :  32.81

失敗

どうにも気温が高くなりすぎています。

f:id:pongsuke:20191217150600p:plain

ケースの中に RPI3B+ を入れておいたのですが、触ってみると、ケース全体が温かい・・・

どうやら、RPI3B+ の発熱で、ケース自体が温まり、センサーにも影響したようです。

PiZero では起こらなかったことなので、RPI3B+ を使用するのは、発熱のデメリットも有るようです。

暫くは、ケースを開けて様子を見ようと思います。

追記

ケースを開けましたが、ケース自体が温まってしまうので、どうにも狂います。

仕方ないので、センサーをケースから外し、横に置く形式にしました。

どうも湿度が低く出ます。
壊れているのか、サンプルスクリプトとは別に、キャリブレーションが必要なのか・・・