Tera Teamマクロで10秒間にTera Teamの端末にログを表示する
概要
Tera Teamは、シリアル通信に対応しているターミナルエミュレーターです。このTera TeamでWinPCとMicro:bitとのUART通信ができます。 また、Tera Teamはマクロで送受信のタイミング、受信したデータなどに応じて、データを送信することができます。ここでは、マクロを使った簡単なサンプルを示します。
サンプルマクロ
ここで説明するマクロは、Tera Teamの端末に10秒間に1回ログを表示します。 以下の順にTera Teamのマクロを説明します。
- フロー
- コード
フロー
サンプルマクロのフローを以下に示します。
- スタートメッセージを表示
- 端末にログを表示
- 10秒間マクロを停止
- 2~3を10回繰り返す
- 完了メッセージを表示
コード
サンプルマクロのコードを以下に示します。
dispstr 'Test Start'#13#10 ; スタート i = 10 while i>0 dispstr 'Waiting for reception'#13#10 ; 端末にログを表示 pause 10 ; 10秒停止 i = i - 1 ; 10回繰り返す endwhile dispstr 'Test End'#13#10 ; 終了
マクロの実行方法
以下の手順でマクロを実行します。
- Tera Teamを起動
- 「新しい接続」ダイアログでシリアルを選択し、「OK」ボタンをクリック
- 「設定」→「端末の設定」メニューボタンで「端末の設定」ダイアログをひらく
- 「改行コード」→「受信」を「AUTO」に設定し、「OK」ボタンをクリック
- 「コントロール」→「マクロ」メニューボタンでマクロファイルを選択し、マクロを実施開始
マクロの実行結果
Tera Teamのマクロの実行結果を以下に示します。Tera Teamの端末に10秒間に1回ログを表示できました。
※購入するときは、乾電池ボックス、USBケーブルが付いているか確認することをおすすめします。
受信データの仕様によるUARTの受信方法
概要
UARTの受信フローは、受信データの仕様によって変わることがあります。受信データは以下の2つに分けられます。
- 固定長
- 可変長
固定長と可変長の特長と受信フローを説明します。
基本的な接続
以下のようにMicro:bitとWin PCとを接続します。なお、WIn PCはRS232Cテストツールをあらかじめインストールします。
受信フロー
受信フローは、以下の3つを示します。
- 固定長
- あるバイト数のデータを受信したら、受信したデータをそのまま送信する
- 可変長
- データを受信したら、受信したデータをそのまま送信する
- 改行までのデータを受信したら、受信したデータをそのまま送信する
固定長の受信データ
以下の順に説明します。
- 固定長の受信フロー
- コード
- 動作結果
固定長の受信フロー
4バイトのデータを受信したら、受信したデータをそのまま送信します。
コード
コードを以下に示します。
from microbit import * uart.init(baudrate=9600, bits=8, parity=None, stop=1) while True: if uart.any(): s = uart.read(4) uart.write(s) sleep(100)
動作結果
RS232Cテストツールの操作手順を以下に示します。
UART送受信の結果を以下に示します。
Micro:bitは4バイト分の電文を受信してそのまま送信したこと、受信バッファが空っぽになるまで送受信を繰り返していたことがわかります。
可変長(改行なし)の受信データ
以下の順に説明します。
- 可変長(改行なし)の受信フロー
- コード
- 動作結果
可変長(改行なし)の受信フロー
データを受信したら、受信したデータをそのまま送信します。
コード
コードを以下に示します。
from microbit import * uart.init(baudrate=9600, bits=8, parity=None, stop=1) while True: if uart.any(): s = uart.read() uart.write(s) sleep(100)
動作結果
RS232Cテストツールの操作手順を以下に示します。
UART送受信の結果を以下に示します。
Micro:bitはすべての電文を受信してそのまま送信したことがわかります。
可変長(改行あり)の受信データ
以下の順に説明します。
- 可変長(改行あり)の受信フロー
- コード
- 動作結果
可変長(改行あり)の受信フロー
データを受信したら、受信したデータをそのまま送信します。
コード
コードを以下に示します。
from microbit import * uart.init(baudrate=9600, bits=8, parity=None, stop=1) while True: if uart.any(): s = uart.readline() uart.write(s) sleep(100)
動作結果
RS232Cテストツールの操作手順を以下に示します。
UART送受信の結果を以下に示します。
Micro:bitは改行までの電文を受信してそのまま送信したこと、受信バッファが空っぽになるまで送受信を繰り返していたことがわかります。
※購入するときは、乾電池ボックス、USBケーブルが付いているか確認することをおすすめします。
Micro:bit、Micropythonで液晶ディスプレイに文字を表示する(GPIOを利用)
液晶ディスプレイ
液晶ディスプレイ(LCD)は、液晶の性質で光を制御し、文字、記号、図形を表示する画面装置です。
ドットマトリックスLCD
ここでは、HD44780コントローラー互換のSD1602ディスプレイを使用します。
他メーカーのSD1602ディスプレイを購入するときは、 ドライバ回路にご留意してください。
インターフェース
Micro: bitから本モジュールへデジタル信号を入力します。
MicropythonとMicro:bit
SD1602ディスプレイに「クマオフシゴロウ」を表示するサンプルソフトを以下に説明します。
フロー
サンプルプログラムはSD1602ディスプレイに初期設定をして、文字を表示します。初期設定と文字の表示方法は、HD44780コントローラーまたはSD1602ディスプレイのデータシートを参考にしてください。
接続
接続表と接続図(写真)を示します。
Micro Bit | LCD | ||
ピン番号 | 機能 | ピン番号 | 機能 |
P7 | DigitalOut | 14 | D7 |
P6 | DigitalOut | 13 | D6 |
P5 | DigitalOut | 12 | D5 |
P4 | DigitalOut | 11 | D4 |
- | 10 | D3 | |
- | 9 | D2 | |
- | 8 | D1 | |
- | 7 | D0 | |
P3 | DigitalOut | 6 | E |
GND | GND | 5 | R/W |
P2 | DigitalOut | 4 | RS |
(可変抵抗) | 3 | Vo | |
3V3 | 3V3 | 2 | V+ |
GND | GND | 1 | GND |
GND | GND | 16 | LED- |
3V3 | 3V3 | 15 | LED+ |
SD1602ディスプレイのピン番号は端から順番になっていませんので、接続にはご注意ください。
コード
from microbit import * # pinの定義 # P7 -> D7 # P6 -> D6 # P5 -> D5 # P4 -> D4 # P3 -> E # P2 -> RS # pin connections # かならず、LEDディスプレイをOFFにする rs = pin2 enable = pin3 datapins = [pin4, pin6, pin7, pin8] # Read/Wrire pin は常に0にしてWriteモードにする def pin_init(): rs.write_digital(0) enable.write_digital(0) for i in range(0, 4): datapins[i].write_digital((0)) sleep(1) def pulseEnable(): enable.write_digital(0) sleep(1) enable.write_digital(1) sleep(1) enable.write_digital(0) sleep(1) def write4bits(value): for i in range(0, 4): datapins[i].write_digital((value >> i) & 0x01) pulseEnable() display.off() pin_init() sleep(30) # wait longer than 15 ms write4bits(0x03) sleep(5) # wait longer than 4.1 ms write4bits(0x03) sleep(1) # wait longer than 10 um write4bits(0x03) write4bits(0x02) # interface 4 bits longer write4bits(0x02) # interface 4 bits longer write4bits(0x08) # DL:0(4 bits) N:1(2 lines) F:0(5*11 dots) write4bits(0x00) # display off write4bits(0x08) # D:0(off) C:0(off) B:0(off) write4bits(0x00) # display clear write4bits(0x01) write4bits(0x00) # entry mode setting write4bits(0x06) # I/D:1(Address increment) S:0(Not display shit) write4bits(0x00) # display on write4bits(0x0C) # D:1(on) C:0(off) B:0(off) rs.write_digital(1) # ク 0x0B 0x08 write4bits(0x0B) write4bits(0x08) rs.write_digital(1) # マ 0x0C 0x0F write4bits(0x0C) write4bits(0x0F) rs.write_digital(1) # オ 0x0B 0x05 write4bits(0x0B) write4bits(0x05) rs.write_digital(1) # フ 0x0C 0x0C write4bits(0x0C) write4bits(0x0C) rs.write_digital(1) # シ 0x0B 0x0C write4bits(0x0B) write4bits(0x0C) rs.write_digital(1) # コ 0x0B 0x0A write4bits(0x0B) write4bits(0x0A) rs.write_digital(1) # ゛ 0x0D 0x0E write4bits(0x0D) write4bits(0x0E) rs.write_digital(1) # ロ 0x0D 0x0B write4bits(0x0D) write4bits(0x0B) rs.write_digital(1) # ウ 0x0B 0x03 write4bits(0x0B) write4bits(0x03)
結果
SD1602ディスプレイに「クマオフシゴロウ」が表示されました。
Micro:bit、Micropythonで、マイクロサーボを動かす
マイクロサーボ
マイクロサーボは、受信したパルスのデューティ比で回転角度を制御するモーターです。マイコンがマイクロサーボを動かすとき、PWMを使うのが一般的です。
用意するマイクロサーボ
ここでは、KEYESTUDIO製のBBC Micro: bitのスターターキットにあるマイクロサーボを使用します。
他メーカーのキーパッドを購入するときは、 周辺回路にご留意してください。
インターフェース
マイクロサーボは、アナログ信号(PWM)を入力します。
MicropythonとMicro:bit
サンプルソフトを以下に説明します。
フロー
サンプルプログラムのフローを以下に示します。
- Micro:bitの初期化
- サーボの初期化、1秒待ち
- 45°に移動、1秒待ち
- 90°に移動、1秒待ち
- 135°に移動、1秒待ち
- 180°に移動、1秒待ち
- 0°に移動、1秒待ち
- 3~7を繰り返す
接続
接続表と接続図(写真)を示します。
Micro:bit | リレー |
P0 | PWM(オレンジ色線) |
5V | +(赤色線) |
GND | -(茶色線) |
コード
MicroPythonのwrite_analogは、デューティ比に応じて1~1023の数値(write_analog入力値)を入力します。 ここでは、角度からwrite_analog入力値に変換する関数を使用しています。 この関数は、次のように求めます。
- マイクロサーボの仕様からPWMのパルス幅(ms)を確認
- PWMのパルス幅(ms)から、パルス幅÷20(周期)でデューティ比を求める
- デューティ比から、1023×デューティ比でwrite_analog入力値を求める
こうして以下の表ができます。さらに、角度とwrite_analog入力値で一次方程式関数を作成します。この一次方程式関数が、コードのconv1関数になります。
サーボの角度(°) | PWMのパルス幅(ms) | デューティ比 | write_analog入力値 |
0 | 0.5 | 0.025 | 26 |
180 | 2.5 | 0.125 | 128 |
from microbit import * def conv1(kakudo): k = 23 + 0.566666*kakudo return(k) # Micro:bitを初期化 pin0.set_analog_period(20) # PWMの周期を20 msに設定 # LEDディスプレイを初期化 display.clear() # サーボの初期化 up_kakudo = 0t pin0.write_analog(conv1(up_kakudo)) sleep(1000) while True: pin0.write_analog(conv1(45)) sleep(1000) pin0.write_analog(conv1(90)) sleep(1000) pin0.write_analog(conv1(135)) sleep(1000) pin0.write_analog(conv1(180)) sleep(1000) pin0.write_analog(conv1(0)) sleep(1000)
結果
サーボホーンが、0°を基準に45°、90°、135°、180°、0°の移動を繰り返しました。
他メーカーのキーパッドを購入するときは、 周辺回路にご留意してください。
Micro:bit、Micropython、リレーで、異常ランプを点灯する
リレー
リレーとは、制御信号、電気をつなぐデバイスです。日本語では「継電器」ともいいます。電気信号によって接点を切替えるスイッチで構成されています。リレーは4極リレーと5極リレーがあります。ここでは、5極リレーを使います。
用意するリレーモジュール
ここでは、KEYESTUDIO製のBBC Micro: bitのスターターキットにあるリレーモジュールを使用します。
他メーカーのリレーモジュールを購入するときは、 周辺回路にご留意してください。
インターフェース
リレーモジュールは、デジタル信号を入力します。
MicropythonとMicro:bit
サンプルソフトを以下に説明します。
フロー
サンプルプログラムのフローを以下に示します。リレーがOFFのときは、白LEDが点灯し、赤LEDは消灯します。リレーがONのときは、赤LEDが点灯し、白LEDは消灯します。
接続
接続表と接続図(写真)を示します。
Micro:bit | リレー |
P0 | S |
3V | + |
GND | - |
コード
from microbit import * # LEDディスプレイを初期化 from microbit import * # Micro:bitを初期化 display.clear() # LEDディスプレイを初期化 pin0.set_pull(pin0.NO_PULL) # cピンの状態 while True: # ボタンAが押されているか? if button_a.is_pressed(): pin0.write_digital(1) # リレーをON else: pin0.write_digital(0) # リレーをOFF sleep(500)
結果
Micro:bitのAボタンが押されていない(通常の状態)ときは、白LEDが点灯します(赤LEDは消灯中)。Aボタンが押されたときは、白LEDは消灯して赤LEDが点灯します。
他メーカーのリレーモジュールを購入するときは、 周辺回路にご留意してください。
Micro:bit、Micropython、キーパッドでキー入力して、LDEディスプレイに数値、記号を表示する
キーパッド
キーパッドは、数値(0~9)または記号(#、、.、,など)を入力する入力機器です。このキーパッドは、複数のキースイッチの端子を格子状に配線しています(キーマトリックス方式)。キースキャンでボタンの状態を読み取ります。キースキャンとは、Row1~Row4の行ごとにHighまたはLowを出力して、Col1~Col4の入力でキーの状態を検出する方法です。例えば、Row1~Row4を出力、Col1~Col4を入力として、Row1がLow、Row2~Row4がHighの場合、Col1~Col4の入力で、1、4、7、キーが押された状態がわかります。
用意するキーパッド
ここでは、とても薄いキーパッドを使用します。
他メーカーのキーパッドを購入するときは、 周辺回路にご留意してください。
インターフェース
キーパッドとMicro:bitは、デジタル信号で入力/出力します。ここでは、Micro:bitの入力端子にプルアップ設定をしています。
MicropythonとMicro:bit
サンプルソフトを以下に説明します。
フロー
サンプルプログラムのフローを以下に示します。
- キーパットのボタン配置の定義
- 検出したキーデータを格納するバッファを設定
- キーパッドの接続ピンの初期化
- キースキャンの実行
- キースキャン結果の検証(チャタリング防止)
- キースキャン結果をLEDディスプレイに表示
接続
接続表と接続図(写真)を示します。
Micro:bit | キーパッド |
P0 | Row1 |
P1 | Row2 |
P2 | Row3 |
P8 | Row4 |
P12 | Col1 |
P13 | Col2 |
P14 | Col3 |
P15 | Col4 |
コード
from microbit import * # LEDディスプレイを初期化 display.clear() rowNum = 4 colNum = 4 # キーパッドのボタン配置 keymap = [["1", "2", "3", "A"], ["4", "5", "6", "B"], ["7", "8", "9", "C"], ["*", "0", "#", "D"]] # 検出したキーデータを格納するバッファ、2つ用意しチャタリングを防止 beforeKey = [[True for col_loop in range(4)] for row_loop in range(4)] currentKey = [[True for col_loop in range(4)] for row_loop in range(4)] # キーパッドに接続するピン rowPin = (pin0, pin1, pin2, pin8) colPin = (pin12, pin13, pin14, pin15) # キーパッドの接続ピンの初期化 for pin_loop in range(0, 4, 1): rowPin[pin_loop].write_digital(1) colPin[pin_loop].set_pull(colPin[pin_loop].PULL_UP) key_active = False while True: for row_loop in range(0, 4, 1): rowPin[row_loop].write_digital(0) for col_loop in range(0, 4, 1): beforeKey[row_loop][col_loop] = currentKey[row_loop][col_loop] currentKey[row_loop][col_loop] = colPin[col_loop].read_digital() rowPin[row_loop].write_digital(1) for row_loop in range(0, 4, 1): for col_loop in range(0, 4, 1): if currentKey[row_loop][col_loop] != beforeKey[row_loop][col_loop]: if currentKey[row_loop][col_loop] == 0: key_data = keymap[row_loop][col_loop] key_active = True break if key_active: break if key_active: print("get_key:%s" % key_data) display.show(key_data) key_active = False sleep(100)
結果
押したキーの数値または記号がLEDディスプレイに表示できました。以下は、5キーを押したときLEDディスプレイは5を表示しています。
他メーカーのキーパッドを購入するときは、 周辺回路にご留意してください。
Micro:bit、Micropython、ジョイスティックでLDEディスプレイのカーソルを移動する
ジョイスティック
ジョイスティックは、操作レバーの傾きで方向を入力する入力機器です。操作レバーの傾きは、可変抵抗で角度を検出します。また、操作レバーはスイッチになっている場合もあります。
ジョイスティックモジュール
ここでは、KEYESTUDIO製のBBC Micro: bitのスターターキットにあるジョイスティックモジュールを使用します。
他メーカーのジョイスティックモジュールを購入するときは、 周辺回路にご留意してください。
インターフェース
操作レバーの傾きで方向は、本モジュールからMicro: bitへのアナログ信号で入力します。また、ボタンはデジタル信号で入力します。
MicropythonとMicro:bit
サンプルソフトを以下に説明します。
フロー
サンプルプログラムのフローを以下に示します。
- レバーの傾きを入力
- レバーの押した状況を入力
- レバーの傾きの角度をLEDディスプレイの座標に変換
- もしレバーが押されているとき、LEDディスプレイに「YES」を表示
- そうでないとき、LEDディスプレイの座標にカーソルを表示
接続
接続表と接続図(写真)を示します。
Micro:bit | モジュール |
P0 | X |
P1 | Y |
P2 | B |
3V | + |
GND | - |
コード
from microbit import * # Micro:bitを初期化 display.clear() # LCEディスプレイを初期化. pin2.set_pull(pin2.NO_PULL) # ピンの状態 while True: x_data = pin0.read_analog() y_data = pin1.read_analog() z_data = pin2.read_digital() led_x = x_data // 200 led_y = y_data // 200 if led_x >= 5: led_x = 4 if led_y >= 5: led_y = 4 print('x:%d y:%d z:%d' % (led_x, led_y, z_data)) display.clear() if z_data: display.show(Image.YES) else: display.set_pixel(led_x, led_y, 9) sleep(500)
結果
レバーを傾けた方向にあわせて、LEDディスプレイのカーソルが移動します。また、レバーを押したとき、YES(チェックマーク)が表示します。
他メーカーのジョイスティックモジュールを購入するときは、 周辺回路にご留意してください。