ラズパイで温度と湿度の測定。
動かない〜。
どーしてー?
いや、動いてるんだがなんだかおかしい。
ラズパイで今度は温度と湿度を計測することをしてみたが、出てくる数値がおかしい。
毎回同じ数値で変化がない。
温度125度
湿度100%
そんなワケないだろ。
気温が125度なんて人間くろ焦げだし、湿度100%って部屋の中がアマゾンのジャングルか?
なにがおかしいんだろ〜。
書籍に掲載されているプログラムをチェックしてみるが何も相違はない。
うーん。
◆sudo raspi-config
i2cの有効にする
◆i2cdetect
検出された。
27を表示
◆配線
テスターで配線の断線を疑い、導通チェックしたが全て正常。
というか、上でi2cdetectで正常なんだから意味ないチェックだった。
◆モノを交換
ダメ元で購入元に問い合わせしてみた。
しかし明確な答えはもらえず…交換品を送ってくれるとのこと。
説明書は同梱されてないし、ネットで調べると全て英文だし…この手の類は苦労が絶えないな。
で、交換品が来てトライしてみたが…
結果は変わらず。
小さな部品の半田付けを2回もやってみて、結果が変わらないのは萎えるな…つらい。
貴重な時間が…。
◆プログラムを見直す
サンプルプログラムに無くて、書籍上のプログラム記載にはある…ん?
調べたら訂正が掲載されていた。
が、サンプルプログラムが正しいと。
ということで、これが原因ではない。
◆ビット演算か?
ビット演算と、加減算の優先順位で計算結果が変わって来る…ってのも気になって調べてみたが違うみたい。計算してみたら合っている。
◆部品を調べ直す
そもそものHIH-6130を動かす仕様を再度チェックしてみた。ググるとGitHub にサンプルプログラムがあった。これを参考にしてプログラムを実行してみると、、、
◆動いた
あ?
動いた。温度、湿度の値がちゃんと出た。
ほわ~~~~、原因はプログラムか。。。。
しっかし見たところプログラム内容は相違はないように見えるが…。
◆いや、違うぞ
よくよく書籍のサンプルプログラムを比較してみたら、
**** .write_quick(0x27)
time.sleep (0.1)
◆これだ
正常稼働しなかったプログラムにこの二文を挿入してみたら…動いた。しっかり値が出た。
◆原因
ということで、
書籍のサンプルプログラムに命令が不足していた…ということ。
か…マジかー。
◆考察
ビット送信をする
0.1秒待機
これを入れたら正確な値が出た、ということで憶測だが、
・値を読み取る前に信号を読み取る準備ができていなかった
・信号を読み取る前にプログラムが走ってしまい、空っぽの値を読み込んでしまった
とかかなぁ。
◆試したら
プログラムの二文は、どっちを外してもダメだった。
要はどちらも必要な命令だ。
◆SMBus
しっかし何だろーなー。
PythonのSMBusはしっかりインストールされているのに、なぜに動かなかったのだろう。
◆smbusの仕組み
こうなると、smbusの通信プロトコル?の中身を知る必要がある。
いったいどこで、どのタイミングでどの信号を送信しているのか?とか。
ってか、そこまで理解しないとコレは扱うことができないのかぁ?