Nano 33 BLE Senseをデータ入力に使う<BLE>②温湿度センサ<BLEセントラル>

 温湿度のBLEペリフェラルを受けるために、BLEのセントラルをmatlabで記述します。ドキュメントは、次のページから始まります。

   Bluetooth Low Energy での通信

準備

 最初、BLEスキャンをして、アドバタイジングしているBLEペリフェラルを探します。

clear
scan = blelist("Timeout", 30)

 HTS221が接続するBLEペリフェラルです。address(88A2EDC9F60C)を使って接続に行きます。

 bbのCharacteristicsの情報は、前回作ったプログラムの内容なので、特に解析する必要はありません。

clear
scan = blelist("Timeout", 30)
Nano33BLE_address="88A2EDC9F60C"; % scanで見つかったアドレスを代入
b = ble(Nano33BLE_address);
bb = b.Characteristics

プログラム

 10回測定します。

 hex2numS()ファンクションは、IEEE754のフォーマットで送られてくるデータを実数に戻します。一度32ビットのビット文字列に直しています。そこから、符号、指数、仮数のビットを抜き出し、binary32のフォーマットのルールに従って計算しています。


clear
scan = blelist("Timeout", 20);
Nano33BLE_address="88A2EDC9F60C";  % scanで見つかったアドレスを代入
b = ble(Nano33BLE_address);
% bb = b.Characteristics

ServiceUUID =      "F000AA30-0451-4000-B000-000000000000";
Temperature_UUID = "F000AA31-0451-4000-B000-000000000000";
Humidity_UUID =    "F000AA32-0451-4000-B000-000000000000";

c11 = characteristic(b, ServiceUUID, Temperature_UUID); % 配列 4個の数値
subscribe(c11);  % Notify
c12 = characteristic(b, ServiceUUID, Humidity_UUID);
subscribe(c12);

for i=1:10
    Temperature = hex2numS(flip(read(c11))); % little endian->big endian
    Humidity = hex2numS(flip(read(c12)));
    fprintf('\nTemperature is %.2f`C Humidity is %.1f%%RH ', Temperature, Humidity);
    pause(2)
end

unsubscribe(c11);
unsubscribe(c12);
clear b

function  shortF = hex2numS(decimal4)  % IEE754の単精度浮動小数点数の形式:binary32
    dataBig = strcat(num2str(dec2bin( decimal4(1),8)),num2str(dec2bin( decimal4(2),8)) ...
                  ,num2str(dec2bin( decimal4(3),8)),num2str(dec2bin( decimal4(1),8)));
    sign = (-1)^str2num(dataBig(1));        % 符号
    exponentBit = dataBig(2:1:9);
    fractionBit = ("1" + dataBig(10:1:end));
    fraction = bin2dec(fractionBit)/(2^23) ;          % 仮数
    exponent = 2 ^ (bin2dec(exponentBit) -127) ;      % 指数

    shortF = sign * fraction * exponent;
end

 実行結果です。

前へ

Nano 33 BLE Senseをデータ入力に使う<BLE>①温湿度センサ<BLEペリフェラル>

次へ

Nano 33 BLE Senseをデータ入力に使う<BLE>③近接センサ<BLEペリフェラル>