熊おふし五郎が行く

主にマイコンボードを動かした記録を書いています

Micro:bit(親機)とTeraTeam(WinPC/子機)の文字データ送受信

概要

Micro:bitは、AボタンまたはBボタンを押されると、UART通信でWinPCのTeraTeamにコマンドを送信します。受信したTeraTeamは、押されたボタンに応じてデータを送信します。ここでのUART通信の電文は改行コード付きです。

f:id:bear_9973:20210110173033p:plain:w350
概要図

基本的な接続

以下のようにMicro:bitとWin PCとを接続します。なお、Win PCはTera Termをあらかじめインストールします。

f:id:bear_9973:20210110173331p:plain:w350
基本的な接続

TeraTeamとマクロ

以下の順に説明します。

  • フロー
  • コード

フロー

フローを以下に示します。

  1. 開始コメントを表示
  2. ループ開始
  3. タイムアウトを30秒に設定
  4. タイムアウトしたら、ループを終了する
  5. "GETDATE"コマンドを受信したら、日付を送信
  6. "GETTIME"コマンドを受信したら、現在の時間を送信
  7. 10秒待つ
  8. 10回のループしたら、完了する
  9. 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

以下の順に説明します。

  • フロー
  • コード
  • 動作結果

フロー

フローを以下に示します。

  1. UARTポートを設定
  2. 100 ms毎に、AボタンまたはBボタンの状態を確認
  3. AボタンまたはBボタンが押された場合は、コマンドを送信
  4. コマンドを送信したら、データの受信を200ms待ち、データを受信
  5. 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ディスプレイに時間が表示されます。

f:id:bear_9973:20210113174650p:plain:w350
Tera Termのログ

※購入するときは、乾電池ボックス、USBケーブルが付いているか確認することをおすすめします。