M5Stack/M5StickC/ATOMを使うときの覚書

CPU

省電力設定のためには、CPUの周波数を抑えるのが有効だが、80MHz以上に設定しておかないと通信できない。デフォルトは240MHzです。

setCpuFrequencyMhz(80);

バッテリー残量

基本はバッテリー電圧で残量を判断する。 自分はパーセント表示にこだわらないので電源電圧を見て判断している。 4.0V以上あれば十分。3.5Vとかだとほぼ電池ない感じ。

M5.Axp.GetBatVoltage();

プログラム容量

WiFiと、BLEと使っていろいろやろうとすると、あっという間にプログラムのサイズが上限値の1280KiBを超えて以下のようなエラーがでる。

Error: The program size (xxxxxxx bytes) is greater than maximum allowed (1310720 bytes)

platform.iniに以下を追加して、OTAを無効にすると容量が1280KiBから3070KiBまで増やせる。

board_build.partitions = no_ota.csv

シリアルモニタ

シリアルモニタを使うとき、M5.begin()などではデフォルトのボーレートは115200になっているので platformio.iniには以下を追加しておく必要がある。

monitor_speed = 115200

I2C

複数デバイス

複数のデバイスと同時並行でI2C通信する必要がある場合、ひとつはWire、もう一つはWire1とする必要がある。 (三つ以上同時並行で使いたいときは??)

M5のサンプルコードはWireでハードコーディングされていることが多いので、書き直す必要がありますね。

PIN

GND, 5V, SDL, SCLの順で並んでいるので、SDLとSCLのピン番号を確認して初期化すれば使える。

Wire.begin(SDL, SCL);

M5.begin()で勝手に初期化されていることがあるので要確認。

ATOM

ATOMのGroveポートはpinは26と32なので、 I2Cで使う場合は以下でOK。

Wire.begin(26, 32);

ただし、M5.begin()は以下のようにI2Cを25と21で初期化するので注意が必要。

Wire.begin(25,21,10000);

M5StickC

Groveポートのpinは32と33。

Hatの場合は共通なんだろうか? ENV2はI2Cにpinは0と26を使っている様子。

Wire.begin(0, 26);

ATOM Motion

Port Bのpinは33と23。

Wire.begin(33, 23);

WiFi

待ってもつながらないときはbeginから何度かやり直していればつながる。リトライ処理の実装は必要。

WiFi.begin(ssid, passpharse);

M5CoreやM5StickCなどのM5.Lcdの色指定は16bitなので、わかりやすい32bitで指定すると変換が必要になる。

uint16_t To16BitColor(uint32_t color) {
  uint8_t r = (color >> 16) & 0xFF;
  uint8_t g = (color >> 8) & 0xFF;
  uint8_t b = (color >> 0) & 0xFF;
  return ((r>>3)<<11) | ((g>>2)<<5) | (b>>3);
}

ATOMなどのLEDの色指定はGRBの順になっているのでRGBで指定したければ変換が必要。

uint32_t RGB2GRB(uint32_t color) {
  const auto r = (color >> 16) & 0xFF;
  const auto g = (color >> 8) & 0xFF;
  const auto b = color & 0xFF;
  return (g << 16) | (r << 8) | b;
}

Timer Camera

なかなかアップロードできなかった、upload_speedとboard_build.partitionsの設定が必要。

[env:m5stack-timer-cam]
platform = espressif32
board = m5stack-timer-cam
framework = arduino
lib_deps = m5stack/Timer-CAM@^0.0.1
board_build.partitions = huge_app.csv
monitor_speed = 115200
upload_speed = 1500000