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 湿度、温度、気圧センサー
BME280 が、設定が楽そうなので、新規に購入しました。
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 にします。
配線
ラズパイの場合、本体のプルアップ抵抗が有るので、抵抗は不要とのこと。
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 %
失敗
どうにも気温が高くなりすぎています。
ケースの中に RPI3B+ を入れておいたのですが、触ってみると、ケース全体が温かい・・・
どうやら、RPI3B+ の発熱で、ケース自体が温まり、センサーにも影響したようです。
PiZero では起こらなかったことなので、RPI3B+ を使用するのは、発熱のデメリットも有るようです。
暫くは、ケースを開けて様子を見ようと思います。
追記
ケースを開けましたが、ケース自体が温まってしまうので、どうにも狂います。
仕方ないので、センサーをケースから外し、横に置く形式にしました。