Imboccate la corsia preferenziale verso la connettività di rete a maglie Bluetooth 5
Contributo di Editori nordamericani di DigiKey
2018-04-18
Le capacità di connettività di rete a maglie per Bluetooth 5 consentono agli sviluppatori di ampliare la disponibilità di rete e la portata dei sistemi con connessioni wireless, come i dispositivi IoT. Tuttavia, tra la progettazione dell'hardware wireless a bassa potenza e lo sviluppo del software per la connettività di rete a maglie, quest'ultima comprende livelli di complessità tali da intrappolare rapidamente gli sviluppatori, mettendo a repentaglio la pianificazione dei progetti.
Con la progressiva comparsa di smartphone e altre piattaforme mobili predisposti per Bluetooth 5, il tempo diventerà un fattore critico, poiché gli sviluppatori dovranno rispondere rapidamente all'esplosione prevista della domanda di capacità di connettività di rete a maglie Bluetooth in quasi tutti i segmenti e le applicazioni industriali. I fornitori di hardware e software stanno pertanto introducendo soluzioni volte a semplificare e accelerare il processo di sviluppo.
Questo articolo illustra a grandi linee le motivazioni alla base della connettività di rete a maglie Bluetooth, quindi descrive le fasi del processo di sviluppo utilizzando uno dispositivo specifico tratto dalla linea di moduli Bluetooth 5 di Silicon Labs con predisposizione per rete a maglie. Una soluzione integrata Bluetooth 5 di questo genere consente agli sviluppatori di implementare rapidamente dispositivi e applicazioni connessi, in grado di sfruttare appieno la connettività di rete a maglie Bluetooth.
L'articolo si conclude con una descrizione del pacchetto di sviluppo software per reti a maglie Bluetooth di Silicon Labs, ivi compreso un esame dettagliato della dimostrazione di un modello basato sugli eventi realizzata utilizzando il codice esemplificativo di un'applicazione per rete a maglie.
La necessità della rete a maglie Bluetooth
La rete a maglie Bluetooth va oltre le capacità di connessione punto-punto della tecnologia Bluetooth tradizionale. Grazie al trasferimento dei messaggi tramite dispositivi vicini connessi, la rete a maglie Bluetooth estende la portata effettiva dei dispositivi a basso consumo al di là di quella consentita dalla potenza di uscita dei loro trasmettitori e dalla sensibilità dei loro ricevitori. Un aspetto della massima importanza consiste inoltre nel fatto che la rete a maglie Bluetooth sfrutta la diffusa familiarità con le app dotate di predisposizione Bluetooth su smartphone e altri dispositivi mobili, offrendo un percorso evolutivo naturale verso applicazioni connesse più sofisticate su rete a maglie.
Grazie al supporto delle reti a maglie, gli sviluppatori che utilizzano la tecnologia Bluetooth dispongono ora di uno strumento potente per connettere grandi schiere di dispositivi per la domotica, la gestione degli edifici e di qualunque numero di applicazioni IoT.
Modalità di funzionamento di una rete a maglie Bluetooth
Una rete a maglie Bluetooth utilizza un modello concettualmente semplice di interazione fra i nodi di una rete (Figura 1). Nodi di tipi specializzati forniscono le ulteriori capacità necessarie per trasferire i messaggi fra i nodi, estendendo la portata effettiva di una rete che interagisce tramite un nodo proxy con un dispositivo mobile dotato di predisposizione Bluetooth.
Figura 1: Oltre ai nodi periferici di base, una rete a maglie Bluetooth è in grado di utilizzare tipi di nodi speciali (relè) per inoltrare messaggi ad altri nodi, per fungere da cache (nodi amici) per nodi a basso consumo o per collegare (nodi proxy) la rete a un dispositivo mobile con predisposizione Bluetooth. (Immagine per gentile concessione di Silicon Labs)
Altri tipi di nodi specializzati affrontano i requisiti di potenza ridotta, utilizzando nodi amici per memorizzare in cache messaggi che i nodi a basso consumo interrogano periodicamente fra stati di sospensione prolungati. Malgrado tali funzionalità aggiuntive, i dispositivi per rete a maglie Bluetooth sono comunque in grado di utilizzare i servizi Generic Attribute Profile (GATT) per collegarsi con dispositivi legacy che utilizzano versioni precedenti di Bluetooth. I dispositivi per rete a maglie sono pertanto in grado di sfruttare appieno le capacità Bluetooth Low Energy (BLE) esistenti, come i beacon per generare messaggi specifici destinati agli smartphone di una determinata area o per comunicare la propria identità alle applicazioni di gestione delle risorse.
La rete a maglie Bluetooth affronta inoltre le crescenti preoccupazioni per la protezione delle reti sicure necessarie nell'automazione degli edifici o in altre applicazioni IoT. A differenza di BLE, in cui la protezione è opzionale e interessa un singolo dispositivo, Bluetooth Mesh impone la protezione nel tentativo di difendere la rete a maglie nel suo complesso.
L'approccio Bluetooth alla protezione di una rete a maglie è particolarmente interessante. Il suo schema di protezione introduce il concetto di separazione delle preoccupazioni per la connettività di rete a maglie, utilizzando a tale scopo misure di protezione separate per ciascun dispositivo, per la rete e per l'applicazione nel suo complesso. Una chiave privata (DevKey) associata a ciascun dispositivo assicura la protezione di operazioni quali configurazione e provisioning, che coinvolgono soltanto il nodo interessato. Per comunicare con altri nodi di una rete o di una sottorete, ogni dispositivo necessita di una chiave di rete (NetKey). Le interazioni a livello di applicazione, come l'invio di un messaggio per accendere una luce, richiedono infine una chiave di applicazione (AppKey). Altre misure di protezione offrono una salvaguardia contro minacce comuni quali gli attacchi man-in-the-middle o del tipo riproduzione. La combinazione dei meccanismi di protezione disponibili in una rete a maglie Bluetooth fornisce una base di fiducia essenziale, necessaria per applicazioni IoT più sofisticate.
L'implementazione di un'applicazione collegata a una rete a maglie Bluetooth presenta tuttavia notevoli difficoltà per gli sviluppatori. La maggior parte delle applicazioni che utilizzano una connettività di rete a maglie si basa su dispositivi con un limite di potenza, che si affidano alla stessa rete a maglie per estendere la portata effettiva dei sottosistemi radio a basso consumo. Le sfide poste dalla creazione di idonei dispositivi hardware a basso consumo predisposti per una rete a maglie possono bloccare anche gli sviluppatori di hardware più esperti. Anche dopo avere portato a termine i propri progetti Bluetooth personalizzati, gli sviluppatori possono trovarsi ad affrontare costi considerevoli e ritardi prolungati nel soddisfare i requisiti nazionali di certificazione. Gli sviluppatori software subiscono a loro volta ritardi nell'individuare stack di rete a maglie Bluetooth compatibili e nell'utilizzarli per realizzare layer software in grado di supportare le loro applicazioni. L'hardware e il software Bluetooth di Silicon Laboratories consentono tuttavia agli sviluppatori di implementare rapidamente funzionalità di rete a maglie Bluetooth in dispositivi a basso consumo per le loro applicazioni.
Modulo Bluetooth
La soluzione con rete a maglie Bluetooth di Silicon Labs si basa sul modulo hardware Bluetooth a bassa potenza BGM13P dell'azienda, che combina un processore wireless e uno stack di rete a maglie Bluetooth completo per fornire un sistema Bluetooth completo e certificato in un contenitore da 12,9 × 15,0 × 2,2 mm. Il cuore del modulo è costituito da un System-on-Chip (SoC) wireless Blue Gecko EFR32BG13 che fornisce le funzionalità essenziali. Il SoC EFR32BG13 riunisce un core Arm® Cortex®-M4 a 32 bit, un sottosistema radio a 2,4 GHz, 512 kB di memoria flash, 64 kB di RAM e un'ampia dotazione di periferiche analogiche e digitali. Oltre a un acceleratore crittografico hardware su chip, il SoC supporta la crescente richiesta di maggiore protezione con un'unità di gestione della stessa che fornisce lo stesso tipo di controllo granulare dell'accesso alle periferiche che l'unità di protezione della memoria assicura a quest'ultima.
Il SoC EFR32BG13 è in grado di fungere da base per progetti hardware Bluetooth personalizzati. Nell'utilizzare il SoC, gli sviluppatori si assumono la responsabilità non soltanto dei requisiti di progettazione, come la circuiteria di supporto del SoC, ma anche della certificazione richiesta del progetto completo. Il modulo fornisce un progetto interamente certificato, che include il SoC EFR32BG13 con i circuiti di supporto necessari, fra cui varie sorgenti di oscillatori, due cristalli e i driver delle porte. Questo fornisce anche allo stesso tempo una serie di funzioni di risparmio energetico che consentono agli sviluppatori di rispondere alla costante richiesta di dispositivi con minori consumi.
Il consumo del modulo è pari a soli 87 µA/MHz nella modalità attiva e a 1,4 μA nella modalità di sospensione profonda con mantenimento dell'intera RAM. Per contribuire a massimizzare il tempo trascorso nella modalità di sospensione profonda a basso consumo, i tecnici possono sfruttare caratteristiche quali, fra le altre, un'interfaccia sensore e un timer a basso consumo energetico. L'interfaccia sensore a basso consumo energetico consente ai tecnici di programmare la macchina a stati finiti e le periferiche analogiche integrate nel modulo in modo che acquisiscano ed elaborino i segnali dei sensori mentre il processore rimane nella modalità di sospensione profonda. Analogamente, il timer a basso consumo energetico consente ai tecnici di inviare in uscita forme d'onda semplici e di monitorare il contatore/clock in tempo reale per compiere azioni a intervalli stabiliti, senza coinvolgere il processore.
In generale, il consumo energetico dei dispositivi wireless dipende ovviamente dall'efficienza del sottosistema radio. In questo caso, il sottosistema radio a 2,4 GHz del modulo assorbe soltanto 9,9 mA nella modalità di ricezione e 8,5 mA nel modo di trasmissione a una potenza in uscita di 0 dBm. Ciò nonostante, il modulo fornisce un'ulteriore funzione di risparmio energetico tramite il controllo RF. Gli sviluppatori possono programmare una funzione di rilevamento RF del modulo che risveglia il processore quando viene rilevata la presenza di energia RF a banda larga. Tale approccio consente agli sviluppatori di mantenere il modulo in sospensione profonda nei periodi di inattività, senza perdite di comunicazioni. Come osservato in precedenza, tuttavia, gli sviluppatori possono anche configurare un dispositivo in modo che funga da nodo Bluetooth 5 a basso consumo che si limita a risvegliarsi periodicamente dalla sospensione profonda per interrogare un nodo amico per verificare la presenza di messaggi in cache.
Sviluppo del sistema
Malgrado tutte le sue funzioni, il modulo presenta poche difficoltà a livello di implementazione. Gli sviluppatori possono semplicemente inserire un modulo in un progetto con un processore esistente e utilizzarlo come coprocessore di rete Bluetooth (Figura 2A). In alternativa, gli sviluppatori possono utilizzare il modulo come una soluzione di sistema completa (Figura 2B). In questo modo autonomo, gli sviluppatori possono eseguire il codice della loro applicazione sul processore EFR32BG13 del modulo e utilizzare le periferiche analogiche e digitali integrate del processore EFR32BG13 per l'acquisizione dei segnali in un progetto IoT semplice.
Figura 2: I progettisti possono utilizzare il modulo BGM13P come coprocessore Bluetooth per una CPU host (A), oppure utilizzarlo da solo (B), sfruttando il SoC EFR32BG13 integrato del modulo per l'esecuzione dei programmi dell'applicazione, nonché per l'acquisizione dei dati dei sensori. (Immagine per gentile concessione di Silicon Labs)
Gli sviluppatori possono semplificare ulteriormente il proprio progetto Bluetooth utilizzando il modello BGM13P22F512GA-V2, una versione del modulo che include un'antenna integrata. Per i progetti destinati ad ambienti RF più impegnativi, gli sviluppatori possono ricorrere al modello BGM13P22F512GE-V2, una versione dotata di un connettore U.FL per il collegamento di un'antenna patch piatta compatibile con Bluetooth, come il modello FXP74.07.0100A di Taoglas.
Con il suo kit di sviluppo SLWSTK6101C, Silicon Labs elimina anche tale livello di implementazione hardware. Il kit SLWSTK6101C è progettato per funzionare con schede a innesto per i suoi vari dispositivi Bluetooth, e fornisce un progetto IoT rappresentativo che include una memoria flash MX25R8035F da 8 Mb di Macronix, un LCD LS013B7DH03 128x128 di Sharp Microelectronics e un sensore di umidità e temperatura Si7021 di Silicon Labs. In questo caso gli sviluppatori innestano la scheda radio wireless SLWRB4306A, che include il modulo BGM13P, nella scheda SLWSTK6101C.
Oltre a essere un progetto pronto per la produzione, la serie di schede completata fornisce un progetto di riferimento collaudato che i tecnici possono utilizzare per esaminare approcci differenti per l'interfacciamento di dispositivi quali la memoria flash, l'LCD e il sensore.
Mentre la memoria flash da 8 Mb e l'LCD si collegano al modulo tramite il suo bus SPI, l'interfaccia I2C del sensore Si7021 condivide ad esempio il bus con una basetta esterna situata sulla scheda di sviluppo. Silicon Labs fornisce una dimostrazione di un metodo per la progettazione di un'interfaccia semplice che mantiene il sensore normalmente disabilitato e isolato elettricamente dal bus condiviso. Quando l'ingresso PD15 del modulo passa allo stato alto, l'uscita SENSOR_ENABLE si porta anch'essa nello stato alto, collegando il sensore al rail di alimentazione VMCU a 3,3 V e al bus I2C (Figura 3).
Figura 3: Oltre a fornire una piattaforma di valutazione hardware, il kit di sviluppo Silicon Labs SLWSTK6101C funge da progetto di riferimento, fornendo un'illustrazione dei metodi di interfacciamento con un dispositivo esterno quale il sensore Si7021 di Silicon Labs mostrato qui. (Immagine per gentile concessione di Silicon Labs)
La basetta del bus I2C condiviso è solo una delle varie caratteristiche studiate per supportare lo sviluppo con questa piattaforma (Figura 4). Oltre a un debugger J-Link su scheda, quest'ultima fornisce un'interfaccia di tracciamento pacchetti (PTI) che consente ai tecnici di analizzare in dettaglio i pacchetti. L'interfaccia PTI si basa su un'unità di tracciamento dei pacchetti e degli stati integrata nel SoC EFR32BG13 per fornire un'acquisizione non intrusiva di tutti i pacchetti inviati e ricevuti dal sistema. Per l'analisi di protocolli complessi come rete a maglie Bluetooth, questa funzione di tracciabilità dei pacchetti fornisce uno strumento che può risultare essenziale per l'ottimizzazione e la regolazione delle comunicazioni di rete a basso livello.
Figura 4: Il kit SLWSTK6101C di Silicon Labs mette a disposizione varie interfacce per il tracciamento dei pacchetti, il monitoraggio dell'energia e il tracciamento a basso livello Embedded Trace Macrocell (ETM) Arm, fornendo ai tecnici un ricco corredo di strumenti per l'analisi approfondita del funzionamento e delle prestazioni dei progetti. (Immagine per gentile concessione di Silicon Labs)
Mentre agli esperti di reti occorrono funzioni di ottimizzazione delle reti, come l'interfaccia PTI, agli sviluppatori di sistemi servono strumenti in grado di aiutarli a identificare le inefficienze delle applicazioni che possono dare origine a un consumo energetico eccessivo. Per questo tipo di ottimizzazione della potenza a livello di applicazione, lo strumento di profilazione dell'energia Simplicity Studio di Silicon Labs fornisce un'analisi del consumo energetico a livello di core.
Come nel caso di quello di tracciamento dei pacchetti, lo strumento di profilazione energetica sfrutta l'hardware sottostante. In questo caso la scheda include un circuito dedicato al monitoraggio dell'energia che comprende un sensore di corrente a resistore, un amplificatore del rilevamento di corrente e alcuni stadi di guadagno che inviano la propria uscita al controller della scheda per l'accesso da parte di un sistema host di sviluppo (Figura 5). Gli stadi di guadagno paralleli consentono al monitor dell'energia di misurare correnti da 0,1 μA a 95 mA con due livelli di risoluzione distinti, vale a dire 0,1 mA al di sopra di 250 μA e 1 μA al di sotto di tale soglia.
Figura 5: Un circuito dedicato al monitoraggio dell'energia e un controller di elaborazione integrati nel modulo Bluetooth BGM13P sono in grado di assicurare misurazioni della corrente non invasive da 0,1 μA a 95 mA. (Immagine per gentile concessione di Silicon Labs)
Mentre il circuito di monitoraggio dell'energia genera misurazioni della corrente, i meccanismi di tracciatura a basso livello integrati nel SoC EFR32BG13 sono in grado di campionare periodicamente il contatore di programma del processore e di inviare i risultati sul pin del filo dell'uscita seriale del dispositivo. Combinando i risultati del monitor dell'energia con tale uscita di tracciamento dei programmi, lo strumento di profilazione dell'energia è in grado di visualizzare in tempo reale il consumo energetico associato al codice in esecuzione sul dispositivo (Figura 6).
Figura 6: Lo strumento di profilazione dell'energia Simplicity Studio combina l'uscita del monitor dell'energia con i dati di tracciamento dei programmi per visualizzare in tempo reale il consumo di corrente associato al codice effettivo. (Immagine per gentile concessione di Silicon Labs)
Sviluppo delle applicazioni con rete a maglie
Mentre i tecnici hardware possono utilizzare il kit di sviluppo per ottimizzare i loro progetti hardware, gli sviluppatori software possono sfruttare l'ambiente di sviluppo software completo di Silicon Labs per creare rapidamente applicazioni con rete a maglie. Simplicity Studio, lo stack di rete a maglie Bluetooth 5 di Silicon Labs, estende lo stack Bluetooth di base con risorse specifiche per le reti a maglie. Gli sviluppatori possono pertanto passare da protocolli Bluetooth più tradizionali, come quelli per comunicazioni beacon o punto-punto, alle topologie con rete a maglie completa (Figura 7).
Figura 7: Lo stack di rete a maglie Bluetooth di Silicon Labs estende le precedenti funzionalità Bluetooth (blu) con livelli di rete a maglie (verdi), consentendo agli sviluppatori di sfruttare la gamma completa delle funzioni Bluetooth, dalle configurazioni beacon a quelle con rete a maglie completa. (Immagine per gentile concessione di Silicon Labs)
In combinazione con le schede di sviluppo SLWRB4306A e SLWSTK6101C, basate sul modulo BGM13P di Silicon Labs, Simplicity Studio consente agli sviluppatori di configurare il loro ambiente con i kit di sviluppo software (SDK) appropriati. Per lo sviluppo Bluetooth, Simplicity Studio fornisce il kit SDK per rete a maglie Bluetooth di Silicon Labs, unitamente a codici sorgente e binari dimostrativi preconfezionati. All'interno di tale ambiente, gli sviluppatori possono lavorare con un codice esemplificativo che implementa un'applicazione completa con rete a maglie Bluetooth.
Le applicazioni esemplificative sono studiate per fornire una dimostrazione delle operazioni che avvengono in una rete a maglie Bluetooth; esse utilizzano la scheda di sviluppo e una app mobile per guidare lo sviluppatore lungo le operazioni tipiche di una rete a maglie, fra cui provisioning, configurazione e uso associato all'applicazione. Per implementare un'applicazione esemplificativa, i tecnici eseguono Simplicity Studio a fronte di una serie di schede di sviluppo configurate separatamente per fungere da luce o da interruttore in un'applicazione di illuminazione connessa. Lavorando con l'hardware e il codice esemplificativo, i tecnici possono acquisire una migliore comprensione di ciascuna fase operativa di una tipica applicazione con rete a maglie, iniziando dall'accensione dei dispositivi.
Con l'architettura software di Silicon Labs, le operazioni Bluetooth procedono come una serie di eventi, utilizzando ID di evento predefiniti che segnalano la natura dell'evento. Nel contenitore software esemplificativo, la routine principale main(), eseguita all'accensione o al ripristino, richiama semplicemente una serie di routine di inizializzazione, quindi entra nel suo loop principale, formato in questo caso da sue sole righe di codice (Listato 1).
Copy int main() { #ifdef FEATURE_SPI_FLASH /* Metti flash SPI nel modo di spegnimento profondo per le schede radio in cui è disponibile */ MX25_init(); MX25_DP(); /* Si deve disabilitare la comunicazione SPI */ USART_Reset(USART1); #endif /* FEATURE_SPI_FLASH */ enter_DefaultMode_from_RESET(); #if (EMBER_AF_BOARD_TYPE == BRD4304A) LNA_init(); #endif gecko_init(&config); #ifdef FEATURE_PTI_SUPPORT APP_ConfigEnablePti(); #endif // FEATURE_PTI_SUPPORT RETARGET_SerialInit(); /* inizializza LED e pulsanti. Nota: alcune schede radio condividono lo stesso GPIO per pulsante e LED.
* L'inizializzazione avviene in questo ordine, in modo che la configurazione predefinita sia il pulsante per le * schede radio con pin condivisi. led_init() viene richiamato in seguito secondo necessità per (re)inzializzare i LED * */ led_init(); button_init(); LCD_init(); while (1) { struct gecko_cmd_packet *evt = gecko_wait_event(); handle_gecko_event(BGLIB_MSG_ID(evt->header), evt); } }
Listato 1: Simplicity Studio fornisce un ambiente di sviluppo completo, che include codici esemplificativi come questa routine principale per illuminazione con rete a maglie, che fornisce una dimostrazione dell'inizializzazione e del funzionamento in loop per la gestione degli eventi. (Codice sorgente per gentile concessione di Silicon Labs)
Nella prima riga del loop principale, la funzione gecko_wait_event() attua un blocco in attesa della comparsa di eventi in una coda di eventi popolata dai livelli inferiori. Benché gli sviluppatori evitino spesso le funzioni di blocco, questo approccio è particolarmente efficace in questo caso, in quanto lo stack Bluetooth gestisce automaticamente gli stati di sospensione a basso consumo in tale modo bloccato. Per eventuali requisiti applicativi specifici non in grado di tollerare le attese in stato di blocco, il kit SDK fornisce anche una funzione senza blocco, che restituisce l'evento successivo o lo stato NULL se la coda è vuota. Con questa funzione, tuttavia, gli sviluppatori devono provvedere autonomamente alla gestione della sospensione a basso consumo.
Nella seconda riga del loop principale, la funzione di gestione handle_gecko_event() elabora l'ultimo evento (evt) in base al suo ID di evento (Listato 2). Quando un dispositivo si accende, lo stack genera un evento di avvio di sistema (gecko_evt_system_boot_id). Il gestore degli eventi richiama a sua volta una serie di funzioni di inizializzazione, fra cui gecko_cmd_mesh_node_init(), che inizializza lo stack di rete a maglie Bluetooth. Il gestore richiama poi altre funzioni necessarie per fornire le funzionalità necessarie associate con il tipo di evento in questione, come indicato dall'ID di evento associato.
Copy /** * Gestione di eventi stack. Qui vengono gestiti sia gli eventi Bluetooth LE, sia quelli di rete a maglie Bluetooth.
*/ static void handle_gecko_event(uint32_t evt_id, struct gecko_cmd_packet *evt) { struct gecko_bgapi_mesh_node_cmd_packet *node_evt; struct gecko_bgapi_mesh_generic_server_cmd_packet *server_evt; struct gecko_msg_mesh_node_provisioning_failed_evt_t *prov_fail_evt; if (NULL == evt) { return; } switch (evt_id) { case gecko_evt_system_boot_id: // verifica lo stato del pulsante all'avvio. Se PB0 o PB1 sono premuti esegui un ripristino dei valori di fabbrica If (GPIO_PinInGet(BSP_GPIO_PB0_PORT, BSP_GPIO_PB0_PIN) == 0 || GPIO_PinInGet(BSP_GPIO_PB1_PORT, BSP_GPIO_PB1_PIN) == 0) { initiate_factory_reset(); } else { struct gecko_msg_system_get_bt_address_rsp_t *pAddr = gecko_cmd_system_get_bt_address(); set_device_name(&pAddr->address); // Initialize Mesh stack in Node operation mode, wait for initialized event gecko_cmd_mesh_node_init(); // re-initialize LEDs (needed for those radio board that share same GPIO for button/LED) led_init(); } break; .
.
.
case gecko_evt_mesh_node_initialized_id: printf(node initialized\r\n); struct gecko_msg_mesh_node_initialized_evt_t *pData = (struct gecko_msg_mesh_node_initialized_evt_t *)&(evt->data); if (pData->provisioned) { .
.
.
} else { printf(node is unprovisioned\r\n); LCD_write(unprovisioned, LCD_ROW_STATUS); printf(starting unprovisioned beaconing...\r\n); gecko_cmd_mesh_node_start_unprov_beaconing(0x3); // enable ADV and GATT provisioning bearer } break; case gecko_evt_mesh_node_provisioning_started_id: printf(Started provisioning\r\n); LCD_write(provisioning..., LCD_ROW_STATUS); // avvia il timer di lampeggio dei LED per indicare il nodo oggetto di provisioning gecko_cmd_hardware_set_soft_timer(32768 / 4, TIMER_ID_PROVISIONING, 0); break; case gecko_evt_mesh_node_provisioned_id: _my_index = 0; // indice dell'elemento primario codificato a zero in questo esempio lightbulb_state_init(); printf(node provisioned, got index=%x\r\n, _my_index); // arresta il lampeggio dei LED al termine del provisioning gecko_cmd_hardware_set_soft_timer(0, TIMER_ID_PROVISIONING, 0); LED_set_state(LED_STATE_OFF); LCD_write(provisioned, LCD_ROW_STATUS); break; case gecko_evt_mesh_node_provisioning_failed_id: prov_fail_evt = (struct gecko_msg_mesh_node_provisioning_failed_evt_t *)&(evt->data); printf(provisioning failed, code %x\r\n, prov_fail_evt->result); LCD_write(prov failed, LCD_ROW_STATUS); /* avvia un timer monostabile che attiva un ripristino graduale dopo un breve ritardo */ gecko_cmd_hardware_set_soft_timer(2 * 32768, TIMER_ID_RESTART, 1); break; .
.
.
} }
Listato 2: Gli sviluppatori possono esaminare il codice esemplificativo per rete a maglie Silicon Labs per modelli di progettazione chiave, come l'elaborazione degli eventi di provisioning, mostrata in questo frammento a partire dalla routine del gestore di eventi handle_gecko_event() richiamata nella routine principale per la luce con rete a maglie (vedere il Listato 1). (Codice sorgente per gentile concessione di Silicon Labs)
Una delle principali serie di eventi di una rete a maglie Bluetooth è associata al processo di provisioning. Dopo essersi accesi e avere terminato la sequenza di inizializzazione, i dispositivi passano al modo beacon, annunciandosi alla rete per il provisioning. Durante l'avanzamento del provisioning, e fino al suo completamento (o alla sua mancata riuscita), il codice esemplificativo utilizza l'LCD e i LED del kit di sviluppo per indicare lo stato. Esaminando il blocco di codice del gestore degli eventi per ciascuno stato di provisioning, gli sviluppatori possono comprendere rapidamente la sequenza e le opzioni del provisioning in questione.
Analogamente, i tecnici software possono utilizzare il codice esemplificativo del gestore come guida per la creazione delle loro funzionalità a livello di applicazione. Un concetto chiave della connettività di rete a maglie Bluetooth è ad esempio l'uso di un modello a pubblicazione-sottoscrizione per associare i nodi che condividono una relazione funzionale (Figura 8).
Figura 8: Gli sviluppatori di applicazioni utilizzano il modello a pubblicazione-sottoscrizione di Bluetooth per combinare i dispositivi in raggruppamenti funzionali come un gruppo di luci controllate da uno o più interruttori. (Immagine per gentile concessione di Silicon Labs)
Questo approccio consente a varie lampadine intelligenti di effettuare la sottoscrizione a un interruttore che effettua una pubblicazione. Quando l'utente finale lo attiva, l'interruttore pubblica l'evento ON/OFF. Tale evento si propaga a cascata attraverso la rete a maglie fino alle lampadine intelligenti che hanno effettuato la sottoscrizione, i cui gestori di eventi compiono l'azione appropriata. Il codice esemplificativo di Silicon Labs fornisce una dimostrazione di tale processo, anzitutto con la pubblicazione di una richiesta di on/off nell'interruttore connesso alla rete a maglie (Listato 3), quindi con una risposta corrispondente nella luce connessa (Listato 4).
Copy /** * Questa funzione pubblica una richiesta di on/off per cambiare lo stato di una (o più) luci del gruppo.
* L'ultimo stato desiderato della luce è contenuto nella variabile globale switch_pos; i valori possibili sono * switch_pos = 1 -> è stato premuto PB1, accendi le luci * switch_pos = 0 -> è stato premuto PB0, spegni le luci * * Per migliorare l'affidabilità, questa applicazione invia più richieste per ciascuna pressione di un pulsante.
* Il parametro retrans indica se si tratta della prima richiesta o di una ri-trasmissione.
* In caso di ri-trasmissione, l'ID di transazione non viene incrementato.
*/ void send_onoff_request(int retrans) { uint16 resp; uint16 delay; struct mesh_generic_request req; req.kind = mesh_generic_request_on_off; req.on_off = switch_pos ? MESH_GENERIC_ON_OFF_STATE_ON : MESH_GENERIC_ON_OFF_STATE_OFF; // incrementa l'ID di transazione per ciascuna richiesta, a meno che non si tratti di una ritrasmissione Se (retrans == 0) { trid++; } /* viene calcolato un ritardo per la richiesta in modo che l'ultima richiesta abbia un ritardo zero e che ciascuna * delle richieste precedenti abbia un ritardo che aumenta a passi di 50 ms. Ad esempio, quando si utilizzano tre * richieste on/off per ogni pressione dei pulsanti i ritardi sono impostati su 100, 50, 0 ms */ delay = (request_count - 1) * 50; resp = gecko_cmd_mesh_generic_client_publish( MESH_GENERIC_ON_OFF_CLIENT_MODEL_ID, _my_index, trid, 0, // transition delay, 0, // flags mesh_generic_request_on_off, // type 1, // param len &req.on_off /// parameters data )->result; if (resp) { printf(gecko_cmd_mesh_generic_client_publish failed,code %x\r\n, resp); } else { printf(request sent, trid = %u, delay = %d\r\n, trid, delay); } }
Listato 3: Questo frammento, tratto dall'applicazione esemplificativa dell'interruttore su rete a maglie di Silicon Labs, illustra l'uso del processo di pubblicazione di Bluetooth 5 (gecko_cmd_mesh_generic_client_publish) per richiedere una modifica dello stato (on od off) di una luce che dispone di una sottoscrizione a tale flusso di eventi. (Codice sorgente per gentile concessione di Silicon Labs)
Copy static void onoff_request(uint16_t model_id, uint16_t element_index, uint16_t client_addr, uint16_t server_addr, uint16_t appkey_index, const struct mesh_generic_request *request, uint32_t transition_ms, uint16_t delay_ms, uint8_t request_flags) { printf(ON/OFF request: requested state=<%s>, transition=%u, delay=%u\r\n, request->on_off ? ON : OFF, transition_ms, delay_ms); if (lightbulb_state.onoff_current == request->on_off) { printf(Request for current state received; no op\n); } else { printf(Turning lightbulb <%s>\r\n, request->on_off ? ON : OFF); if (transition_ms == 0 && delay_ms == 0) { // Immediate change lightbulb_state.onoff_current = request->on_off; lightbulb_state.onoff_target = request->on_off; if (lightbulb_state.onoff_current == MESH_GENERIC_ON_OFF_STATE_OFF) { LED_set_state(LED_STATE_OFF); } else { LED_set_state(LED_STATE_ON); } } else { // Current state remains as is for now lightbulb_state.onoff_target = request->on_off; LED_set_state(LED_STATE_TRANS); // set LEDs to transition mode gecko_cmd_hardware_set_soft_timer(TIMER_MS_2_TIMERTICK(delay_ms + transition_ms), TIMER_ID_TRANSITION, 1); } lightbulb_state_store(); } if (request_flags & MESH_REQUEST_FLAG_RESPONSE_REQUIRED) { onoff_response(element_index, client_addr, appkey_index); } else { onoff_update(element_index); } }
Listato 4: L'esempio relativo alla luce su rete a maglie Silicon Labs include alcune routine per eventi specifici a livello di applicazione, come la funzione in questione per l'accensione o lo spegnimento di un LED in risposta a una richiesta pubblicata dall'interruttore (vedere il Listato 3). (Codice sorgente per gentile concessione di Silicon Labs)
Unitamente allo stack Bluetooth e al kit SDK per lo sviluppo dei nodi, Silicon Labs fornisce anche l'ultima tessera del puzzle della rete a maglie Bluetooth – la connessione ai dispositivi mobili. La maggior parte dei dispositivi mobili supporta Bluetooth 4, e benché le loro unità radio siano in grado di supportare i requisiti di Bluetooth 5, lo stack di tali dispositivi non fornisce alcun supporto per i livelli della rete a maglie Bluetooth 5. Silicon Labs affronta tale limitazione fornendo agli sviluppatori di app mobili uno stack software aggiuntivo che offre funzionalità di rete a maglie (Figura 9).
Figura 9: Gli sviluppatori possono aggiungere alle loro app mobili lo stack di rete a maglie di Silicon Labs per dispositivi mobili, che consente di utilizzare i dispositivi mobili Bluetooth 4 nelle reti a maglie Bluetooth 5. (Immagine per gentile concessione di Silicon Labs)
Conclusione
La connettività di rete a maglie Bluetooth 5 rappresenta una transizione naturale per un'ampia gamma di applicazioni che già si avvalgono di smartphone e altri dispositivi mobili per comunicazioni punto-punto. L'implementazione della connettività di rete a maglie Bluetooth 5 pone tuttavia notevoli sfide di progettazione sia hardware, sia software, specie nelle applicazioni con un limite di potenza, come quelle IoT. I progettisti dell'hardware devono inoltre soddisfare requisiti di minimo ingombro e basso consumo, mentre gli sviluppatori del software devono realizzare programmi che utilizzino una quantità minima di risorse per eseguire protocolli di comunicazione complessi. Grazie alla combinazione formata dal modulo BGM13P, dalla scheda di sviluppo SLWSTK6101C e dagli stack Bluetooth per i nodi e i dispositivi mobili, i tecnici dispongono di una piattaforma completa per lo sviluppo rapido di applicazioni che utilizzano la connettività di rete a maglie Bluetooth.
Esonero della responsabilità: le opinioni, le convinzioni e i punti di vista espressi dai vari autori e/o dai partecipanti al forum su questo sito Web non riflettono necessariamente le opinioni, le convinzioni e i punti di vista di DigiKey o le sue politiche.




