発信し、ゲートウェイ経由でAmbientに送って、記録し、グラフ化(可視化)します。micro:bitとゲートウェイをBLEブロードキャストモードで通信する方法を説明します。コネクトモードでの通信は「micro:bitで温度データーをAmbientに送りグラフにする(コネクトモード編)」をご覧ください。Energyを使うための開発環境の設定、Bluetooth機能ブロックの説明についても「micro:bitで温度データーをAmbientに送りグラフにする(コネクトモード編)」をご覧ください。WHをゲートウェイにしてBLEでデーターを受信し、Ambientに送って、グラフ化します。プロセッサー内蔵の温度センサーはプロセッサーの発熱の影響を受けます。その影響を避けるため、BME280を使って温度、湿度、気圧を測るバージョンも開発します。BLEデバイスの動作BLEデバイスの通信にはコネクトモードとブロードキャストモードがあります。Pi編)」をご覧ください。コネクトモードは双方向通信なので、ゲートウェイからセンサー端末のデーターを取得するだけでなく、センサー端末のモード設定をおこなうこともできます。センサー端末は常にゲートウェイからのコネクトを待つため、消費電力が多くなりがちです。ブロードキャストモードは一方向通信です。センサー端末からデーターを発信するには適した方式ですし、5分に1回、10秒間だけブロードキャストするといった間欠動作をおこなうことで消費電力を低く抑えることも可能です。ブロードキャストモードmicro:bitはEddystoneというフォーマットでデーターをブロードキャストします。EddystoneはGoogleが公開しているBLEビーコンの規格です。SpecificationEddystoneにはUID(ユニークID)、URL、TLM(テレメトリ)、EID(エフェメラル(一時的な)ID)という四つのフレームタイプが定義されています。micro:bitではこの内、UIDとURLが使えます。機能ブロックも「UIDをアドバタイズ」、「URLをアドバタイズ」が提供されています。URLタイプは文字通りURLをブロードキャストするものです。UIDタイプは10バイトのnamespaceと6バイトのinstanceからなるデーターが送れるので、UIDタイプを使って温度データーを送ります。UID」という資料を見ると、namespaceは最後の4バイト、instanceも最後の4バイトが使えるとあります。「UIDをアドバタイズ」という機能ブロックの「ネームスペース」「インスタンス」それぞれに4バイトのデーターが入れられます。‘i’に対応する「0x616d6269」を指定することにします。ブロックエディターには16進数が入れられないようなので、「0x616d6269」の10進数「1634558569」を入力します。インスタンスは2ビットのシーケンス番号と1バイトの温度データーを次のように入れることにしました。0xFFブロックエディターで次のように表しました。温度」ブロードキャストは一定時間(今回のプログラムでは5秒間)おこないます。同じデーターをゲートウェイが複数回スキャンした時に、同じデーターだと分かり、クラウドには1回だけ送信するように、データーにシーケンス番号を付加しています。micro:bitのプログラムは次のようになります。アドバタイジングデーターは次のようになります。Pi編)」で開発したものをベースにします。Data」で、値の最初の4文字がEddystoneを表す「aafe」のものがmicro:bitのアドバタイジングデーターです。最後の20文字(10バイト)が「000000000000616d6269」のものが今回開発しているセンサー端末です。値の32文字目の上位2ビットがシーケンス番号なので、それが前回見つけた値と異なっていれば新しいデーターです。値の38、39文字目が温度データーです。それを取り出してAmbientに送信します。ゲートウェイプログラムはGithubに公開しました。・AmbientDataInc/EnvSensorBleGw/src/gw_RPi/env2ambientBS.pyBME280で温度、湿度、気圧を測定し、Ambientに送る内蔵の温度センサーはプロセッサーの発熱の影響を受けます。そこで内蔵の温度センサーではなく、BME280をつないで温度、湿度、気圧を測定してAmbientに送るものも開発します。BME280の接続micro:bitにセンサーなどを接続するには、「micro:bit用エッジコネクタピッチ変換基板」を使うのが便利です。micro:bitのエッジコネクタのピンアサインはmicro:bitのMicroPythonの「入出力端子」に書かれています。BME280はI2CとSPIの両方でアクセスできます。今回は高速なアクセスは必要ないので、I2Cでアクセスします。micro:bitでデフォルトでI2C通信に使うピンはSCL=19ピン、SDI=20ピンです。BME280とは次のように接続します。温度、水分が測れるmicro:bitの拡張モジュールです。この製品の温度、湿度、気圧の測定にBME280が使われていて、micro:bitでアクセスするための機能ブロックが公開されいます。「拡張機能」を選択し、「weatherbit」で検索するとWeatherbitの機能ブロックが見つかります。これを選択すると、Weathrbitの機能ブロックが使えるようになります。BME280の温度、湿度、気圧はそれぞれtemperature(C)、humidity、pressureという変数ですが、実際の値は次のように求めます。25600Eddystoneフォーマットのアドバタイジングデーターを設計する温度、湿度、気圧をEddystoneのUIDフレームに載せます。温度は−50°Cから+50°Cまでを小数点1桁で表すことにします。温度データーを10倍して整数にして、10ビット(±512)を割り当てます。湿度は0%から100%までを小数点1桁で表すことにします。これも10倍して整数にして、10ビット(0〜1023)を割り当てます。気圧は400から1400hPaまでを整数で表し、10ビット割り当てます。C言語風に表現すると、次のような式になります。0x3FF)micro:bitのプログラムは次のようになります。ブロードキャストモードのゲートウェイプログラムmicro:bitのアドバタイジングデータを見つけるところまでは、内蔵センサーのプログラムと同じです。エンコードの逆の処理で温度、湿度、気圧データーを取り出し、Ambientに送信します。ゲートウェイプログラムはGithubに公開しました。測定し、ゲートウェイ経由でAmbientに温度データーが送信され、グラフ表示されます。