ラズパイ　i2cクロック　50KHzに下げてみた

**農業用ビニールハウスの温度湿度管理用　ラズパイ＆センサー２つ**

I2Cでセンサー１つの時は問題なかったのですが、２つに増やしたところ１つのセンサーが反応しなくなりました。
かなりの高温多湿状態のタフな環境下、センサーを換えても、ラズパイを換えても始めは正常だが、数時間後にセンサーが１つおかしくなる。短いケーブルにつけたセンサーがおかしい。
最終的にI2Cのクロックを下げることで正常に動く時間が長くなっている。ただいま実験中。
I2Cのバス速度は、AC電源を抜かないとリセットされないようす。
念のため23時50分台にシャットダウン＆外部タイマーを使って電源をOFF/ONしてラズパイを起こし1日に一回I2Cバス（ラズパイ）をリセットする。

**HW:　Raspberry Pi 3 Model B V1.2　ヒートシンク付き**
　　　１センサー　SHT31　秋月電子、　２センサー　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の２つがつながっているので、
どちらかのクロック許容範囲に影響されるとみられる

---

**高温多湿環境にて作動させるので、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と同時にラズパイも起動する