ESP8266 (ESP-WROOM-02) に照度センサー(BH1750)を繋いでみた


ESP8266 (ESP-WROOM-02) に照度センサー(BH1750)を繋いでシリアルプロッタでグラフ化してみました。

パーツについて

BH1750は照度(ルクス)を高精度にデジタル測定できるセンサーです。¥180と激安です。
CdSセルは、もっと安いですが抵抗値をルクスに変換するのに一手間掛かるので、客観的な数値を取りたい場合はこのセンサーがオススメです。

ESP8266はNodeMcu Lua ESP8266 CH340という開発ボードを使っています。
中国から届くのに時間がかかりますが、¥480と激安です。

回路について

BH1750I2Cという規格で接続できるセンサーです。
この規格であれば、他のセンサーとカスケード接続でき、ESP8266からも簡単に利用できます。
Amazonでも色々なI2Cデバイスが売られているので眺めているだけでも夢が広がります。

接続は、
SCLにGPIO5、SDAにGPIO4を繋いで、
後は電源とGNDを繋ぐだけです。

回路図 っぽいもの

ソースコード(スケッチ)

BH1750のESP8266用ライブラリが公開されていたのでそちらを利用しました。
lightMeter.beginの中で、Wire.begin()しているので、setup()では不要です。

BH1750.ino

#include <Wire.h>
#include "BH1750.h"

BH1750 lightMeter(0x23);
float lux = 0.0;

void setup() {
  // BH1750  
  lightMeter.begin(BH1750_CONTINUOUS_LOW_RES_MODE);
  Serial.println("BH1750 start.");

  // シリアル通信を開始
  Serial.begin(115200);
  Serial.println("Serial start.");
}

void loop() {

  // 照度を計測してシリアルに出力
  uint16_t lux = lightMeter.readLightLevel();
  Serial.println(lux);

  delay(1000);
}

  • BH1750_CONTINUOUS_LOW_RES_MODEの部分を変更すると測定精度やモードが設定できます。高精度にすると測定に120ms程かかるそうです。
    • BH1750_CONTINUOUS_HIGH_RES_MODE
    • BH1750_CONTINUOUS_HIGH_RES_MODE_2
    • BH1750_CONTINUOUS_LOW_RES_MODE
    • BH1750_ONE_TIME_HIGH_RES_MODE
    • BH1750_ONE_TIME_HIGH_RES_MODE_2
    • BH1750_ONE_TIME_LOW_RES_MODE
  • ライブラリを利用する場合は、hファイルとcppファイルをino(スケッチ)と同じディレクトリに置けばOKです
  • 置いたライブラリは#include <xxxx.h>ではなく#include "xxxx.h"で読み込みましょう

グラフ

Arduino IDEのシリアルプロッタでグラフ化してみました。

照度

手をかざして影を作ったり、作らなかったりしてみました。

※最終的に、このセンサー&ESP8266は自宅ガレージの環境監視に使う予定

参考URL

BH1750のライブラリ
https://github.com/claws/BH1750

I2C
https://ja.wikipedia.org/wiki/I2C

I2C バス仕様およびユーザーマニュアル
http://www.nxp.com/documents/user_manual/UM10204_JA.pdf