温湿度センサー SHT31 と TWE-Lite を購入する
TWE-Lite で温湿度センサ HDC1000 を取り付け、I2Cデバイスを本格的に制御できることがわかったので、部屋のいくつかの場所や外気温度を調べるために複数のチップを購入することにした。HDC1000 は湿度表示があきらかに変だし、すでに秋月電子に売っていないので、他のものを検討する。TWE-LITE の無線タグアプリは温湿度計としてはSHT21 に対応しており、気圧までオプションがついた BME280 というのにも対応している。値段をみるとSHT21は1チップ(基板配線済み) 1500円、チップだけだと600円程度、BME280 は秋月で1080円、あと秋月では SHT31 という SHT21 の上位バージョンが950円で売っていた。ただし、SHT31とSHT21はi2cコマンドの互換性はない。また、同様の試みをしている人のページをみてみると、SHT31 は温度・湿度の精度が割と良くて広く使われているらしい。そこで、秋月電子で TWE-LITE の DIP 版と SHT31 、それに CR2032 のボタン電池とそのソケットをセットで4つずつ購入した。
SHT31 と TWE-Lite を接続する
SHT31 は5本ピンがあり、ADR ピンをGNDにするかVccにする(プルアップされている)かでi2cアドレスを44,45で選択できる。消費電力を小さくする必要もあるので、ADR 端子はオープンにして i2c アドレス 45 で運用しよう。あとはVcc, GND, SCL, SDA の各端子を TWE-LITE にはんだ付けした。
(基板の裏側)
(基板の表側)
GND とVccはちょうどTWE-LITE のVcc,GNDの位置に一致するので、ピンコネクタをさしてそのままはんだ付け。SCL,SDA は細いワイヤではんだ付けしてつないだ。
また、電池ソケットのピンがピンコネクタの穴にちょうどはまるので、電池をGND端子上のピンコネクタにぬきさしすることで電源のON/OFFとした。Vcc の方は適当な長さの細いワイヤではんだ付けする。なお、今回は DIP の足は必要ないのでつけていないが、必要であえば付けられるように、DIPの足と干渉しないように作成した。
後ろのピンコネクタは UART 信号を TWILITE-Rに送るためのコネクタ。TWILITE-R につなぐとプログラムを書き込んだり、UARTに出力されるメッセージをパソコンから確認したりできる。
無線経由で TWE-Lite 親機から子機の SHT31 の I2C 通信を行う
ここまでできて電源をONにすると、デフォルトの超簡単!TWELITE標準アプリで無線通信できりるようになった。あとは、前にやった HDC1000 と同じように無線経由で I2C 通信すれば良い。SHT31はいくつか測定のモードがあり、一定時間ごとに自動的に測定してデータを送ってくれたりする。また、測定精度を三段階で変えられる。ここでは HDC1000 と同じように、測定ごとにコマンドを送り、測定精度は中とした。(No clock stretch, repeatability medium)。そうすると、まずは 0x24 0x0b というコマンドを書き込む。その後、6ms 以上
待ってから I2C バスを読み込むと、測定が終わっていればデータが帰ってくる。前に書いたように ID は 45 番なので、コマンドは以下のようになる。
:788800014524010BX
(88:cmd)(01:W) (45:i2cアドレス) (24:コマンド1)(01:書き込みバイト数)(0B:コマンド2)
として温度読み込み開始。次に
:78880002450006X
(88:cmd)(02:R) (45:i2cアドレス) (06:読み込みバイト数)
と打ち込んだら
:7889000201066D6D63561D33
01:成功 06:読み込みバイト 6D6D(63): 温度(CRC) 561D(33): 湿度(CRC)
なお、3バイト目と 6 バイト目は CRC チェックサムだが、とりあえずは気にしなくてもよい。計算してみると、
温度 = 0x6D6D × 175.00 / 65536 - 45.00 = 25.528 ℃
湿度 = 0x561D × 100.0 / 65536 = 33.638 %
成功。温度、湿度の読み込みができた。温度・湿度ともに、他の温湿度計の表示とだいたい合っているので正しそうだ。これで、前のHDC1000用のスクリプトを少し書き換えるだけで一定の時間ごとの温度計読み込みができるようになった。