micro:bitのUARTを使って、micro:bitどうしでシリアル通信するのを試してみた。(昨日の続き)
microPythonで以下のようなプログラムを書いた。
from microbit import display, Image, button_a, button_b, uart, pin0, pin1 display.show(Image.HAPPY) uart.init(baudrate=9600, bits=8, parity=None, stop=1,tx=pin0,rx=pin1) while True: if button_a.was_pressed(): uart.write("A") if button_b.was_pressed(): uart.write("B") if uart.any(): s=uart.read() # read 1 byte display.show(chr(s[0])) #show to led
昨日のUART通信のプログラムを少し変更して書いた。
UARTの初期化の処理が、uart.init(baudrate=9600, bits=8, parity=None, stop=1,tx=pin0,rx=pin1)と変わっている。
tx=pin0,rx=pin1というのが追加されている。
これは、UARTの送信用にP0という端子を使用し、UARTの受信用にP1という端子を使用するという設定だ。(それ以外の端子を使う場合、こちらを参照)
そのあとの処理は、
(1) ボタンAが押されたら、uart.write(“A”)で「A」をUARTに送信する
(2) ボタンBが押されたら、uart.write(“B”)で「B」をUARTに送信する
(3) UARTに受信データがある場合、s=uart.read()で受信し、display.show()でそのデータをLED表示部に表示する
という動作をしている。
2台のmicro:bitに同じプログラムを書き込んで、2つのmicro:bitの通信用の配線を接続する。
1つめのmicro:bitのP0端子を、2つめのmicro:bitのP1端子につなぐ。
1つめのmicro:bitのP1端子を、2つめのmicro:bitのP2端子につなぐ。
(つまり、クロス配線をする)
そして、2つのmicro:bitのGND端子どうしをつなぐ。
1つめのmicro:bitのAボタンを押すと、UARTでデータが送られて、2つめのmciro:bitで受信したデータ(この場合A)が表示される。
2つめのmicro:bitのBボタンを押すと、UARTでデータが送られて、1つめのmciro:bitで受信したデータ(この場合B)が表示される。
注意点としては、自分はICクリップ付きの電線で2つのmicro:bitをつないだのだが、基板のLED表示側の面からICクリップを引っかけると、裏側のリング状の基板パターンと基板エッジのパターンとの間の隙間に当たってしまい、うまく導通しないことがあった。
ICクリップではなく、バナナ端子などを使うとよいだろう。
—
次は、このUART通信のプログラムと、無線版のmicro:bit間の通信プログラムと合体させてみる。