自宅のスマートホーム化を進めようと思って、M5StickCを買ってみました。
まずは証明のオンオフに対応できるように光センサを使って部屋の明るさを読み取れるようにしてみます。
開発環境のセットアップ
開発環境はArduino IDEを使います。mycro pythonでもプログラミングできますが、自分が使い慣れているのがArduino IDEなので、こちらを使います。
セットアップ方法は公式リファレンスやこちらのページが参考になります。
一点、おすすめなのですが、Arduino IDEの設定で、「ツール」->「ボード」で”M5Stick-C”を選択します。
クイックスタートでは”ESP32 Pico Kit”を選ぶとありますが、”M5Stick-C”にしておくと、スケッチの転送レートで1.5Mbpsが選べるようになるからです。
Arduino IDEの設定が完了したら、さっそくサンプルスケッチを書き込んでみましょう。
最初はHello Worldが良いと思います。
コンパイルに時間がかかるならccacheを有効化しよう
さて、サンプルスケッチを書き込みましたが、コンパイルに時間がかかりませんでしたか?
全然時間がかからなかった、という人は読み飛ばしていただいて構いません。
もし、コンパイルに時間がかかるという人がいたら、ccacheというコンパイルを高速化するツールを有効化しましょう。
コンパイルするやり方は、こちらのページを参考にしました。
コメントですが、ccacheの保存先を相対パスにしていると、エラーが出るという報告もあるので、絶対パスで指定するほうがよいでしょう。
液晶ディスプレイの設定
センサで読み取った数字を液晶ディスプレイで確認したいので、液晶の文字を見やすくするために設定を変えましょう。
非公式日本語リファレンスによると、
M5.Lcd.setRotation( r );
で画面の向きを下図のように変更できます。rが図中の数字に対応します。
私は横向きのr=1を選択しました。
続いて、デフォルトの文字サイズだと小さくて読みづらいので、大きさを2倍にします。
M5.Lcd.setTextSize(2);
さて、これで文字を表示する準備ができました。次にデータを読み取る準備をしましょう。
M5StickCのピン配置
データを読み取るためにピン番号を確認します。
上の図にはM5StickCのピン配置が記載されています。今回使用するのはgroveのセンサなので、下側の4つのピン、左からGND, 5V, G32, G33を使います。
groveの光センサのピンは、表のとおりです。
| ピン | 線の色 | M5StickC |
|---|---|---|
| GND | Black | GND |
| 5V | Red | 5V |
| Not Conected | White | G32 |
| Signal | Yellow | G33 |
光センサの値はSignalからアナログデータとして出力されます。したがって、M5StickCではG33をアナログピンに設定し、アナログデータをG33から取得するようなプログロムを書けば、センサからの値を取得することが出来ます。
光センサの値を取得して液晶に表示する
以上を踏まえて光センサの値を取得して、液晶に表示するプログラムを書いてみましょう。
#include <M5StickC.h>
int PIN = 33;
// the setup routine runs once when M5StickC starts up
void setup(){
// Initialize the M5StickC object
M5.begin();
// LCD display
M5.Lcd.setRotation(1); // ボタンBが上になるような向き
M5.Lcd.setTextSize(2); // フォントサイズをデフォルトの2倍に
M5.Lcd.print("Light Sensor");
//PIN setting
pinMode(PIN, ANALOG);
}
// the loop routine runs over and over again forever
void loop() {
M5.Lcd.setCursor(0,20);
M5.Lcd.printf("Int.: %05d\n", analogRead(PIN));
delay(1000);
}
これをコンパイルしてM5StickCに書き込むと光センサの値をLCDに表示し、1秒ごとに値を更新します。
取得した値を見ると、部屋の明かりの下では2000程度の値を示します。センサを手で覆うと0になり、スマホのライトなどで照らすと4095を示します。センサのADコンバータが12ビットなので、2の12乗,4096が上限ということでしょう。
まとめ
M5StickCでgroveの光センサから値を取得することが出来ました。しかもanalogRead()しか使わずに簡単に読み取ることが出来ました。
このセンサを使って部屋の電気がついたら何かアクションを起こすなど、色々やってみたいと思います。
こんなに簡単なら他のセンサ類も試したくなりますね。

