Web Serial APIとマイクロビットでキーボードで演奏をしてみよう


パソコン側のブラウザのWeb Serial APIとマイクロビットを使って、マイクロビットをスピーカーにしてキーボードで演奏をしてみよう。


キーボードと音の対応は下記の通りにします。

a:ド

s:レ

d:ミ

f:ファ

g:ソ

h:ラ

j:シ

k:高いド


Web Serial APIでマイクロビットを動かしてみようではパソコン側のシリアル通信のターミナルを



https://googlechromelabs.github.io/serial-terminal/にしていますが、これだと分かり難い為、



動作確認用で作成したキーボードセンダーというWebアプリを利用します。

https://saito-programming.github.io/serial/sender.html


キーボードセンダーとChromeのシリアルターミナルの違いは、キーボードセンダーがマイクロビットに文字を送信する時は1文字のみで、文字の末尾に改行コード(\r\n)が付与されています。


この内容を踏まえた上で、コードを作成します。



※ 真ん中のミより後のコードは省略します。


キーボードセンダーから送信される値の末尾に必ず改行コードが含まれているという規則によって、シリアル通信 つぎのいずれかの文字を受信したときブロックが使えるようになり、可読性の高いコードを書き易くなっています。




今回のコードをMicroPythonで書き換えてみます。

from microbit import *
import music

# UART(シリアル通信)の初期化
uart.init(baudrate=115200)

while True:	
	# Chromeからシリアル通信経由でデータを受信した
	if uart.any():
		# 下記のコードで自動で末尾の改行コードを外してくれる
		data = uart.read(1)
		
		if data:
			# バイト型のデータを文字列にデコードする
			char = data.decode("UTF-8")
			
			# ド
			if char == "a":
				music.play(["C4:4"])
			# レ
			elif char == "s":
				music.play(["D4:4"])
			# ミ
			elif char == "d":
				music.play(["E4:4"])
			# ファ
			elif char == "f":
				music.play(["F4:4"])
			# ソ
			elif char == "g":
				music.play(["G4:4"])
			# ラ
			elif char == "h":
				music.play(["A4:4"])
			# シ
			elif char == "j":
				music.play(["B4:4"])
			# 高いド
			elif char == "k":
				music.play(["C5:4"])
京都の東本願寺で開催されているプログラミング教室で講師をしています。
詳しくはTera schoolを御覧ください。
同じカテゴリーの記事
マインクラフト用ビジュアルエディタを開発しています。

詳しくはinunosinsi/mcws_blockly - githubをご覧ください。