ゆるく楽しむプログラミング
> トップページ > 電子工作とプログラミング > ガジェット > M5StickC 照度計

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( ) 関数で表示しています。



スケッチ

以上の スケッチを公開しています。

YuruPuro/UnitDlight

解説動画


2026/5/16 12:00 公開