Nano 33 BLE Senseをデータ入力に使う<BLE>⑧気圧センサ<BLEセントラル>
気圧センサ LPS22HBのBLEペリフェラルを受けるために、BLEのセントラルをmatlabで記述します。
●準備
LPS22HBが接続するBLEペリフェラルは、前回と同じaddress(88A2EDC9F60C)を使って接続に行きます。
clear
scan = blelist("Timeout", 30)
Nano33BLE_address="88A2EDC9F60C"; % scanで見つかったアドレスを代入
b = ble(Nano33BLE_address);
●プログラム
10回測定します。
実数でデータが送られてきます。hex2numS()ファンクションで、IEEE754のフォーマットで送られてくるデータを実数に戻します。
clear
scan = blelist("Timeout", 20);
Nano33BLE_address="88A2EDC9F60C"; % scanで見つかったアドレスを代入
b = ble(Nano33BLE_address);
% LPS22HB
ServiceUUID = "F000AB00-0451-4000-B000-000000000000";
LPS22HB_Press_UUID = "F000AB01-0451-4000-B000-000000000000";
f11 = characteristic(b, ServiceUUID, LPS22HB_Press_UUID); % 配列
subscribe(f11); % Notify
for i=1:10
Pressure = hex2numS(flip(read(f11))); % little endian->big endian
fprintf('\n Pressure is %.1fhPa ', Pressure);
pause(2)
end
unsubscribe(f11);
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
実行結果です。