MaixduinoのMaixPyでGPIO制御
※理解が正しくない部分など、ちょいちょい加筆・修正しています
前回、MaixduinoでMaixPyからESP32よぶにはシリアル通信が必要と書きましたが、間違いでした。。
どうもこれが正解のようです。。
MaixduinoでMaixPyからGPIO使うの、Arduinoと併用せずにやる方法をようやく理解した。。(›´Δ`‹ ) pic.twitter.com/oooWkrkSCS
— パリピ般若(hack-tenorion) (@hack_tnr) August 22, 2020
読むべき資料
SipeedのGitHubから以下の資料を入手する
- maixduino_pins.png
- 青枠の数字を"IO"はつけずに定義してやればOK
- 定数もあるけれど資料と合ってない部分があったので、かえってつまづくかも
- MaixDunio(Pin assignment table).xlsx
- 前述の青枠の数字の代わりに、Functionの定数を使うこともできる
- しかし、print(board_info.LED_R) で戻ってきたのが13ではなく14だった(あれ?)
その他、MaixPyで下記を実行すると、ピンに割り当てる機能の定数が確認できる。(fm.fpioa.GPIO0など)
from fpioa_manager import fm print(fm.fpioa.help())
コード
ボードの9番ピンからLEDを光らせるだけですが。
import time from Maix import GPIO from fpioa_manager import fm # ボードの9番にLEDを繋いで光らせる場合 fm.register(13, fm.fpioa.GPIO0) led_1 = GPIO(GPIO.GPIO0, GPIO.OUT) flg=0 while(1): led_1.value(flg) if flg==0: flg=1 else : flg=0 time.sleep(1)
ハマった点
ESP32のFWは通常と異なるので、Arduino IDEでも通常のESP32のコードの流用はできないこともある。
- ArduinoIDEでledcSetupなど対応していないメソッドを呼ぶと、ESP32が延々再起動する
- ArduinoIDEはanalogWriteもコンパイルエラーになった。
- Maixduino_esp32_fimwareをESP32で入れた状態で、MaixPyからanalogWriteはできるらしい
- analogReadは動く。(逆にMaixPy上で動かせない)
MaixPyのPWM制御はトラ技にあったので、こちらを参考にしようと思います。
GPIOのピンアサインさえわかれば、あとはM5StickVでググるのが吉。
・・・そういえばBLEって使えないんですかね。
まぁ、通常のESP32のようなことがしたいなら、M5Atom LiteかM5StickCと接続した方が良い気もします。