M5Burner経由で利用できるM5StickC用MicroPythonは、ベースがv1.11と、ちょっと以前のバージョン(リリース時期は2019年5月。現在のMicroPythonの最新リリースは1.13)です。一方、MicroPythonの公式サイトで配布されている汎用のESP32版MicroPythonは最新版であり、M5StickCでも動作しますが、M5StickC固有のハードウェアのドライバは含まれていません。
そこで今回はESP32用MicroPythonにLCD、モーションセンサ、電源管理チップのドライバを導入して使ってみます。また併せて、Python用IDEである「Thonny」をMicroPythonで使ってみます。
まずThonnyをインストールしてください。
次に、ESP32用MicroPythonですが、以下のMicroPython公式ページからダウンロードできます。今回はesp32-idf3-20200902-v1.13.binを使用しました。
MicroPythonのM5StickCへの書き込みはThonnyで行えます。
Thonnyのメニューから「Tools」→「Options」を選択して設定ウインドウを開き、「Interpreter」タブで処理系としてMicroPython(ESP32)を選択。さらに、ウインドウ下部の「Open the dialog for(中略)your device」という長いボタンをクリックし、M5StickCのシリアルポートと、ダウンロードしたMicroPythonのbinファイルを指定してMicroPythonをインストールします。
Thonnyの画面はuPyCraftと同様、上がエディタ、下がREPLのウインドウになっています。Thonnyの詳しい使い方は下記の公式Wikiやこの記事などを見てください。
REPLから、インストールしたMicroPythonにアクセスしてみます。
汎用のESP32版MicroPythonで使用できるモジュールは以下の通りです。
>>> help('modules') __main__ gc uasyncio/stream upip_utarfile _boot inisetup ubinascii upysh _onewire machine ubluetooth urandom _thread math ucollections ure _uasyncio micropython ucryptolib urequests _webrepl neopixel uctypes uselect apa106 network uerrno usocket btree ntptime uhashlib ussl builtins onewire uhashlib ustruct cmath sys uheapq utime dht uarray uio utimeq ds18x20 uasyncio/__init__ ujson uwebsocket esp uasyncio/core umqtt/robust uzlib esp32 uasyncio/event umqtt/simple webrepl flashbdev uasyncio/funcs uos webrepl_setup framebuf uasyncio/lock upip websocket_helper Plus any modules on the filesystem >>>
ここに、M5StickC用のライブラリを追加していきます。
今回追加するのは、MicroPythonで書かれたドライバが見つかった
・LCD(ST7735S)
・電源管理(AXP192)※LCDのバックライトも制御しています
・6軸センサ(MPU6886)
です。M5StickCには、このほかリアルタイムクロック(BM8563)やI2S接続のマイクがありますが、MicroPythonのドライバは見つかりませんでした。
まず、以下のファイルをPCにダウンロードします。
MicroPython-ST7735/ST7735.py at master · boochow/MicroPython-ST7735
MicroPython/sysfont.py at master · GuyCarver/MicroPython
M5StickC-uPy/axp192.py at master · karfas/M5StickC-uPy
micropython-mpu6886/mpu6886.py at master · tuupola/micropython-mpu6886
そして、これらのスクリプトをM5StickCにダウンロードします。
スクリプトのダウンロードもThonnyで行えます。
まず、スクリプトをThonnyから開きます。そして、FileメニューからSave As…を選択します。
すると、保存先をPCにするかデバイスをするか選択することができますので、「MicroPython device」を選択します。
最後にファイル名を入力します。これでスクリプトがM5StickC内部に保存されます。
全てのファイルを転送し終えたら、テストの意味も含め、これらのデバイスの初期化スクリプトを作成しておきましょう。特にLCDは解像度等の設定が必須です。
Thonnyで新規ファイルを作成し、以下のスクリプトを貼り付けます。そしてFileメニューからSave Asを選択し、MicroPython deviceにファイル名「main.py」で保存します。このスクリプトは3つのグローバル変数axp、lcd、imuを作成しています。(API仕様はUI.flow用のファームウェアとは異なります。)
最後に、コードをファイルに保存せずに、REPLに貼り付けて実行する例です。
Thonnyでは、MicroPythonのREPLを使用せず、独自のREPLを動作させています。Thonnyと接続中はMicroPythonを常にRAWモード(通常、MicroPythonのREPLからはRAWモードにCTRL-Aで入りCTRL-Bで抜けます)で動作させられており、インタラクティブな部分はThonnyが処理しています。
このThonny REPLでは、MicroPythonの「ペーストモード」(CTRL-Dで入りCTRL-Eで抜ける)はありません。
その代わり、REPLのウインドウに対してコードを単にペーストするだけで実行することができます。
以下のコードをコピーして、ThonnyのREPLウインドウにペーストし、エンターキーを押してみてください。
6軸センサの値がLCDに表示されるはずです。
無限ループになっていますが、止めるのは、Thonnyのウインドウ上のメニュー直下にあるSTOPボタンを押してください。CTRL-Cでは止まりません。
コメント
質問よろしいでしょうか?ブログ主さんの記事を参考に大学で研究進めている者です。m5stickcの音声認識で義手を動かすといった研究内容なのですが、YESとNOコマンドからstop goコマンドに変えたいのですがGoogle colabで学習したものをTiny g microのファイルに代入したのですがコンパイルは成功したもののm5stickc側が固まってしまいます。他に変えるべきところが分からなくて困ってます。お時間ありましたら返信待っています。
ご質問ありがとうございます。こちらの記事に関するお話ですね。
https://blog.boochow.com/article/m5stickc-tflite-micro-speech-2.html
うーん、すみませんがお役に立てそうにありません。
私がYes/NoからLeft/Rightに変更した際の変更点が以下ですが、表示回りを別にすれば、特に大きな違いはなかったように思います。
https://github.com/boochow/TFLite_Micro_MicroSpeech_M5Stack/commit/113c09d66d237dc8cd4aed1ec6774de610efc427
返信ありがとうございます。YESとnoのファイルのmatrix fusionの値を変える必要とかはないのでしょうか?
https://oskit-my.sharepoint.com/:f:/g/personal/e1917053_oit_ac_jp1/Enq27hFrtGNDh35hgispyWEBr4An_4LvWG1brdvRA9lqzQ?e=mr1plm
またお時間あるときで大丈夫なので一度見ていただけないでしょうか?無茶をいって申し訳ございません。
代わりにデバッグすることはできませんが、シリアルポートにメッセージをprintする文をsetup()やloop()の関数内の随所に適宜追加して、どこで止まっているのか調べてみてはいかがでしょうか。
なるほど試してみますありがとうございます!
やはり試してみたところ学習した値がどうもおかしいようでした。リンクにはっているgoogle colabから学習したものではどれも作動しませんでした。もとのYESとNOも学習してみましたが値が元のtinyファイルにある値と違いかたまってしまいます。ブログ主さんはgo stopで学習した値とかは保存してたりしませんか?
> ブログ主さんはgo stopで学習した値とかは保存してたりしませんか?
探してみたら、学習したモデルが残っていたので、動かしてみました。
一応動きましたが、goの認識率はあまり良くないです。私の発音が悪いのかもしれませんが・・・
モデルを入れ替えたブランチを以下にアップロードしました。
https://github.com/boochow/TFLite_Micro_MicroSpeech_M5Stack/tree/m5stickc_stop_go
ありがとうございます!ほんとに助かります!