以前、Atom Matrixに搭載されている加速度センサにアクセスしたことがあったのですが、今回はM5Stack Core2 v1.1版です。
blog.kimizuka.org
docs.m5stack.com
以前、黄金炒飯(を輝かせるフタ)を作ったことがあるのですが、その改修にM5Stack Core2が使えないかと思い、その検証です。
以前作ったものは、iPhone・Arduino・LEDテープ・電池ボックスを強引に詰め込んでいたので、ものすごく重かったんです。
せっかくなので、当時制作した、制作手順の抜粋を記載しておきます。
結局のところ、
- 加速度センサによるフタの開閉検知
- フタの開閉に合わせたLEDの制御
- フタの開閉に合わせた音源の制御
- 無線で駆動できるバッテリー
があればよいので、M5Stack Core2 + NeoPixelで全てが賄えるのではないかと考えた次第です。
ソースコード
#include <M5Core2.h> float accelerationX = 0.0F; float accelerationY = 0.0F; float accelerationZ = 0.0F; int DELAY = 100; void setup() { M5.begin(); M5.IMU.Init(); M5.Lcd.fillScreen(BLACK); M5.Lcd.setTextColor(WHITE, BLACK); M5.Lcd.setTextSize(4); } void loop() { M5.update(); M5.IMU.getAccelData(&accelerationX, &accelerationY, &accelerationZ); M5.Lcd.setCursor(10, 10); M5.Lcd.printf("X: %.2f", accelerationX); M5.Lcd.setCursor(10, 50); M5.Lcd.printf("Y: %.2f", accelerationY); M5.Lcd.setCursor(10, 90); M5.Lcd.printf("Z: %.2f", accelerationZ); delay(DELAY); }
非常に単純なプログラムです。
DEMO
X軸、Y軸、Z軸にかかる加速度が表示されます。
はまったこと
BOARDS MANAGERから、M5Stack by M5Stack officialの開発時最新版(3.2.1)をインストールして、Arduino IDEから書き込もうとすると、エラーが出て書き込めせんでした。
/Arduino/libraries/M5Core2/src/utility/pngle.c:31:10: fatal error: rom/miniz.h: No such file or directory
31 | #include
| ^~~~~~~~~~~~~
compilation terminated.
exit status 1Compilation error: exit status 1
バージョンを2.14まで下げると、割とガッツリとエラーが表示されるものの、書き込みは成功するようになったので、一旦このまま開発を進めようと思います。
In file included from /Documents/Arduino/libraries/M5Core2/src/AXP2101.h:5,
from /Documents/Arduino/libraries/M5Core2/src/AXP2101.cpp:1:
/Library/Arduino15/packages/m5stack/hardware/esp32/2.1.4/libraries/Wire/src/Wire.h: In member function 'bool AXP2101::readRegister(uint8_t, uint8_t, uint8_t*, uint16_t, uint32_t)':
/Library/Arduino15/packages/m5stack/hardware/esp32/2.1.4/libraries/Wire/src/Wire.h:127:13: note: candidate 1: 'uint8_t TwoWire::requestFrom(int, int)'
uint8_t requestFrom(int address, int size);
^~~~~~~~~~~
/Library/Arduino15/packages/m5stack/hardware/esp32/2.1.4/libraries/Wire/src/Wire.h:125:13: note: candidate 2: 'uint8_t TwoWire::requestFrom(uint8_t, uint8_t)'
uint8_t requestFrom(uint8_t address, uint8_t size);
^~~~~~~~~~~
/Library/Arduino15/packages/m5stack/hardware/esp32/2.1.4/libraries/Wire/src/Wire.h: In member function 'uint8_t AXP2101::readRegister8(uint8_t, uint8_t, uint32_t)':
/Library/Arduino15/packages/m5stack/hardware/esp32/2.1.4/libraries/Wire/src/Wire.h:127:13: note: candidate 1: 'uint8_t TwoWire::requestFrom(int, int)'
uint8_t requestFrom(int address, int size);
^~~~~~~~~~~
/Library/Arduino15/packages/m5stack/hardware/esp32/2.1.4/libraries/Wire/src/Wire.h:125:13: note: candidate 2: 'uint8_t TwoWire::requestFrom(uint8_t, uint8_t)'
uint8_t requestFrom(uint8_t address, uint8_t size);