赤外線リモコンAlexaデバイスに温度計を搭載する

published_with_changes 更新日: event_note 公開日:

labelamazon alexa labelESP8266

「アレクサ、部屋の温度を教えて」 この機能の実現は結構ハードルが高いです。第一歩として、先に作った赤外線リモコンAlexaデバイスに温度・湿度計モジュールBME280を追加します。

この工作自体は簡単です。BME280はI2Cで通信するので、その信号線2本と電源、GNDの計4本をESP8266につなぐだけで終わりです。


BME280

BME280はBOSCHの基板用温度・湿度・気圧センサーです。データーシート
購入したのはAmazonで売っているモジュール製品です。


主要スペック

  • 電圧:1.8〜5V DC
  • インタフェース:I2C(最大3.4MHz)、SPI(最大10MHz)
  • 温度:-40〜+ 85℃
  • 湿度:0〜100%
  • 圧力:300-1100hPa

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で設定します。

赤外線LEDの出力pinD3(GPIO0)D0(GPIO16)
ベース抵抗 R(Ib)4.7K Ω500Ω4.7K Ω500Ω
ESP8266起動可能不可能可能可能





緑で強調表示されているピンは使用できます。黄色で強調表示されているものは使用しても問題ありませんが、主に起動時に予期しない動作をする可能性があるため、注意が必要です。赤で強調表示されているピンは、入力または出力として使用することはお勧めしません。
LabelGPIOInputOutputNotes
D0GPIO16no
interrupt
no PWM or
I2C support
HIGH at boot
used to wake up
from deep sleep
D1GPIO5OKOKoften used as SCL (I2C)
D2GPIO4OKOKoften used as SDA (I2C)
D3GPIO0pulled upOKconnected to FLASH button,
boot fails if pulled LOW
D4GPIO2pulled upOKHIGH at boot
connected to on-board LED,
boot fails if pulled LOW
D5GPIO14OKOKSPI (SCLK)
D6GPIO12OKOKSPI (MISO)
D7GPIO13OKOKSPI (MOSI)
D8GPIO15pulled to
GND
OKSPI (CS)
Boot fails if pulled HIGH
RXGPIO3OKRX pinHIGH at boot
TXGPIO1TX pinOKHIGH at boot
debug output at boot,
boot fails if pulled LOW
A0ADC0Analog
Input
X
引用元: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のライブラリは色々あるようですが、参考にしたブログで使っていたBOSCHライブラリの改良版を利用します。


サンプルスケッチの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

 



Powered by Blogger | Designed by QooQ

keyboard_double_arrow_down

keyboard_double_arrow_down