micro:bitで温度を測定して、無線で計測データを受信側micro:bitで受け取る。
前回の続き。
→ micro:bitでUARTと無線通信をブリッジし、シリアル通信を無線化するのを試してみた
温度を計測して、無線で送信するプログラムを書いてみた。
import radio from microbit import display, Image, sleep, temperature display.show(Image.HAPPY) radio.on() while True: s="t = "+str(temperature())+"\r\n" radio.send_bytes(s) sleep(5000)
5秒ごとに温度の計測値を無線で送信する。
受信側は前回のプログラムを使って、無線の受信データをUSB-UARTポートに送信するようにして、受信データをPCのTeraTermで受け取ってみた。
ただし、micro:bitの温度センサーは気温の測定をしているのではなく、CPUの温度の計測値なので実際の気温よりもちょっと高めの値が出ている。
気温をちゃんと測るならば、I2Cバスに気温用の温度センサーを取り付けて測定するのがよいだろう。
無線はBLE(Bluetooth Low Energy)ではなく、Nodric Semiconductorの独自の方式の無線を使っている。
今回は、送信側1台と受信側1台でテストをしているのだが、同時に2カ所とかそれ以上の場所の気温を測定して、無線で受け取るというのも原理的には可能だ。
BLEでは1対多数の通信をするものを作るのは難しいが、Nodric Semiconductorの独自の方式の無線ならこのソフトのままで複数が通信できる。
送信側にID番号を付けて、測定値と一緒に送る必要がある。送信のタイミングがぶつかるとパケットは受信できないので、受信側からID番号を付けて計測のリクエストを出して応答を返して貰うようにするのがよいだろう。
micro:bitを追加でもう1個買ったら、送信側2台と受信側1台というのを試してみる予定だ。
はじめまして。
micro:bitを利用するにあたり、この記事にたどり着きました。
同様のデータロギングを行うと、途中でTeraTermが停止するのですが、筆者様はそのようなケースに遭われたことはないでしょうか?
色々試したところ、micro:bitからのデータ送信が止まってると推測しているのですが、原因がイマイチ分からず困っています。
お手透きの時に返事をいただけるとありがたいです。
よろしくお願いいたします。
返事コメントを書くのが遅くなりました。
micro:bitの送信側でウェイト時間をゼロにして連続で送信をすると、受信側のmicro:bitで受信時にエラーを起こして止まってしまうということはありました。
sleep()を使って送信後にウェイト処理を入れることで自分は対策をしました。
これと同じ現象なのかどうかは分かりませんが、ご参考まで。