照度センサ BH1750モジュールをESP32で使う
照度センサのBH1750モジュールを使ってみます。
3個で1090円でした。
配線
ESP32に接続します。
ESP32 | BH1750 |
---|---|
5V | VCC |
GND | GND |
22 | SCL |
21 | SDA |
GND | ADDR |
ADDRピンはI2Cのアドレスを決める端子です。
この端子の電圧が0.7V未満のとき0x23、0.7V以上で0x5Cに設定されます。
0x23がデフォルトらしいのでGNDに接続しておきます。
プログラム
まずライブラリをインストールします。
ArduinoIDEのライブラリマネージャで「BH1750」と検索して一番上に出てくるやつを使います。
サンプルスケッチを参考にプログラム書きます(ほぼコピペ)
#include <Wire.h> #include <BH1750.h> BH1750 lightMeter(0x23); float lux; void setup() { Serial.begin(115200); Wire.begin(); lightMeter.begin(BH1750::CONTINUOUS_LOW_RES_MODE); } void loop() { lux = lightMeter.readLightLevel(); Serial.print("Light: "); Serial.print(lux); Serial.println(" lx"); delay(20); }
このライブラリは複数の動作モードがあります。
今回は速いけど精度が劣るLow Resolution Modeで動かしてみました。
- Low Resolution Mode - (4 lx precision, 16ms measurement time)
- High Resolution Mode - (1 lx precision, 120ms measurement time)
- High Resolution Mode 2 - (0.5 lx precision, 120ms measurement time)
動作確認
シリアルモニタで見てみます。
動いた~~
シリアルプロッタで見るとこんな感じ。
Bluetoothでワイヤレス化
昨日やったシリアルポートのBluetooth化と組み合わせてみます。
#include <Wire.h> #include <BH1750.h> #include <BluetoothSerial.h> BH1750 lightMeter(0x23); BluetoothSerial SerialBT; float lux; void setup() { SerialBT.begin("BH1750"); Wire.begin(); lightMeter.begin(BH1750::CONTINUOUS_LOW_RES_MODE); } void loop() { lux = lightMeter.readLightLevel(); SerialBT.println(lux); delay(20); }
ちゃんと動きました。
おわり