これを買った。
M5Stack Docs - The reference docs for M5Stack products.
感想など
M5Stackにはその発売当初からそれなりに興味があったのだけれど、当時は買おうと思うと売り切れていて、そのうち興味が薄れていた。今回ディスプレイが電子ペーパーの新商品が出たのでいい機会なので試してみた形だ。
画面があるし何か表示したいのでお約束として温湿度は出しておくか、と M5Stack用環境センサユニット ver.2(ENV II) - スイッチサイエンス も併せて注文した。
とりあえずセンサーでとれる値を画面(電子ペーパー)に表示してみたのだけれど、想像していた通り体験が良い。ボタンもあるし、インターネットにも繋がるし、いろいろ遊べそうだ。
やったこと・躓きポイント
形態
Arduino IDE向けスケッチでやっている。スケッチはGitHubに放置している。
UIFlowもそのうち触ってみたいとは思う。
Grove(HY2.0-4P)端子のピン
CoreInkには下部にGrove端子が1つついているのだけれど、ESP32のI2Cの端子(SDA=21, SDL=22)ではなくてGPIOの32, 33番ピンを使う構成になっている。
なので Wire.begin
する際には引数なし(デフォルト指定)ではなく、ピン番号を指定する必要があった。
// Grove for M5Stack CoreInk Wire.begin(32, 33);
何も考えないでWire.begin
していたらI2Cデバイスをスキャンしてもセンサーが出てこなくてしばらく???状態だった。
BMP280ライブラリのアドレス指定
買ったセンサーにはSHT30とBMP280という2つのセンサーが繋がっているらしかった。とりあえず見知ったBMP280からデータを取得しようとしたらコンパイルエラーした。
ライブラリとして何となくGrove_BMP280を使って、デバイスのアドレスがライブラリのデフォルトの0x77
でなくて0x76
だったので指定したのだけれどこんな感じだった。
>no matching function for call to 'BMP280::init(int)'
— 光電/7474 (@koudenpa) 2020年11月14日
これ違うんか?https://t.co/1sqIXCqIbC
GitHub上でソースコードを見ると初期化メソッドのシグネチャはbool init(int i2c_addr = BMP280_ADDRESS);
なのだけれど、Arduino IDEでインストールしたものを見ると確かにbool init(void);
になっていた。
深く考えることはしないで使うライブラリをAdafruit_BMP280に変えてしまった。
こちらは素直にアドレス指定できた。
EEPROM の使い方
2020-11-27追記。
ArduinoにはEEPROMというライブラリが整備されていて、簡単にFlashメモリを読み書きすることができる。のだけれどこれをすんなりはできなかった。
上の文でリンクしている先はArduinoのものだけれど、M5Stackに載っているESP32系のチップセット向けはそれとは別の実装のライブラリだ。
買った当初はこんなことをつぶやいていた。
M5Stack CoreInkでEEPROM.length()すると0を得らえる。
— 光電/7474 (@koudenpa) 2020年11月15日
これはつまりスケッチが任意に読み書きできる領域ないってことか?
どうも比較的最近このライブラリの実装、初期化の仕方が変わったっぽくて適当にググった古いバージョンの情報と新しくなった使い方をごっちゃにして試して失敗していたような感じがする。
今となっては何で読み書きできなかったか迷宮入りしている。なんも覚えてない。
追記している現在では必要とする容量を指定して初期化、その後その要領の範囲で読み書きすることでEEPROMを使用できている。
#include <EEPROM.h> const int eepromSize = 1000; const int hostIdVersionAddress = 0; // ~~setup() if (!EEPROM.begin(eepromSize)) { Serial.println("failed to initialise EEPROM"); delay(1000000); } // ~~get/put EEPROM.get(hostIdVersionAddress, hostIdVersion); EEPROM.put(hostIdVersionAddress, currentHostIdVersion); EEPROM.commit();
記事のタイトル通り躓いていたが動けばよし。
ちなみに、ESP32においてはEEPROMは非推奨で、Preferencesを使えとのことらしい。そのうち置き換えようかな。