micro:bitのUARTを使って、PCとシリアル通信するのを試してみた。
microPythonで以下のようなプログラムを書いた。
from microbit import display, Image, uart display.show(Image.HAPPY) uart.init(baudrate=9600, bits=8, parity=None, stop=1) uart.write("\r\n*** UART test ***\r\n") while True: if uart.any(): s=uart.read() # read 1 byte uart.write(s) # echo back display.show(chr(s[0])) # show to led
このあたりのuartについての公式サイトの情報を参考にした。
→ UART — BBC microbit MicroPython 0.5.0 ドキュメント
uart.initでシリアルポートを初期化するのだが、このときに使うpinを指定することもできる。
逆に、pinを指定しない場合にはmicro:bitのUSB-UART機能を使用することができ、PCとUSBケーブルで繋げた状態でPCとシリアル通信をすることができる。
ただし、microPythonのコンソール機能として普段は使われているので、デバッグ用などにmicroPythonのコンソールを使うことができなくなるので注意が必要だ。
機能としては、s=uart.read()で1バイトを受信し、uart.write(s)でそれをエコーバックとして送信し、同時にLED表示部にdisplayで表示をしている。
display.show(s)とはできない。(sがbytes型というbyteの配列なので、文字列としては使えないため)
PC側は、TeraTermなどでmicro:bitに対応したCOMポートを、9600bps,8ビット,パリティなし,ストップビットなしという設定にすれば、通信をすることができる。
PCとmicro:bitの通信がつながった状態で、一度micro:bitのリセットボタンを押せば、最初に「*** UART tesst ***」という通信がPCに送られてきて表示される。
そのあと、PC側でキーボードから例えば「a」と1文字入力すると、micro:bit側からエコーバックで「a」が帰ってきて表示される。
それと同時に、micro:bitのLED表示部にも「a」と表示される。
うまく動作するものが書けたようだ。ちょっと変更すれば、micro:bitどうしの通信をすることもできる。
—
次は、radioによる無線通信と組み合わせて、uartからradioを使った通信のブリッジみたいなものを作ってみたい。