Micro:bit(親機)とTeraTeam(WinPC/子機)の文字データ送受信
概要
Micro:bitは、AボタンまたはBボタンを押されると、UART通信でWinPCのTeraTeamにコマンドを送信します。受信したTeraTeamは、押されたボタンに応じてデータを送信します。ここでのUART通信の電文は改行コード付きです。
基本的な接続
以下のようにMicro:bitとWin PCとを接続します。なお、Win PCはTera Termをあらかじめインストールします。
TeraTeamとマクロ
以下の順に説明します。
- フロー
- コード
フロー
フローを以下に示します。
- 開始コメントを表示
- ループ開始
- タイムアウトを30秒に設定
- タイムアウトしたら、ループを終了する
- "GETDATE"コマンドを受信したら、日付を送信
- "GETTIME"コマンドを受信したら、現在の時間を送信
- 10秒待つ
- 10回のループしたら、完了する
- 1.に戻る
コード
コードを以下に示します。
dispstr 'Test Start'#13#10 ; 10回繰り返す。 i = 10 while i>0 dispstr 'Waiting for reception'#13#10 ; タイムアウトを30秒に設定。 timeout = 30 ; 文字列 "GETDATE" か "GETTIME" を待つ。 waitln 'GETDATE' 'GETTIME' ; タイムアウトなら、:timeout へジャンプ。 if result=0 then dispstr 'Time out'#13#10 goto macro_end endif ; "GETDATE" が来たなら、日付を送信 If result=1 then ; 現在の日付を取得してMicro:bitに送信 getdate datestr sendln datestr dispstr 'Send Date'#13#10 endif ; "GETTIME" が来たなら、時間を送信 If result=2 then ; 現在の時間を取得してMicro:bitに送信 gettime timestr sendln timestr dispstr 'Send Time'#13#10 endif pause 10 i = i - 1 endwhile :macro_end dispstr 'Test End'#13#10
MicropythonとMicro:bit
以下の順に説明します。
- フロー
- コード
- 動作結果
フロー
フローを以下に示します。
- UARTポートを設定
- 100 ms毎に、AボタンまたはBボタンの状態を確認
- AボタンまたはBボタンが押された場合は、コマンドを送信
- コマンドを送信したら、データの受信を200ms待ち、データを受信
- 2に戻る(ループ)
コード
コードを以下に示します。
from microbit import * uart.init(baudrate=9600, bits=8, parity=None, stop=1, tx=None, rx=None) uart.write("*** Micro:bit UART test ***\r\n") s = "" def get_return(): sleep(200) if uart.any(): s = uart.readline() display.scroll(s.strip()) while True: if button_a.is_pressed(): uart.write("GETDATE\r\n") get_return() elif button_b.is_pressed(): uart.write("GETTIME\r\n") get_return() else: pass sleep(100)
動作結果
UART送受信の結果を以下に示します。Micro:bitのAボタンを押すと、"Send Date"がTera Termに表示され、Micro:bitのLEDディスプレイに日付が表示されます。Bボタンを押すと、"Send Time"がTera Termに表示され、Micro:bitのLEDディスプレイに時間が表示されます。
※購入するときは、乾電池ボックス、USBケーブルが付いているか確認することをおすすめします。