農業用ビニールハウスの温度湿度管理用 ラズパイ&センサー2つ
I2Cでセンサー1つの時は問題なかったのですが、2つに増やしたところ1つのセンサーが反応しなくなりました。
かなりの高温多湿状態のタフな環境下、センサーを換えても、ラズパイを換えても始めは正常だが、数時間後にセンサーが1つおかしくなる。短いケーブルにつけたセンサーがおかしい。
最終的にI2Cのクロックを下げることで正常に動く時間が長くなっている。ただいま実験中。
I2Cのバス速度は、AC電源を抜かないとリセットされないようす。
念のため23時50分台にシャットダウン&外部タイマーを使って電源をOFF/ONしてラズパイを起こし1日に一回I2Cバス(ラズパイ)をリセットする。
HW: Raspberry Pi 3 Model B V1.2 ヒートシンク付き
1センサー SHT31 秋月電子、 2センサー SHRT31 他社製Reland Sun
I2C基本100KHzで動いている様子
i2cのクロックはオシロスコープで確認するしかなさそう
CPUクロックは以下のコマンドで分かる
root@raspberrypi:/home/pi# vcgencmd measure_clock arm
frequency(48)=600000000
10KHz ###################################
Configを10KHz動作に変更
/boot/config.txt
dtparam=i2c_baudrate=10000 #最後に追加
AC電源 ON/OFF
I2Cはセットされている様子
pi@raspberrypi:~ $ dmesg | grep i2c
[ 5.551577] i2c /dev entries driver
(ちなみに前回はdmesgにてブロードコムのチップでタイムアウトが起こっているというエラーが見れたが
今回はそのエラーは見えていない)
しかし、i2cdetect -y 1ではアドレスが見つからない
pi@raspberrypi:~ $ 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: -- -- -- -- -- -- -- --
50KHz ######################################
/boot/config.txt
dtparam=i2c_baudrate=50000
reboot
root@raspberrypi:/home/pi# 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: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
この実行速度があまりにも遅いので、AC抜いて再度リブート
そしたら見えた
root@raspberrypi:/home/pi# i2cdetect -y 1
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- 3c -- -- --
40: -- -- -- -- -- 45 -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --
結果50KHzでは動くと思われる
i2cのBUSクロックは電源を抜いて再起動した方か確実に切り替わる
今回LCDと温度センサーSHT31の2つがつながっているので、
どちらかのクロック許容範囲に影響されるとみられる
高温多湿環境にて作動させるので、CPUの温度も測ってみた
root@raspberrypi:~# vcgencmd measure_temp
temp=46.2'C
まあまあの温度である 60℃以上がスロットリング対象になってくるのでこの温度であれば大丈夫
一応スロットリングも調べる
root@raspberrypi:~# vcgencmd get_throttled
throttled=0x0
こちらのスクリプトを実行すると詳しく表示してくれます
https://gist.github.com/aallan/0b03f5dcc65756dde6045c6e96c26459
温度の変化をログに記録
/home/pi script-temp-throttled
#!/bin/bash
date +%Y%m%d-%H:%M:%S
vcgencmd measure_temp
vcgencmd get_throttled
chmod 755 script-temp-throttled
/etc/crontab
*/10 * * * * root /home/pi/script-temp-throttled >>/home/pi/data-temp-throttled
自動でAC OFF して強制リセットする
一応ソフト電源OFFもしておく
/etc/crontab
51 23 * * * root shutdown -h now
外部タイマーセット
OFF時間 23:53 にセット
ON時間 23:56 にセット ONと同時にラズパイも起動する