自分とここに訪れる誰かの為に徒労の日記を書き連ねる。そこで使用している温度センサをより高精度なものへ交換しました。今で使っていたDHT11だと3.3V時の精度が低く、出力も1度刻みなのでM2Xでグラフを見てもガクガクしていて今一つだったのです。Co.,Ltd.の最新?温湿度センサがAM2320。DHT11の上位製品であるDHT22にi2c通信モードを足した製品のようで、温度測定範囲は-40°Cから80°Cとマイナスにも対応、0.1°C刻みで誤差±0.3°Cと高性能。足の間隔が2.54mmピッチのAM2320と1.27mmピッチのAM2321があり、後者を買って「あーっ」っとなってる人が結構多そうな印象。ユニバーサル基盤などで作業しやすいのはAM2320です。通信はDHT11と同じようにタイムチャートに合わせてデータを取得する1-wireモードもありますが、せっかくなので今回は楽そうで事例も多いi2cを使う事に。データシートはメーカーではなくていつもの秋月電子のページにあります。Yahoo!ショッピングにて580円+送料全国一律164円で購入。Qiitaを参考にさせていただきました。結線は線が1本増えたのでGPIOから引き直し。Vcc5V、GNDのほかAM2320の2pin(SDA)をピンヘッダの4pinへ、4pin(SCL)を6pinへ。面倒なので以下rootにて作業しています。i2c-toolsを入れてユーザー作成。piは最初からあるので何か言われる想定。i2cmodulesに2行追加します。/etc/modulesi2c-bcm2708i2c-devモジュールのブラックリストファイル(/etc/modprobe.d/raspi-blacklist.conf)から除外しますが自分はすっからかんでした。i2c-bcm2708が入っていれば#でコメントアウトします。ここまできたらリブート。期待しながらi2cdetectを実行してみます。directoryうーん。モジュールはロードされてるのに/devが無いっぽい。i2c-toolsを入れなおしてもダメ(今思えばMAKEDEVをaboteしたとかなんとか)。ググったりしているうちにこの記事に出会って思いました。-ちゃんと動きました。今元記事見たらRaspbianの標準ではi2cが有効になっていないので有効にします。書いてあるし(ノ∀`)無事にセンサと窓口が開いた所で、Rubyのプログラムにとりかかります。Gemでi2cのライブラリをインストール。i2cソースもとりあえずまるごとお借りして実行。26.1]nilnilnilnilnilnilnilnilnilうーん。このnilの山はいったい。“\x03\x00\x04”)の結果うまく値が入らずnilを返している模様。最初は通信上のエラーでCRCチェックに漏れているのかと思ったんですが、i2c通信自体となると自分のスキルでは打てる手はなし。目的優先という事でプログラムのループ部分を値が取れるまでループ取るのに何回かかったかを別ファイルに書き出しするように変更しました。end[湿度,温度]の形で入ってくるのでDHT11の時と同じく、”,”でcutしてm2xに投げるシェルを変更してcrontabも入れ替えて完了。cronで動かない・・・と思ったら作った.rbのパーミッションが755になってませんでした。これで我が家の温度グラフがより詳細に!!最後に取得失敗回数をカウントしたテキストを載せておきます。10分に一回実行し、失敗した場合は内部で1秒ごとにリトライ。結果9割は1回ないし2回で取得ができていますが、時折59回や中には99回もかかったなんてのもあってどうしたらいいのやら。/dev/shm/am2320retry-counts.txt14:10:04,114:20:04,114:30:05,114:40:05,114:51:02,5915:00:05,215:10:05,215:20:06,215:30:05,115:40:04,115:50:04,116:00:04,116:10:05,116:20:05,216:30:06,216:40:04,116:50:05,217:00:05,217:10:05,217:20:06,217:30:05,217:41:43,9917:50:05,218:00:25,2118:10:06,218:20:05,218:30:06,218:40:05,218:50:05,219:00:05,219:10:05,219:20:14,1019:30:05,219:40:05,219:50:05,220:00:05,220:10:06,220:20:05,220:30:46,4320:40:05,220:50:05,221:00:06,221:11:02,5821:20:04,121:30:06,221:40:05,221:50:05,222:00:05,2とりあえず、こんな形でうまく動き始めてくれました。説明怪しいけどAM2320は一応Amazonでも売ってます。このセンサーは自動的に省電力モードに入るらしく、一度ダミーのコマンドを送信した後、世紀のコマンドを投げることでデータを取得できます。コマンドを投げた後、15ms待たないとデータの読み取りに失敗するそうです。pythonはほとんど触ったことが無いので的外れかもしれませんが、コマンドの送信と受信を1命令で行うのではなく、送信後にウエイトを入れてから受信してみてはどうでしょう。21:33▽VELMYようこそいらっしゃいました。スリープモードは認識があっても15msは盲点でした。2回で取れる時もあれば未だに何十回もnilが続く事もあるので、read前に15ms入れてみようと思います。ありがとうございました。このサイトの使用を継続することで、その使用に同意したとみなされます。コントロール方法を含む詳細についてはこちらをご覧ください。WordPress.。