クリエイター手抜きプロジェクト[637]IoT Orange pico編 マイクロビットとシリアル通信
── 古籏一浩 ──

投稿:  著者:



今回は、Orange pico(Orangino)とマイクロビット(新旧どちらでもOK)を接続して、シリアル通信を使ってやりとりしてみます。が、その前にまずはパソコンとやりとりして、命令の動作を確認することにします。

Orange BASICでは、以下のように設定すると、画面とシリアル通信にデータが出力されます。

uart 1,3,115200

プログラム側でも、print命令だけで出力できるので便利です。ところが、場合によっては、画面に出力したくないこともあります。このようなときは、シリアルに出力するためのuartput命令が用意されています。





uartputの最初のパラメータは1で固定です。これはシリアル通信ポートの、チャンネル番号です。Oranginoは1つしかないので、チャンネル番号1を指定します。2番目のパラメーターは出力する文字列です。

以下のプログラムは、入力されたキーをシリアル通信で出力します。実行すると、ターミナルソフト側だけに入力された文字が出力されます。

10 uart 1,0,115200
20 k=inkey()
30 if k=0 then goto 20
40 uartput 1,chr$(k)
50 goto 20

シリアルからデータを入力する場合は、uartget()を使います。パラメーターにはチャンネル番号を指定しますが、Oranginoでは1つしかチャンネルがないのでuartget(1)とします。

シリアル通信からの入力がない場合、uartget()は-1を返します。以下のプログラムを実行すると、シリアルから入力された文字を画面に表示します。

10 uart 1,0,115200
20 k=uartget(1)
30 if k=-1 then goto 20
40 print chr$(k);
50 goto 20

なお、改行が反映されない場合は、以下のように、改行コードである13だったらprintとして改行するようにします。

10 uart 1,0,115200
20 k=uartget(1)
30 if k=-1 then goto 20
40 if k=13 then print
50 print chr$(k);
60 goto 20

シリアルからのデータが入力可能になったので、今度はマイクロビットからのデータを入力してみましょう。

まず、マイクロビット側でプログラムを作成します。マイクロビットにもシリアル通信ブロックがありますので、これを使います(高度なブロックの項目をクリックすると出てきます)。

とりあえず部屋の明るさを取得して、シリアル通信でOranginoにデータを送ってみましょう。

最初にシリアル通信の設定を行います。送信端子をP0に、受信端子をP1にします。なお、今回は送信端子しか使わないので、受信端子はP1でもP2でも構いません。通信速度は115200にします。このシリアル通信ブロックは、最初だけのブロック内にはめこみます。

次に、明るさのデータを送ります。「シリアル通信 文字列を書き出す」ブロックを使います。書き出す文字列のところに「明るさ」のブロックをはめこみます。このままだと、かなり高速にデータが送られるので、少し待ち時間を入れます。なお、高速にデータを受信したのであれば、待ち時間を入れる必要はありません。

マイクロビットのJavaScriptコードでは、以下のようになります。コードエディタにペーストしてから、ブロックエディタに切り替えると分かりやすいでしょう。

serial.redirect(
SerialPin.P0,
SerialPin.P1,
BaudRate.BaudRate115200
)
basic.forever(function () {
serial.writeString("" + input.lightLevel())
basic.pause(1000)
})

次に、Orangino側のBASICプログラムですが、こちら側は少し工夫する必要があります。というのも、マイクロビット側では明るさが65の場合、文字列として6と5が送信されるためです。

つまり、最初にデータが送られてくるのを待ち、データが送られてきたらデータがある限り受信する必要があります。

このような場合、以下のようなプログラムになります。データの受信が一旦完了したら、改行するようにしてあります。

10 uart 1,0,115200
20 k=uartget(1)
30 if k=-1 then goto 20
40 while k<>-1
50 print chr$(k);
60 k=uartget(1)
70 wend
80 print
90 goto 20

マイクロビットには多数のセンサーがあるので、これらの値をOranginoで読み込んで、グラフ表示するといったことが可能になるわけです。新しいマイクロビットなら標準でマイク入力もできるので、音量データを取り込んでOrangino側で表示してみるのもよいかもしれません。

Oranginoはマイクロビットよりも高機能ですから、工夫次第でいろいろできるはずです。冬休み・年末年始などに挑戦してみてはいかがでしょうか。


【古籏一浩】
openspc@alpha.ocn.ne.jp
http://www.openspc2.org/


先月、新しいマイクロビットが発売されました。これまではスピーカーは別途接続する必要がありましたが、本体だけで音が出せるようになりました。マイクも標準装備です。また、本体のメモリ容量が倍になっているので、これまでメモリの制約でできなかった複雑な処理ができそうです。連載でも取り上げているのでご覧下さい。
https://news.mynavi.jp/article/makeprogram-45/