マイクロビットとラズベリーパイPico W間でUARTを用いてデータの送受信を行ってみます。
マイクロビットとラズベリーパイPico WをUARTで繋げる事によって、マイクロビットはラズベリーパイPico Wを介して内蔵されている各種モジュールで得られたデータをWiFi経由で遠隔のサーバにデータを送信出来るようになります。
※UARTに関してはマイクロビットでUARTを使ってみるをご覧ください。
microbit | raspberry pi pico w |
---|---|
GPIO 0 | GPIO 1 |
GPIO 1 | GPIO 0 |
※両方のマイコンはどちらも別の場所から電源の供給あり
今回はマイクロビットでAボタンを押したら、ラズベリーパイPico WのLEDを点灯し、マイクロビットでBボタンを押したら、ラズベリーパイPico WのLEDを消灯するようにします。
はじめにマイクロビット側のコードを作成します。
from microbit import * uart.init(9600, tx=pin0, rx=pin1) while True: if button_a.is_pressed(): uart.write("1") sleep(100) elif button_b.is_pressed(): uart.write("0") sleep(100)
続いて、ラズベリーパイPico W側のコードを作成します。
ラズベリーパイPico Wのmain.py
from machine import UART, Pin led = machine.Pin("LED", machine.Pin.OUT) u = UART(0, baudrate=9600) while True: if u.any() > 0: v = u.read(1).decode('sjis') if v == "1": led.on() else: led.off()
u = UART(0, baudrate=9600)
上記のUARTの初期化ですが、第一引数の 0 を代入することでGPIOのピン0をTXにし、ピン1をRXになるそうです。
※上記の内容に関する公式のドキュメントは見つからず
UARTの初期化はUART.init()という方法もありますが、今回は省略します。
クラス UART -- 二重シリアル通信バス — MicroPython 1.16 ドキュメント
if u.any() > 0:
ですが、マイコン間でUARTのシリアル通信が発生したかを調べる時に使用します。
v = u.read(1).decode('sjis')
は受信したデータから1ビットのみ読み取った後、値をバイト型から文字列に変換します。
上記のコードを各々のマイコンにフラッシングして、動作を確認してみましょう。