micro:bit のシリアル通信って、下側の端子を使ってしかできないと思いこんでたんですよ。そんなことなかった。USB接続で、PCとシリアル通信できました!
シリアル通信用のブロック。
送信/受信の通信ポートの切り替えが可能です。指定なしだと、USBになってるっぽいですね。
「シリアル通信USBにリダイレクト」のブロックが気になるのですが、特に使わなくてもUSBで送受信できました。
micro:bit 側から送信するには、こんな感じ。
PC側のCOMポート番号を調べて、PuTTYなどのシリアルターミナルで接続します。
表示できましたー。文字コードいろいろ試してみたのですが、文字列の日本語表示はできませんでした。
ブラウザ上でも、シリアル出力を確認することが可能です。
ブラウザ上での表示だと、左側に表示してあるシミュレータからの出力も確認することが可能です。
実機からの出力確認は、あんまり安定してないみたいです。出力されない場合もありました。(現象の発生タイミングはよくわからないです)
シリアルターミナルからのキー入力を読み取ることも可能です。数値を入力して、該当するモーションを再生するプログラムを作ってみました。
JavaScript版はこちら。
let bufferString = "" let inputString = "" serial.writeLine("Start!") basic.forever(function () { inputString = serial.readString() if (inputString.compare(":") == 0) { serial.writeLine("") plenbit.eyeLed(plenbit.LedOnOff.On) serial.writeLine("Motion : " + parseFloat(bufferString)) plenbit.motion(parseFloat(bufferString)) bufferString = "" basic.showString(bufferString) plenbit.servoInitialSet() plenbit.eyeLed(plenbit.LedOnOff.Off) } else if (inputString != "") { if (bufferString.length >= 2) { bufferString = "" serial.writeLine("") } bufferString = "" + bufferString + inputString basic.showString(bufferString) serial.writeString(inputString) } })
数値を入れて “:” を入力すると、その番号のモーションを実行します。”:” にした理由は、改行をうまく取得できる方法がわからなかったから…です。
これで、PCから PLEN:bit を操作可能です!…が、シリアル通信で結構タイムラグが出るので、ラジコンのように操作するのは難しそうでした。
USBケーブル繋がったまま動作させると、ちょっと苦しそうに見えてしまいますね。