概要
M5Cameraで環境センサユニット ver.2(ENV II)が使えたのでメモ。M5CameraとENV IIはGrove端子経由のI2C接続。M5StackのサンプルをベースにI2CのGPIOを明示的に指定すればOK。
ちなみにQiita初投稿。Arduino、M5Stackはもちろんマイコン系、ひいてはMarkdownすら超初心者ゆえ、嘘を書いてる恐れあり。
試した環境
- M5Camera Version B
- M5Stack用環境センサユニット ver.2(ENV II)
- Arduino IDE 1.8.15
- Arduino core for the ESP stable 1.0.6
- Adafruit BMP280 Library 2.3.0
手順
サンプルソースを入手する
以下のサイトから、M5StackでENV IIを使うサンプルソースを入手し、Arduino IDEで開く。
- Adafruit_Sensor.h
- ENVII_SHT30_BMP280.ino
- SHT3X.cpp
- SHT3X.h
以下、個人的な好みでENVII_SHT30_BMP280.inoをM5Camera-ENVII.inoと改名しているけど、気にしないように。
M5Stackライブラリ関係をコメントアウトする
M5CameraはM5Stackライブラリとは無関係(だと思う)。よって、M5Stackライブラリ関係の行をコメントアウトする。
以下、一部の例。要は#include <M5Stack.h>
とM5.*
みたいな行をコメントアウト。今回の場合はM5Camera-ENVII.inoのみが対象。
//#include <M5Stack.h>
...
void setup() {
// M5.begin();
// M5.Power.begin();
Wire.begin();
...
シリアルの初期化を追加する
M5Stackライブラリ関係をコメントアウトした影響で、シリアルの初期化もされないので、自分で追加する。これを忘れるとシリアルモニターに何も表示されず、結構な量の汗が出る。
// M5.Power.begin();
Serial.begin(115200); // 追加する
Wire.begin();
I2CのGPIOを明示的に指定する
M5CameraのGrove端子のI2Cは、SDAがGPIO:4、SDLがGPIO:13。と、M5Camera本体に老眼には読めない文字で書いてある。多分、やらないといけない。けど、やらずには試していない。
void setup() {
...
Serial.begin(115200);
Wire.begin(4,13); // 元はWire.begin();
...
}
そして何とも行儀の悪い感じがするけど、もう一か所Wire.bigin()
が潜んでいる。それがSHT3X.hの中。
SHT3X::SHT3X(uint8_t address)
{
Wire.begin(4,13); // 元はWire.begin();
_address=address;
}
ちなみにこの辺り、以下のページを参考にさせてもらった。
動かす
意外にも、これだけで動く。M5Cameraに流し込んで、リセットボタンを押す。
もっとあちこち修正がいるかと思ったけど、そうでもなかった。一番悩んだのはシリアルの初期化。起動してもシリアルモニターに何も表示されず、どっかでパニクってるのかと思って、自分がパニクってた。
最後に
最終的にはブラウザからM5Cameraにアクセスして、静止画や温度を取れるようにしたい。世の中には変わった使い道もあるということで。