温度センサーとBluetooh
マイクロビットには温度センサーがあります。ただし、この温度はCPUの温度で外気温ではありません。実際の外気温よりもかなり高くなります。値を調整することもできますが、ここでは補正せずにそのまま使うことにします。最初に単純な温度を表示するプログラムを作成したら、次にリモートで温度を計測するプログラムを作成します。
リモートでの計測方法ですが、マイクロビットはBluetooth (BLE)を使うことができますので、これを利用します。ちなみにシリアル通信もできるので、線を接続することで計測データをパソコンなどに保存しておくこともできます。
なお、ここではパソコンを使って開発しますが、スマートフォンの場合はブラウザの代わりにアプリを使って開発できます。
LEDに温度を表示する
最初に温度をLEDに表示するプログラムを作成します。開発のためのページを開きます。新規プロジェクトを作成して下さい。
・JavaScript用のブロックエディタ
https://makecode.microbit.org/
新規プロジェクトを作成すると図のような状態になります。
温度データは入力のカテゴリにあります。「入力」のカテゴリをクリックして表示される「温度」のブロックをクリックします。ブロックをクリックすると、ブロックが追加されます。ただし、温度ブロックは単体では使用できないためグレーで表示されます。
温度データを表示するにはLEDに数値として出力する必要があります。「基本」カテゴリにある「数を表示」ブロックを使えば数値をLEDに表示させることができます。ブロックを配置したら、図のように組み合わせていきます。
ブロックよりJavaScriptコードを書いた方が早い、という人はJavaScriptエディタに切り替えて以下のように入力しても構いません。
basic.forever(() => {
basic.showNumber(input.temperature())
})
ブロック(もしくはコード)ができあがったら「ダウンロード」ボタンをクリックします。HEXファイルができるのでマイクロビットに転送します(参照:第1回 マイクロビットを使ってみよう micro:bit編)。プログラムが正しく動作すれば写真のように温度がLEDに表示されます。
無線通信機能を追加する
無事に温度が表示されたら次は無線通信(Bluetooth)を使って離れた所にあるマイクロビットの温度を受信してみます。送信側と受信側にマイクロビットが必要なので最低2台必要になります。送信側1台で受信側が5台という組み合わせも可能です。
送信側マイクロビットプログラムの作成
まず、送信側のプログラムから作成します。無線通信の場合、通信するためのグループ番号を決める必要があります。ここでは1番としました。このグループ番号の設定は「無線」のカテゴリにある「無線のグループを設定」ブロックになります。このブロックを最初だけのブロックの中に入れます。これで準備完了です。
次に温度を無線で送信します。数値を送信するには「無線」のカテゴリにある「無線で数値を送信」ブロックを配置します。温度は定期的にずっと送信する必要があるので「ずっと」のブロック内に「無線で数値を送信」ブロックを入れます。
次に送信するデータが0になっているので、これを温度に変えます。「入力」のカテゴリから「温度」のブロックを配置します。「温度」のブロックを「無線で数値を送信」の右側にある「0」の部分に入れます。
このままでも温度は送信されますが、送信データを見ることができません。そこでLEDにも温度データを表示します。さきほど作成した温度データの表示プログラムと同じように作ります。
温度データは頻繁に送る必要はありません。ここでは5秒間隔で送信することにします。一定時間待つには「基本」のカテゴリにある「一時停止(ミリ秒)」ブロックを使います。図のようにブロックを配置します。
ブロックでなくJavaScriptコードの場合、以下のようになります。
radio.setGroup(1)
basic.forever(() => {
radio.sendNumber(input.temperature())
basic.showNumber(input.temperature())
basic.pause(5000)
})
さて、できあがったプログラムをマイクロビットに転送して動作を確認します。LEDに温度が表示されていれば、とりあえず動作はしています。受信側で正常に温度が受信できるまでは本当に動作しているかどうかは定かではありません。
受信側のマイクロビットのプログラムの作成
次に受信側のプログラムを作成します。受信側も送信側と同じグループ番号を設定します。なお、すでに他のマイクロビットが稼働しグループ番号が重複している場合はうまく動作しません。この場合、異なる番号を割り当ててください。
次に無線で温度データを潤したらLEDに温度を表示する部分を作成します。「無線」カテゴリから「無線で受信したとき receivedNumber」ブロックを配置します。
次に受信した温度をLEDに表示します。「基本」ブロックから「数を表示」ブロックを配置します。このブロックを「無線で受信したとき receivedNumber」ブロックの中に入れます。
あとは受信した温度データを「数を表示」ブロックに渡します。「変数」のカテゴリにある「receivedNumber」ブロックを配置します。このブロックを「数を表示」ブロックに入れ込みます。
これで受信側はできあがりです。JavaScriptプログラムで示すと以下のようになります。プログラマの場合、ブロックエディタを使うよりもJavaScriptエディタで入力した方が早いかもしれません。
radio.onDataPacketReceived( ({ receivedNumber }) => {
basic.showNumber(receivedNumber)
})
radio.setGroup(1)
basic.forever(() => {
})
あとは、受信側のマイクロビットにプログラムを転送します。温度を受信できればLEDに値が表示されます。
無線通信はBluetooth (BLE) なので、あまり遠くまで電波は届きませんが、離れたところの情報を手軽に送信できるのは便利でしょう。
著者 古籏一浩
プログラミングをベースにして面白そうなものはとりあえずやってみるというスタンス。複雑なものよりシンプルで楽しめるものが好み。
著者サイト:http://www.openspc2.org/