「アレクサ、部屋の温度を教えて」 この機能の実現は結構ハードルが高いです。第一歩として、先に作った赤外線リモコンAlexaデバイスに温度・湿度計モジュールBME280を追加します。
この工作自体は簡単です。BME280はI2Cで通信するので、その信号線2本と電源、GNDの計4本をESP8266につなぐだけで終わりです。
BME280
I2C設定とGPIO調整
I2CにD1pin(SCL)、D2pin(SDA)を使用するので、今まで赤外線LEDの出力に使っていたD2(GPIO4)はD0(GPIO16)へ移動します。
赤外線LEDの出力はまずFretzingの図のように移動元のとなりのD3(GPIO0)を使いましたが、条件によってはESP8266が起動できませんでした。BME280だけをESP8266で使うのであれば、この接続で問題ありません。
赤外線出力pinによってESP8266が起動したりしなかったりする原因は不明ですが、状況としては出力pinをベース電流とする2SC1815のベース抵抗が関係していました。下記の引用表のNoteで記された条件には当てはまらないとは思うのですが、起動できる条件とできない条件があります。先のブログに書いたようにここはベース電流の飽和域で使いたいのでベース抵抗 R(Ib)=500Ωで起動できるGPIO16で設定します。
緑で強調表示されているピンは使用できます。黄色で強調表示されているものは使用しても問題ありませんが、主に起動時に予期しない動作をする可能性があるため、注意が必要です。赤で強調表示されているピンは、入力または出力として使用することはお勧めしません。引用元:ESP8266 Pinout Reference: Which GPIO pins should you use?
Wemos D1 Mini Pinout
deep sleepからの復帰機能を使うにはD0 (GPIO16)とRSTを短絡するFlashモードで再起動する場合は、D3 (GPIO0)をGNDに短絡した状態でResetボタンを押すD4 (GPIO2)をGNDと短絡するとボード上のBlue LEDが点灯するI2C初期化 Wire.begin(4, 5)引用元:ICピン配置図(個人的参考資料)
2 Arduino, NodeMCU (ESP8266)
2.2 WeMos D1 mini
起動が成功したD0(GPIO16)kIrLed = 16 |
ライブラリとスケッチ
サンプルスケッチのbme280_test.inoを動かしてみると、次の温度、湿度、気圧のデータが得られました。起動直後のログです。
Measuring...
Done!
Temp=17.73
Humidity =34.04
Pressure=1000.09
PressureMoreAccurate=1000.08
TempMostAccurate=17.73
Humidity MostAccurate=34.04
PressureMostAccurate=1000.08
Good Better Best
Temperature 17.73 17.73
Humidity 34.21 34.20
Pressure 1000.09 1000.07 1000.08
Good Better Best
Temperature 17.89 17.89
Humidity 33.77 33.77
Pressure 1000.07 1000.05 1000.05
Good Better Best
Temperature 17.88 17.89
Humidity 33.56 33.57
Pressure 1000.08 1000.07 1000.07
Good Better Best
Temperature 17.89 17.89
Humidity 34.92 34.93
Pressure 1000.09 1000.08 1000.08
Good Better Best
Temperature 17.88 17.88
Humidity 34.75 34.76
Pressure 1000.12 1000.09 1000.09