Inkbird 温湿度計 ミニ Bluetooth 温度計 湿度計 温湿度センサー 交換式電池 温湿度レコーダー データロガー 温湿度記録 ( IBS-TH1 MINI )
が安価に入手できます。ここでは、BLEで温度と湿度を読み取ります。
まずは情報を見る
オン・セミコンダクターのBLEであるRSL10 Bluetooth Low Enaergy Exploerを使って情報を見ます。
スキャンすると見つけました。アドバタイジングしているデータから、アドレスとLocalNameがわかります。UUIDはF0FFだとも言っています。
Connectし、Discover Serviceをクリックして、Servicesタブを開きます。
UUIDがFFF0付近を見ます。Realtime dataとmeasureのデータが、温湿度のデータらしいですね。
接続、切る、接続、切る、接続するを繰り返した結果、Realtime dataは変化が見られます。1回目は、何もしていない状態、2回目は、本体を手で握ったとき、3回目は、その手を放して放置したときです。
Data:0x5709761B00B97A Data:0x5709891D008AEA Data:0xBE09981A008508
measureのデータは変化がないです。
0x10082C1E2EABD7C3000000000000000000000000 0x10082C1E2EABD7C3000000000000000000000000 0x10082C1E2EABD7C3000000000000000000000000
Realtime dataをじっくりと観察します。温湿度センサは、過去の経験から、握ると湿度はすぐに反応しますが、温度変化は緩やかです。変化していないのは09です。2バイト目と最初の1バイトを入れ替えて10進に直すと、室温に近い数字です。百で割ると、23.91、23.91、24.94とそれっぽいです。
だったら、次の3,4バイトが湿度であろうと想定すると、70.30%、75.61%、68.08%が湿度で、あたりのようですね。00の後の数値は推測ができませんでした。
いつもこのようにうまく類推できるわけではありません。毎回全然異なる数値が送られてくる時もあります。もしかしたら暗号化されているデータなのかもしれません。
プログラム
clear
scan = blelist("Timeout", 30);
Inkbird_address = "10082C1E2EAB";
Bot_ServiceUUID = "FFF0";
data_CharacteristicUUID = "FFF2";
for i=1:10
b = ble(Inkbird_address);
c10 = characteristic(b, Bot_ServiceUUID, data_CharacteristicUUID);
data = read(c10);
humi = (data(4)*256+data(3)) / 100.0;
temp = (data(2)*256+data(1)) / 100.0;
fprintf(' temperature is %.2fC Humi is %.1f%% \n', temp, humi);
clear b;
pause(10);
end