シングルボードコンピュータの初歩
8 July, 2025
シングルボードコンピュータの初歩
プロダクト開発で M5Stack を扱っている。はるか昔に制御よりの組み込み開発をしていたが、ESP32 やそのほかのマイコンにさわりはじめたときに苦労したのでまとめておく。
M5Stack の用途
ほんの少し iBeacon の挙動をカスタマイズして、ウェアラブルデバイスと連携させて提供している。
BLE が難しい
まず、情報が少ない。プロトコルを定義した文書くらいしか見つからない。書籍はほんの少しあるが、用語の抽象的な説明に留まる。
結局、BLE を解析するアプリで身近な機器を subscribe してみたり、adafruit のボードを USB でつないで Wireshark から構造を見て、はじめてほんの少しだけ理解が進んだ。
マイコンが難しい
バッテリー内蔵の M5Stack を擬似 iBeacon として運用したときの稼働時間を調べようとした。google で簡潔な回答が得られるかと簡単に考えていたが、そんなわけがなかった。
まず、ESP32 やその後継チップのデータシートに書いてある電力消費量は、限定された環境にしかあてはまらない。ESP32 の制御次第で大きく変わるし、M5Stack の場合は電源の供給経路によっても変わる。
制御で変わる部分は、主にどれくらいの間 wake させて、どれくらいの間 sleep させるかによる。iBeacon の場合、advertisement を受信する側の scan 間隔や時間に合わせて動作させる必要がある。一回 advertisement して終わりだと、少なくとも Android のゆったりめの設定だと取り逃してしまう。
それから電源供給について、モバイルバッテリーを USB で接続してもさほど長時間駆動できないことがわかった。理由を調べていくと、USB で電源供給すると降圧回路を通るのでロスが大きいようだ。また、乾電池で約 3V を直結できるけど保護回路は別に準備する必要がある。
結局、VAMeter こういうのを使って試しながらやっと理解できた。
M5Stack が難しい
一番手を焼いたのは M5Capsule が RTC で deep sleep から wake してこないこと。USB で電源供給している場合になんとなく wake していそうに見えるのは、実は M5Unified の中では deep sleep していなかったので動いている風に見える。deep sleep していないというかできない構造になっている。回路図とライブラリのソースコード、海外掲示板の情報やそのほかの情報を集めてそのあたりの理解に至るまでに、かなりの時間を要した。
一番の落とし穴は、ふつうに wake できそうな感じで公式ドキュメントに書いてあることだった。
M5Unified
難しくはなく、よくメンテされているライブラリ。
M5Capsule 起動時に謎のノイズが出ることがあり、調査して結局 M5Unified のソースコードにあたったら、他の M5 board との判別に失敗している箇所があることがわかった。非常に勉強になった。
結論
なにをするにも、電気回路の基礎をちゃんと習得しておくべき。