先月、久しぶりにM5StickCを動かしました。しかし考えてみると、これまでM5StickCでは開発環境としてはArduinoだけを使用しており、MicroPythonを動かしたことが無かったので、試してみました。
M5StickC用のMicroPythonは、公式にはUIFlow用ファームウェアとして配布されています。M5BurnerでM5StickCに書き込むことができます。マニュアルやツール類は以下からダウンロードできます。
UIFlowのファームウェアを書き込むとMicroPythonが使えます。本来はBlockyベースの開発環境UI.Flowでプログラミングする想定なのでしょうが、個人的にあまり興味が無いので、MicroPythonのREPLに接続していきます。
ConfigurationでApp ModeにするとUSB経由でMicroPythonのREPLを使用することができました。速度は115.2Kbps、その他の設定は8bit paritiy-none 1-stopbitです。
内蔵モジュールを見てみます。ものすごく拡張されています。
>>> help('modules') MediaTrans/TimerCam hats/_finger menu/setup units/_dual_button MediaTrans/__init__ hats/_joyC menu/startup units/_earth MicroWebSrv/__init__ hats/_joystick menu/wifi units/_env MicroWebSrv/microWebSocket hats/_ncir micropython units/_env2 MicroWebSrv/microWebSrv hats/_pir neopixel units/_ext_io MicroWebSrv/microWebTemplate hats/_powerc network units/_finger __main__ hats/_puppy ntptime units/_gps _boot hats/_roverc ntptime units/_heart _flow hats/_servo sys units/_imu6886 _onewire hats/_servos uarray units/_ir _thread hats/_speaker ubinascii units/_joystick _uasyncio hats/_tof ucollections units/_light _webrepl hats/_yun ucryptolib units/_makey apa106 i2c_bus uctypes units/_mlx90640 btree inisetup uerrno units/_ncir builtins libs/__init__ uhashlib units/_pahub cmath libs/bmm150 uhashlib units/_pbhub deviceCfg libs/bmp280 uheapq units/_pir display libs/config uiflow units/_relay esp libs/dht12 uio units/_rfid esp32 libs/easyIO ujson units/_rgb espnow libs/echo umqtt/__init__ units/_rgb_multi flashbdev libs/emoji umqtt/robust units/_servo flow/__init__ libs/imu umqtt/simple units/_tof flow/adaptation libs/m5mqtt unit units/_tracker flow/flowDeinit libs/mstate units/VFunction/__init__ units/_v_function flow/m5cloud libs/numbers units/VFunction/_apriltag_code units/_weight flow/m5ucloud libs/nvs units/VFunction/_bar_code uos flow/protocol libs/power units/VFunction/_color_track urandom framebuf libs/servo units/VFunction/_dm_code ure gc libs/sh200q units/VFunction/_face_detect uselect hardware/__init__ libs/sht30 units/VFunction/_jpeg_transfer usocket hardware/_led libs/speak units/VFunction/_line_tracker ussl hardware/axp192 libs/timeSchedule units/VFunction/_motion ustruct hardware/bm8563 libs/time_ex units/VFunction/_qr_code utils hardware/button libs/urequests units/VFunction/_tag_reader utime hardware/mpu6050 libs/vl53l0x units/VFunction/_target_track utimeq hardware/sh200q m5stack units/_accel uwebsocket hat m5uart units/_acsocket uzlib hats/_adc m5ui units/_adc wav/chunk hats/_beetlec machine units/_angle wav/wav_player hats/_bugc math units/_bps wav/wave hats/_cardKB max30100 units/_button wifiCfg hats/_dac menu/__init__ units/_cardKB wifiWebCfg hats/_env menu/app units/_color hats/_env2 menu/cloud units/_dac Plus any modules on the filesystem >>>
このファームウェアのソースコードは、M5StickC専用のものは見つけられませんでしたが、以下のM5Stack用のものとほぼ共通なのではないかと思います。ドキュメントはこのリポジトリのWikiにあります。しかしそれほど詳細な記載は無く、必要に応じてソースコードを参照するほうが良さそうです。
また、M5StickC用の差分のみ集めたものが以下のリポジトリのようです。
もちろん、素のままのESP32用MicroPythonをインストールすることもできますが、その場合はM5StickCのハードウェアのためのライブラリを別途導入する必要があります。
boot.pyとmain.pyは以下のようになっていました。
boot.py:
from m5stack import *
main.py:
from m5stack import *
lcd.clear(lcd.BLACK)
lcd.text(lcd.CENTER, lcd.CENTER, 'user app')
m5stackモジュールのM5StickC版は見つかりませんでしたが、M5Stack版はこちらにあります。
dir(m5stack)
で確認すると、M5StickCでは、グローバル変数としてlcd, btnA, btnB, node_id, rtcが定義されていました。例えば
>>> lcd.text(lcd.CENTER, 72, 'Hello')
としてLCDに文字を表示することができます。
ライブラリを使用する場合はこんな感じで使えました。
>>> import i2c_bus
>>> from hardware.mpu6050 import MPU6050
>>>
>>> imu = MPU6050(i2c_bus.get(i2c_bus.M_BUS))
>>> imu.acceleration
(-0.016, 0.09799999, 1.063)
>>> imu.gyro
(-10.076, -10.015, -8.305)
>>>
コメント