PLEN:bit:シリアル通信

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ケーブル繋がったまま動作させると、ちょっと苦しそうに見えてしまいますね。