title | description | author | libraries | difficulty | tags | software | hardware | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Peripheral BLE su Finder Opta |
Imparare ad utilizzare Finder Opta come Peripheral BLE, creando una Characteristic che permetta ad un Central di cambiare lo stato dei LED del dispositivo. |
Fabrizio Trovato |
|
intermediate |
|
|
|
In questo tutorial, mostreremo come configurare Finder Opta per far si che agisca da Peripheral BLE, a cui un Central si possa connetterre per pilotare i LED del dispositivo. In particolare, andremo a configurare un Service contente una Characteristic in lettura e scrittura, da cui un Central possa scrivere o leggere dei valori esadecimali corrispondenti a diversi stati dei LED.
- Imparare a creare un Service ed una Characteristic BLE su Finder Opta.
- Imparare a leggere i dati scritti dai Central nelle Characteristic di Finder Opta.
- PLC Finder Opta (x1).
- Cavo USB-C® (x1).
- Arduino IDE 1.8.10+, Arduino IDE 2.0+ o Arduino Web Editor.
- Se si utilizza Arduino IDE offline, è necessario installare la libreria
ArduinoBLE
utilizzando il Library Manager dell'Arduino IDE. - Codice di esempio.
Grazie alla libreria ArduinoBLE
, Finder Opta può comportarsi come Peripheral
BLE e configurare Service con una o più Characteristic in modalità lettura e/o
scrittura. Sempre sfruttando questa libreria, il Finder Opta potrà fare
advertising e attendere la connessione di un Central con cui scambiare comandi.
Per seguire questo tutorial, sarà necessaria l'ultima versione dell'Arduino IDE. Se è la prima volta che configuri il Finder Opta, dai un'occhiata al tutorial Getting Started with Opta.
Assicurati di installare l'ultima versione delle librerie
ArduinoBLE
poiché verrà utilizzata per la comunicazione BLE con il Central.
Per ulteriori dettagli su come installare manualmente le librerie, consulta questo articolo.
Lo scopo del seguente esempio è configurare Finder Opta come Peripheral BLE, andando poi ad esporre una Characteristic in lettura e scrittura dentro cui un Central possa scrivere per accendere o spegnere i LED del Finder Opta. In particolare, configureremo un Service con una Characteristic ed avvieremo l'advertising, attendendo scritture del Central contenenti comandi esadecimali che pilotino i LED.
Nella parte iniziale dello sketch dichiaramo il Service e la Characteristic BLE con i relativi UUID. Inoltre, la Characteristic sarà configurata in modalità read/write:
BLEService ledService("b4bf4c90-a3eb-413f-9698-cfaaa9a428cc");
BLEByteCharacteristic ledCharacteristic("b4bf4c91-a3eb-413f-9698-cfaaa9a428cc", BLERead | BLEWrite);
Nella funzione di setup()
andremo a configurare il nome del device usato
durante l'advertising, ed in seguito ad abbinare Service e Characteristic,
settandone anche il valore iniziale; al termine di queste operazioni avvieremo
l'advertising. Il codice della funzione è mostrato di seguito:
void setup()
{
Serial.begin(9600);
// Init the BLE service.
if (BLE.begin() == 0)
{
while (1)
{
}
}
// Set local name and service UUID.
BLE.setLocalName("Finder Opta");
BLE.setAdvertisedService(ledService);
// Add service and characeristic.
ledService.addCharacteristic(ledCharacteristic);
BLE.addService(ledService);
// Set initial value.
ledCharacteristic.writeValue(0x00);
// Start advertising.
BLE.advertise();
}
La funzione loop()
di questo sketch rimane in ascolto in attesa di
connessioni da parte di Central, fino a quando non se ne connette uno: in caso
di connessione il Finder Opta controllerà se la ledCharacteristic
sia stata
scritta o meno, ed in caso affermativo leggerà il valore per pilotare i LED dal
numero 0 al numero 3. Il condice del loop principale è riportato di seguito:
void loop()
{
// Check if any central is available.
BLEDevice central = BLE.central();
if (central)
{
Serial.println("Central connected.");
while (central.connected())
{
// If central wrote to characeristic.
if (ledCharacteristic.written())
{
uint8_t state = ledCharacteristic.value();
digitalWrite(LED_D0, state & 0x01);
digitalWrite(LED_D1, (state & 0x02) >> 1);
digitalWrite(LED_D2, (state & 0x04) >> 2);
digitalWrite(LED_D3, (state & 0x08) >> 3);
}
}
Serial.println("Central disconnected.");
}
}
Si noti che lo stato del LED n-esimo dipenderà dal valore del bit n-esimo nel
comando scritto dal Central all'interno della ledCharacteristic
: se il bit
n vale 1 il LED n verrà acceso, se il bit n vale 0 il LED n verrà
spento. Nei commenti del codice è disponibile una tabella contenente la
mappatura tra codice esadecimale del comando e comportamento dei LED.
Una volta compilato e caricato lo sketch sul Finder Opta, è possibile utilizzare l'app nRF Connect per connettersi alla Peripheral BLE e scrivere un comando nella Characteristic. Al termine della scansione il Finder Opta comparirà tra i dispositivi disponibili:
Procediamo connettendoci e vedremo apparire un Service e una Characteristic con gli UUID assegnati dallo sketch:
A questo punto clicchiamo sull'icona con freccia che punta verso l'alto per effetuare una scrittura. Gli screenshot seguenti mostrano ad esempio come accendere il LED 0 e il LED 3:
Infine questo ultimo screenshot mostra come accendere tutti i LED del Finder Opta con un singolo comando:
Questo tutorial mostra come configurare Finder Opta da Peripheral BLE, per esporre una Characteristic in cui un Central possa scrivere un comando esadecimale per pilotare lo stato dei LED del dispositivo.