熊おふし五郎が行く

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

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

概要

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

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

基本的な接続

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

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

TeraTeamとマクロ

以下の順に説明します。

  • フロー
  • コード

フロー

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

  1. 開始コメントを表示
  2. ループ開始
  3. "TEMP"コマンドを送信したら、データを受信するまで待つ
  4. 受信した温度データを表示
  5. "LLVL"コマンドを受信したら、データを受信するまで待つ
  6. 受信した明るさデータを表示
  7. 10回のループしたら、完了する
  8. 1.に戻る

コード

コードを以下に示します。

dispstr 'Test Start'#$0A

i = 10 ; 10回繰り返す。
while i>0
  dispstr 'TEMP=' ;温度データ取得のコマンドを送信
  sendln 'TEMP'
  timeout = 1
  waitln '#' ; 受信した温度データを表示

  dispstr 'LLVL=' ;明るさデータ取得のコマンドを送信
  sendln 'LLVL'
  timeout = 1
  waitln '#' ; 受信した明るさデータを表示

  i = i - 1
endwhile

dispstr 'Test End'#$0A

MicropythonとMicro:bit

以下の順に説明します。

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

フロー

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

  1. UARTポートを設定
  2. 200 ms毎に、コマンドの受信を確認
  3. コマンドを受信した場合、そのコマンドを解析し、それに応じたデータを送信
  4. 2に戻る(ループ)

コード

コードを以下に示します。

from microbit import *

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.readline()
        s_str = s.strip()
        if s_str == b'TEMP':
            uart.write(str(temperature()) + '\r\n')
        elif s_str == b'LLVL':
            uart.write(str(display.read_light_level()) + '\r\n')
        else:
            uart.write('NG\r\n')
    sleep(200)

動作結果

UART送受信の結果を以下に示します。TereTeamのマクロを実行すると、Micro:bitが計測した温度と明るさのデータが表示されます。

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

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