課題: 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 += 1port(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


