Nano 33 BLE Senseをデータ入力に使う<BLE>④近接センサ<BLEセントラル>

 近接センサAPDS9960のBLEペリフェラルを受けるために、BLEのセントラルをmatlabで記述します。

準備

 APDS9960が接続するBLEペリフェラルは、前回と同じaddress(88A2EDC9F60C)を使って接続に行きます。

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

プログラム

 10回測定します。

 前回は、実数でデータが送られてきました。今回、RGBはそれぞれの値が整数で、三つの数値はカンマで区切っています。Proximityは整数です。

 RGBを読んだread(d11)時点のデータの中身はASCII文字でした。数値に直すためのchar()で変換します。たとえば、

49 48 44 49 56 44 50 48

は、

'9,15,16'

に変換されます。これで、ペリフェラルが送ったときの文字データになりました。次にカンマで分けまます。

split(RGBc,",")

 cell配列の、

'9'
'15'
'16'

になります。これを、要素ごと取り出します。1桁のときと複数桁の場合があるのに対応します。

R = data{1,:}
G = data{2,:}
B = data{3,:}


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

% APDS9960

ServiceUUID    = "F000AA40-0451-4000-B000-000000000000";
RGB_UUID       = "F000AA41-0451-4000-B000-000000000000";
Proximity_UUID = "F000AA42-0451-4000-B000-000000000000";

d11 = characteristic(b, ServiceUUID, RGB_UUID); % 配列
subscribe(d11);  % Notify
d12 = characteristic(b, ServiceUUID, Proximity_UUID);
subscribe(d12);

for i=1:10
    RGBc = char(read(d11));
    data = split(RGBc,",");
    R = data{1,:};
    G = data{2,:};
    B = data{3,:};
    Proximity = read(d12);
    fprintf('\nRGB is %s %s %s , Proximity is %d ', R,G,B, Proximity(1));
    pause(2)
end

unsubscribe(d11);
unsubscribe(d12);
clear b

 実行結果です。

前へ

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

次へ

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