Kick Out the World

技術的なメモとかポエムを書きます。

M5Stack×Moddable入門その2~I2Cでバッテリー情報を読み取る

センサー情報とかを取得する練習としてバッテリー残量をとってみることにした。起動していてイマイチ残量がわからないというのもあったので。

IP5306

M5stackにはIP5306という電源制御モジュールが搭載されており、schematicを読んでいるとI2C通信ができるようにカスタマイズされたものが搭載されているようだ。

Power Management IC (IP5306) is customized I2C edition,its I2C address is 0x75. Clickhere to check IP5306 datasheet

ということで、この0x75アドレスに対してIC2通信をしてみる。 レジスタの情報とかはリンクされているデータシートを読んでみることにしたが中国語だった。

どうもバッテリー残量を取得できるレジスタ情報の記載がなく困っていたが、色々と紆余曲折もありつつ最終的にはM5stack公式のリポジトリにIP5306にアクセスするコードがあったので、これを参考にすることにした。

M5Stack/Power.cpp at master · m5stack/M5Stack · GitHub

結局は自分でデータシートと格闘するよりも既存のCやC++のデバドラ探してきて移植したほうが楽そうである印象。

Moddableとしての実装

I2C通信するドライバを作成するにあたっては、他のModdableのリポジトリにあるドライバのコードを見てながら真似てみた結果、I2Cクラスを拡張して、IP5306と通信して情報取得するドライバを作ることができた。

I2C通信先のアドレスとレジスタのアドレスおよび読み取った値のビットマスク方法が分かっていれば、特に難しいことはなさそう。

ということで3つのボタンにそれぞれ、充電中か否か / フル充電か否か / バッテリー残量 を取得する処理を割り当てて表示するものができあがった。

フル充電状態はなぜか取れないけど、残量が分かればまぁいいでしょう。

おまけ:起動音を消す

起動時の音が結構うるさい。

%MODDABLE%/build/devices/esp32/targets/m5stack/setup-target.jsに機器固有の初期処理が書いてあるので、鳴動処理をコメントアウトすることで解消された また、このファイル中で、ディスプレイ下に配置された3つのボタンをピン番号を指定してglobal.buttonとして登録されている