マイクロビットとラズベリーパイPico W間でUARTでデータを送受信してみる


マイクロビットとラズベリーパイ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ビットのみ読み取った後、値をバイト型から文字列に変換します。


上記のコードを各々のマイコンにフラッシングして、動作を確認してみましょう。