課題: LEGO SPIKE HUBとHuskylensを接続するに先立ち、まずLEGO SPIKE HUBとマイコンをUARTで接続を確立する
取り組み:使い慣れたESP32とLEGO SPIKE HUBとUARTで接続してみる(どちらもMicroPythonを使用)
結論:通信はできた(どのIDEでHUBを制御しているか?によって使えるmoduleが変わる印象があるのだが)
詳細:
テストに使ったソースコードは以下
LEGO SPIKE HUB側 (IDEを使わずTeraTermからコーディング) PORT_Fを使っている(PowerUpConnectorで接続)
# # LEGO UART TEST # import utime from hub import port port.A.mode(port.MODE_FULL_DUPLEX) utime.sleep(1) # delay for setup ???? port.A.baud(9600) MSG = 'from LEGO SPIKE' counter = 0 buf = bytearray(100) while True: msg = MSG + '(' + str(counter) + ')' print("send:", msg) port.A.write(msg) size = port.A.read(buf) if size > 0: print('received:', buf[0:size]) utime.sleep(1) counter += 1
port(A)のモードを切り替えてすぐにbaudrateとかread/writeを実行するとエラーになる。
一方、対話的にゆっくり進めるとエラーにならない。なぜ??
よく分からないが、workaroundで1秒待つ utime.sleep(1)を入れるとエラーが出なくなった。
ハードの初期化に時間がかかってメソッドの入れ替えが遅いのか???
マイコン側(ESP32-C3)
import machine import time uart1 = machine.UART(1) uart1.init(baudrate=9600, bits=8, parity=None, stop=1, tx=21, rx=20) counter = 0 MSG = b'hello from ESP32' while True: if uart1.any() > 0: print('received:', uart1.read()) msg = f'{MSG}({counter})' print('send:', msg) uart1.write(msg) time.sleep(1) counter += 1