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
実行結果です。