M5StickC用環境光センサーを使って照度計を作る
M5StickC(M5StickC Plus/ M5StickC Plus2 / M5StickS3)用の環境光センサHatを使ってM5StickCで照度計を作ります。
M5StickC 環境光センサHat はコレ(スイッチサイエンスで購入)を使用
一応 Amazonでも買えます
動作状態はこんな感じで、明るさ(ルクス値) と作業に適した明るさがあるか判定インジケータを表示します。明るさが足りない作業はグレー、適度な明るさならホワイト、明るすぎるとイエローで表示。
各作業の明るさの目安は ChatGPTの回答を使用しています。
| 作業内容 | BH1750机上測定値の目安 | |
|---|---|---|
| パソコン操作 | 300〜500 lx | |
![]() |
読書 | 400〜700 lx |
| 手書きレポート・勉強 | 600〜1000 lx | |
| はんだ付け | 1000〜2000 lx |
環境光センサHat
環境光センサHatの製品ページに環境光センサHat用のライブラリとM5StickC / M5StickC Plus用のサンプルスケッチがあるのですが・・・コレが動かないと言う・・・Wireクラスの初期化にSCL/SDAの指定が必要なようです。
I2Cピンは▼となっています。
| 機種 | SDA | SCL |
| M5StickC Plus | 0 | 26 |
| M5StickC Plus2 | 0 | 26 |
| M5StickS3 | 8 | 0 |
機種判定を入れて、こんな感じで定義しておくと良いです。
// I2Cピンの定義
#if defined(ARDUINO_M5STACK_STICKC_PLUS)
#define SDA_PIN 0
#define SCL_PIN 26
#elif defined(ARDUINO_M5STACK_STICKC_PLUS2)
#define SDA_PIN 0
#define SCL_PIN 26
#elif defined(ARDUINO_M5STACK_STICKS3)
#define SDA_PIN 8
#define SCL_PIN 0
#else
#error "Unsupported board"
#endif
Wire.begin(SDA_PIN, SCL_PIN);
センサ本体のBH1750FVIはFRISKサイズの照度計で使用したBH1750と大体同じようです。
I2Cアドレス 0x23
操作手順
① 0x10(計測モード)を送信
② 180m秒Wait
③ 2Byte(UINT16)読み出し
読みだした2バイト整数 ÷ 1.2 = 照度(単位:ルクス)
操作手順①で送信しているのは計測モードです
| モード | コマンド | 分解能 |
|---|---|---|
| H-Resolution | 0x10 | 1 lx |
| H-Resolution2 | 0x11 | 0.5 lx |
| L-Resolution | 0x13 | 4 lx |
アイコン表示
アイコンはPNG画像を image2cppサイトでバイナリ2値データに変換して埋め込んでいます。表示には M5Unifidライブラリの drawBitmap( ) 関数で表示しています。

スケッチ
以上の スケッチを公開しています。解説動画
2026/5/16 12:00 公開
