Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
Libreria Bluetooth Low Energy
Importante
Questa libreria è ospitata nel repository Amazon-FreeRTOS che è obsoleto. Ti consigliamo di iniziare da qui quando crei un nuovo progetto. Se disponi già di un progetto FreeRTOS esistente basato sull'ormai obsoleto repository Amazon-FreerTOS, consulta il. Guida alla migrazione del repository Github di Amazon-FreeRTOS
Panoramica
FreerTOS supporta la pubblicazione e la sottoscrizione di argomenti MQTT (Message Queuing Telemetry Transport) tramite Bluetooth Low Energy tramite un dispositivo proxy, come un telefono cellulare. Con la libreria FreerTOS Bluetooth Low Energy (BLE), il microcontrollore può comunicare in modo sicuro con il broker MQTT. AWS IoT
![Dispositivi BLE che si connettono AWS IoT Core tramite MQTT/HTTP/WebSocket tramite Cognito. AWS](images/blediagram.jpg)
Utilizzando gli SDK mobili per dispositivi Bluetooth FreerTOS, puoi scrivere applicazioni mobili native che comunicano con le applicazioni integrate sul tuo microcontrollore tramite BLE. Per ulteriori informazioni sugli SDK per dispositivi mobili, consulta SDK mobili per dispositivi Bluetooth FreerTOS.
La libreria FreerTOS BLE include servizi per la configurazione di reti Wi-Fi, il trasferimento di grandi quantità di dati e la fornitura di astrazioni di rete tramite BLE. La libreria FreerTOS BLE include anche API middleware e di livello inferiore per un controllo più diretto sullo stack BLE.
Architettura
Tre livelli costituiscono la libreria FreerTOS BLE: servizi, middleware e wrapper di basso livello.
![Livelli di architettura cloud: applicazione utente, servizi, middleware, wrapper di basso livello, produttore BLE Stack.](images/ble-architecture.png)
Servizi
Il livello di servizi BLE FreerTOS è costituito da quattro servizi Generic Attribute (GATT) che sfruttano le API del middleware:
-
Informazioni sul dispositivo
-
Provisioning Wi-Fi
-
Astrazione di rete
-
Trasferimento di oggetti di grandi dimensioni
Informazioni sul dispositivo
Il servizio di informazioni sul dispositivo raccoglie dettagli sul microcontrollore, tra cui:
-
La versione di FreerTOS utilizzata dal tuo dispositivo.
-
L' AWS IoT endpoint dell'account per il quale è registrato il dispositivo.
-
Unità di trasmissione massima (MTU) Bluetooth Low Energy
Provisioning Wi-Fi
Il servizio di provisioning Wi-Fi consente ai microcontroller con funzionalità Wi-Fi di eseguire le seguenti operazioni:
-
Elencare reti nell'intervallo.
-
Salvare reti e credenziali di rete nella memoria flash.
-
Impostare priorità di rete.
-
Eliminare reti e credenziali di rete dalla memoria flash.
Astrazione di rete
Il servizio Astrazione di rete estrae il tipo di connessione di rete per le applicazioni. Un'API comune interagisce con lo stack hardware dei servizi Wi-Fi, Ethernet e Bluetooth Low Energy del dispositivo in modo da consentire la compatibilità di un'applicazione con più tipi di connessione.
Trasferimento di oggetti di grandi dimensioni
Il servizio Large Object Transfer invia e riceve dati da un client. Altri servizi, come il provisioning Wi-Fi e l'astrazione della rete, utilizzano il servizio Large Object Transfer per inviare e ricevere dati. Puoi anche utilizzare l'API Large Object Transfer per interagire direttamente con il servizio.
MQTT over BLE
MQTT over BLE contiene il profilo GATT per la creazione di un servizio proxy MQTT su BLE. Il servizio proxy MQTT consente a un client MQTT di comunicare con il broker AWS MQTT tramite un dispositivo gateway. Ad esempio, puoi utilizzare il servizio proxy per connettere un dispositivo che esegue FreerTOS a MQTT tramite un' AWS app per smartphone. Il dispositivo BLE è il server GATT ed espone i servizi e le caratteristiche del dispositivo gateway. Il server GATT utilizza questi servizi e caratteristiche esposti per eseguire operazioni MQTT con il cloud per quel dispositivo. Per ulteriori informazioni, consulta Appendice A: MQTT su profilo BLE GATT .
Middleware
Il middleware FreerTOS Bluetooth Low Energy è un'astrazione dalle API di livello inferiore. Le API del middleware costituiscono un'interfaccia più intuitiva allo stack Bluetooth Low Energy.
Utilizzando le API del middleware, puoi registrare diversi callback, su più livelli, in un singolo evento. L'inizializzazione del middleware Bluetooth Low Energy comporta l'inizializzazione dei servizi e l'avvio della pubblicità.
Sottoscrizione ai callback flessibile
Supponiamo che l'hardware Bluetooth Low Energy si disconnetta e che il servizio MQTT su Bluetooth Low Energy debba rilevare la disconnessione. Anche un'applicazione scritta dall'utente potrebbe dover rilevare lo stesso evento di disconnessione. Il middleware Bluetooth Low Energy è in grado di instradare l'evento a diverse parti del codice in cui hai registrato i callback, senza che i livelli più elevati competano tra loro per risorse di basso livello.
Wrapper di basso livello
I wrapper FreerTOS Bluetooth Low Energy di basso livello sono un'astrazione dello stack Bluetooth Low Energy del produttore. I wrapper di basso livello offrono un set comune di API per il controllo diretto dell'hardware. Le API di basso livello ottimizzano l'uso della RAM, ma presentano limiti di funzionalità.
Utilizza le API del servizio Bluetooth Low Energy per interagire con i servizi Bluetooth Low Energy. Le API del servizio richiedono un maggior numero di risorse rispetto alle API di basso livello.
Dipendenze e requisiti
La libreria Bluetooth Low Energy è caratterizzata dalle seguenti dipendenze dirette:
-
libreria Linear Containers
-
Una piattaforma che si interfaccia con il sistema operativo per la gestione dei thread, i timer, le funzioni di clock e l'accesso di rete.
![Diagramma di architettura che mostra i componenti: BLE, List/Queue, Network e Clock, con frecce direzionali che indicano le interazioni.](images/ble-dependencies.png)
Solo il servizio Wi-Fi Provisioning ha dipendenze dalla libreria FreerTOS:
Servizio GATT | Dipendenza |
---|---|
Provisioning Wi-Fi | Libreria Wi-Fi |
Per comunicare con il broker AWS IoT MQTT, è necessario disporre di un AWS account e registrare i dispositivi come oggetti. AWS IoT Per ulteriori informazioni sulla configurazione, consulta la Guida per gli sviluppatori di AWS IoT.
FreerTOS Bluetooth Low Energy utilizza Amazon Cognito per l'autenticazione degli utenti sul tuo dispositivo mobile. Per utilizzare i servizi proxy MQTT, devi creare un'identità e pool di utenti Amazon Cognito. A ogni Amazon Cognito Identity deve essere associata la policy appropriata. Per ulteriori informazioni, consulta la Guida per sviluppatori di Amazon Cognito .
File di configurazione della libreria
Le applicazioni che utilizzano il servizio FreerTOS MQTT over Bluetooth Low Energy devono fornire iot_ble_config.h
un file di intestazione, in cui sono definiti i parametri di configurazione. I parametri di configurazione non definiti assumono i valori predefiniti specificati in iot_ble_config_defaults.h
.
Alcune parametri di configurazione importanti includono:
IOT_BLE_ADD_CUSTOM_SERVICES
-
Consente agli utenti di creare i propri servizi.
IOT_BLE_SET_CUSTOM_ADVERTISEMENT_MSG
-
Consente agli utenti di personalizzare le pubblicità e analizzare i messaggi di risposta.
Per ulteriori informazioni, consulta la Documentazione di riferimento sull'API Bluetooth Low Energy.
Ottimizzazione
Durante l'ottimizzazione delle prestazioni della scheda, considera quanto segue:
-
Le API di basso livello utilizzano meno RAM, ma offrono funzionalità limitate.
-
Puoi impostare il parametro
bleconfigMAX_NETWORK
nel file di intestazioneiot_ble_config.h
su un valore più basso per ridurre la quantità di stack utilizzata. -
Puoi incrementare le dimensioni MTU fino al valore massimo per limitare il buffering dei messaggi e consentire un'esecuzione del codice più veloce e meno consumo di RAM.
Limitazioni d'uso
Per impostazione predefinita, la libreria FreerTOS Bluetooth Low Energy imposta eBTpropertySecureConnectionOnly
la proprietà su TRUE, che colloca il dispositivo in modalità Solo connessioni sicure. Come specificato dal Bluetooth Core Specification
Di seguito sono riportate le modalità supportate e le relative proprietà associate:
- Modalità 1, livello 1 (nessuna sicurezza)
-
/* Disable numeric comparison */ #define IOT_BLE_ENABLE_NUMERIC_COMPARISON ( 0 ) #define IOT_BLE_ENABLE_SECURE_CONNECTION ( 0 ) #define IOT_BLE_INPUT_OUTPUT ( eBTIONone ) #define IOT_BLE_ENCRYPTION_REQUIRED ( 0 )
- Modalità 1, livello 2 (associazione non autenticata con crittografia)
-
#define IOT_BLE_ENABLE_NUMERIC_COMPARISON ( 0 ) #define IOT_BLE_ENABLE_SECURE_CONNECTION ( 0 ) #define IOT_BLE_INPUT_OUTPUT ( eBTIONone )
- Modalità 1, livello 3 (associazione autenticata con crittografia)
-
Questa modalità non è supportata.
- Modalità 1, livello 4 (associazione autenticata delle connessioni sicure LE con crittografia)
-
Questa modalità è supportata per impostazione predefinita.
Per informazioni sulle modalità di sicurezza LE, consulta il documento Bluetooth Core Specification
Inizializzazione
Se l'applicazione interagisce con lo stack Bluetooth Low Energy tramite middleware, occorre solo inizializzare il middleware. Il middleware si occupa dell'inizializzazione dei livelli inferiori dello stack.
Middleware
Per inizializzare il middleware
-
Prima di eseguire una chiamata all'API del middleware Bluetooth Low Energy, occorre inizializzare qualsiasi driver dell'hardware Bluetooth Low Energy.
-
Abilitare Bluetooth Low Energy.
-
Inizializzare il middleware mediante
IotBLE_Init()
.Nota
Questo passaggio di inizializzazione non è necessario se si eseguono le demo. AWS L'inizializzazione delle demo viene gestita dal network manager, disponibile in
.freertos
/demos/network_manager
API di basso livello
Se non desideri utilizzare i servizi FreerTOS Bluetooth Low Energy GATT, puoi bypassare il middleware e interagire direttamente con le API di basso livello per risparmiare risorse.
Per inizializzare le API di basso livello
-
È necessario inizializzare qualsiasi driver hardware Bluetooth Low Energy prima di chiamare le API. L'inizializzazione del driver non fa parte delle API Bluetooth Low Energy di basso livello.
-
L'API Bluetooth Low Energy di basso livello fornisce una chiamata di abilitazione/disabilitazione allo stack Bluetooth Low Energy per l'ottimizzazione di alimentazione e risorse. Prima di chiamare le API, è necessario abilitare Bluetooth Low Energy.
const BTInterface_t * pxIface = BTGetBluetoothInterface(); xStatus = pxIface->pxEnable( 0 );
-
Il manager Bluetooth contiene le API comuni a Bluetooth Low Energy e Bluetooth classico. I callback per il responsabile comune devono essere inizializzati per secondi.
xStatus = xBTInterface.pxBTInterface->pxBtManagerInit( &xBTManagerCb );
-
L'adattatore Bluetooth Low Energy si inserisce sopra l'API comune. È necessario inizializzare i relativi callback come è stata inizializzata l'API comune.
xBTInterface.pxBTLeAdapterInterface = ( BTBleAdapter_t * ) xBTInterface.pxBTInterface->pxGetLeAdapter(); xStatus = xBTInterface.pxBTLeAdapterInterface->pxBleAdapterInit( &xBTBleAdapterCb );
-
Registrare la nuova applicazione utente.
xBTInterface.pxBTLeAdapterInterface->pxRegisterBleApp( pxAppUuid );
-
Inizializzare i callback ai server GATT.
xBTInterface.pxGattServerInterface = ( BTGattServerInterface_t * ) xBTInterface.pxBTLeAdapterInterface->ppvGetGattServerInterface(); xBTInterface.pxGattServerInterface->pxGattServerInit( &xBTGattServerCb );
Dopo aver inizializzato l'adattatore Bluetooth Low Energy, è possibile aggiungere un server GATT. Puoi registrare un solo server GATT per volta.
xStatus = xBTInterface.pxGattServerInterface->pxRegisterServer( pxAppUuid );
-
Impostare le proprietà dell'applicazione come Secure Connection Only (Solo connessione sicura) e dimensioni MTU.
xStatus = xBTInterface.pxBTInterface->pxSetDeviceProperty( &pxProperty[ usIndex ] );
Riferimento API
Per informazioni di riferimento complete sull'API, consulta la Documentazione di riferimento sull'API Bluetooth Low Energy.
Esempio di utilizzo
Gli esempi riportati di seguito illustrano come utilizzare la libreria Bluetooth Low Energy per la pubblicità e la creazione di nuovi servizi. Per le applicazioni demo complete di FreerTOS Bluetooth Low Energy, vedi Applicazioni demo Bluetooth Low Energy.
Pubblicità
-
Nell'applicazione impostare l'UUID della pubblicità:
static const BTUuid_t _advUUID = { .uu.uu128 = IOT_BLE_ADVERTISING_UUID, .ucType = eBTuuidType128 };
-
Definire la funzione di callback
IotBle_SetCustomAdvCb
:void IotBle_SetCustomAdvCb( IotBleAdvertisementParams_t * pAdvParams, IotBleAdvertisementParams_t * pScanParams) { memset(pAdvParams, 0, sizeof(IotBleAdvertisementParams_t)); memset(pScanParams, 0, sizeof(IotBleAdvertisementParams_t)); /* Set advertisement message */ pAdvParams->pUUID1 = &_advUUID; pAdvParams->nameType = BTGattAdvNameNone; /* This is the scan response, set it back to true. */ pScanParams->setScanRsp = true; pScanParams->nameType = BTGattAdvNameComplete; }
La funzione di callback invia l'UUID nel messaggio pubblicitario e il nome completo nella risposta di analisi (scan response).
-
Aprire
vendors/
e impostarevendor
/boards/board
/aws_demos/config_files/iot_ble_config.hIOT_BLE_SET_CUSTOM_ADVERTISEMENT_MSG
su1
. In questo modo viene attivata la funzione di callbackIotBle_SetCustomAdvCb
.
Aggiunta di un nuovo servizio
Per esempi di servizi completi, consulta
.freertos
/.../ble/services
-
Creare gli UUID per le caratteristiche e i descrittori del servizio:
#define xServiceUUID_TYPE \ {\ .uu.uu128 = gattDemoSVC_UUID, \ .ucType = eBTuuidType128 \ } #define xCharCounterUUID_TYPE \ {\ .uu.uu128 = gattDemoCHAR_COUNTER_UUID,\ .ucType = eBTuuidType128\ } #define xCharControlUUID_TYPE \ {\ .uu.uu128 = gattDemoCHAR_CONTROL_UUID,\ .ucType = eBTuuidType128\ } #define xClientCharCfgUUID_TYPE \ {\ .uu.uu16 = gattDemoCLIENT_CHAR_CFG_UUID,\ .ucType = eBTuuidType16\ }
-
Creare un buffer per registrare gli handle delle caratteristiche e dei descrittori:
static uint16_t usHandlesBuffer[egattDemoNbAttributes];
-
Creare l'attributo tabella. Per salvare RAM, definire la tabella come
const
.Importante
Creare sempre gli attributi nell'ordine indicato, con il servizio come primo attributo.
static const BTAttribute_t pxAttributeTable[] = { { .xServiceUUID = xServiceUUID_TYPE }, { .xAttributeType = eBTDbCharacteristic, .xCharacteristic = { .xUuid = xCharCounterUUID_TYPE, .xPermissions = ( IOT_BLE_CHAR_READ_PERM ), .xProperties = ( eBTPropRead | eBTPropNotify ) } }, { .xAttributeType = eBTDbDescriptor, .xCharacteristicDescr = { .xUuid = xClientCharCfgUUID_TYPE, .xPermissions = ( IOT_BLE_CHAR_READ_PERM | IOT_BLE_CHAR_WRITE_PERM ) } }, { .xAttributeType = eBTDbCharacteristic, .xCharacteristic = { .xUuid = xCharControlUUID_TYPE, .xPermissions = ( IOT_BLE_CHAR_READ_PERM | IOT_BLE_CHAR_WRITE_PERM ), .xProperties = ( eBTPropRead | eBTPropWrite ) } } };
-
Creare un array di funzioni di callback. L'array di funzioni di callback deve avere lo stesso ordine dell'array di tabelle definito in precedenza.
Ad esempio, se la funzione
vReadCounter
viene attivata quando si accede alla funzionexCharCounterUUID_TYPE
e la funzionevWriteCommand
viene attivata quando si accede alla funzionexCharControlUUID_TYPE
, definire l'array come segue:static const IotBleAttributeEventCallback_t pxCallBackArray[egattDemoNbAttributes] = { NULL, vReadCounter, vEnableNotification, vWriteCommand };
-
Creare il servizio.
static const BTService_t xGattDemoService = { .xNumberOfAttributes = egattDemoNbAttributes, .ucInstId = 0, .xType = eBTServiceTypePrimary, .pusHandlesBuffer = usHandlesBuffer, .pxBLEAttributes = (BTAttribute_t *)pxAttributeTable };
-
Richiamare l'API
IotBle_CreateService
con la struttura creata nella fase precedente. Il middleware sincronizza la creazione di tutti i servizi. Pertanto, i nuovi servizi devono già essere definiti quando viene attivata la funzione di callbackIotBle_AddCustomServicesCb
.-
Impostare
IOT_BLE_ADD_CUSTOM_SERVICES
su1
invendors/
.vendor
/boards/board
/aws_demos/config_files/iot_ble_config.h -
Crea IotBle _ AddCustomServicesCb nella tua applicazione:
void IotBle_AddCustomServicesCb(void) { BTStatus_t xStatus; /* Select the handle buffer. */ xStatus = IotBle_CreateService( (BTService_t *)&xGattDemoService, (IotBleAttributeEventCallback_t *)pxCallBackArray ); }
-
Portabilità
Periferica di input e output utente
Una connessione sicura richiede input e output per confronti numerici. L'evento eBLENumericComparisonCallback
può essere registrato utilizzando la gestione eventi:
xEventCb.pxNumericComparisonCb = &prvNumericComparisonCb; xStatus = BLE_RegisterEventCb( eBLENumericComparisonCallback, xEventCb );
La periferica deve visualizzare la passkey numerica e prendere il risultato del confronto come un input.
Implementazione delle API per la portabilità
Per portare FreerTOS su un nuovo target, è necessario implementare alcune API per il servizio Wi-Fi Provisioning e la funzionalità Bluetooth Low Energy.
API Bluetooth Low Energy
Per utilizzare il middleware FreerTOS Bluetooth Low Energy, devi implementare alcune API.
API comuni tra GAP per Bluetooth classico e GAP per Bluetooth Low Energy
-
pxBtManagerInit
-
pxEnable
-
pxDisable
-
pxGetDeviceProperty
-
pxSetDeviceProperty
(Tutte le opzioni sono obbligatorie tranneeBTpropertyRemoteRssi
edeBTpropertyRemoteVersionInfo
) -
pxPair
-
pxRemoveBond
-
pxGetConnectionState
-
pxPinReply
-
pxSspReply
-
pxGetTxpower
-
pxGetLeAdapter
-
pxDeviceStateChangedCb
-
pxAdapterPropertiesCb
-
pxSspRequestCb
-
pxPairingStateChangedCb
-
pxTxPowerCb
API specifiche di GAP per Bluetooth Low Energy
-
pxRegisterBleApp
-
pxUnregisterBleApp
-
pxBleAdapterInit
-
pxStartAdv
-
pxStopAdv
-
pxSetAdvData
-
pxConnParameterUpdateRequest
-
pxRegisterBleAdapterCb
-
pxAdvStartCb
-
pxSetAdvDataCb
-
pxConnParameterUpdateRequestCb
-
pxCongestionCb
Server GATT
-
pxRegisterServer
-
pxUnregisterServer
-
pxGattServerInit
-
pxAddService
-
pxAddIncludedService
-
pxAddCharacteristic
-
pxSetVal
-
pxAddDescriptor
-
pxStartService
-
pxStopService
-
pxDeleteService
-
pxSendIndication
-
pxSendResponse
-
pxMtuChangedCb
-
pxCongestionCb
-
pxIndicationSentCb
-
pxRequestExecWriteCb
-
pxRequestWriteCb
-
pxRequestReadCb
-
pxServiceDeletedCb
-
pxServiceStoppedCb
-
pxServiceStartedCb
-
pxDescriptorAddedCb
-
pxSetValCallbackCb
-
pxCharacteristicAddedCb
-
pxIncludedServiceAddedCb
-
pxServiceAddedCb
-
pxConnectionCb
-
pxUnregisterServerCb
-
pxRegisterServerCb
Per ulteriori informazioni sul porting della libreria Bluetooth Low Energy FreerTOS sulla tua piattaforma, consulta Porting the Bluetooth Low Energy Library nella FreerTOS Porting Guide.
Appendice A: MQTT su profilo BLE GATT
Dettagli del servizio GATT
MQTT over BLE utilizza un'istanza del servizio GATT di trasferimento dati per inviare messaggi MQTT Concise Binary Object Representation (CBOR) tra il dispositivo FreerTOS e il dispositivo proxy. Il servizio di trasferimento dati presenta alcune caratteristiche che aiutano a inviare e ricevere dati grezzi tramite il protocollo BLE GATT. Gestisce inoltre la frammentazione e l'assemblaggio di carichi utili superiori alla dimensione massima dell'unità di trasferimento massima (MTU) BLE.
- UUID del servizio
-
A9D7-166A-D72E-40A9-A002-4804-4CC3-FF00
- Istanze di servizio
-
Viene creata un'istanza del servizio GATT per ogni sessione MQTT con il broker. Ogni servizio ha un UUID univoco (due byte) che ne identifica il tipo. Ogni singola istanza è differenziata in base all'ID dell'istanza.
Ogni servizio viene istanziato come servizio primario su ogni dispositivo server BLE. È possibile creare più istanze del servizio su un determinato dispositivo. Il tipo di servizio proxy MQTT ha un UUID univoco.
- Caratteristiche
-
Formato del contenuto caratteristico: CBOR
Dimensione massima del valore caratteristico: 512 byte
Caratteristica Requisito Proprietà obbligatorie Proprietà opzionali Autorizzazioni di sicurezza Breve descrizione UUID Controllo M Scrittura Nessuno La scrittura richiede la crittografia Utilizzato per avviare e arrestare il proxy MQTT. A9D7-166A-D72E-40A9-A002-4804-4CC3-FF01
Messaggio TX M Lettura, notifica Nessuno Read necessita di crittografia Utilizzato per inviare una notifica contenente un messaggio a un broker tramite un proxy. A9D7-166A-D72E-40A9-A002-4804-4CC3-FF02
Messaggio RX M Leggi, scrivi senza risposta Nessuno La lettura e la scrittura richiedono la crittografia Utilizzato per ricevere un messaggio da un broker tramite un proxy. A9D7-166A-D72E-40A9-A002-4804-4CC3-FF03
TX LargeMessage M Leggi, notifica Nessuno Read necessita di crittografia Utilizzato per inviare un messaggio di grandi dimensioni (Message > BLE MTU Size) a un broker tramite un proxy. A9D7-166A-D72E-40A9-A002-4804-4CC3-FF04
RX LargeMessage M Leggi, scrivi senza risposta Nessuno La lettura e la scrittura richiedono la crittografia Utilizzato per ricevere messaggi di grandi dimensioni (Message > BLE MTU Size) da un broker tramite un proxy. A9D7-166A-D72E-40A9-A002-4804-4CC3-FF05
- Requisiti della procedura GATT
-
Leggi i valori caratteristici Obbligatorio Leggi i valori caratteristici lunghi Obbligatorio Scrivi valori caratteristici Obbligatorio Scrivi valori caratteristici lunghi Obbligatorio Leggi i descrittori caratteristici Obbligatorio Scrivi descrittori caratteristici Obbligatorio Notifiche Obbligatorio Indicazioni Obbligatorio - Tipi di messaggi
-
Vengono scambiati i seguenti tipi di messaggi.
Tipo di messaggio Messaggio Mappa con queste coppie chiave/valore 0x01 CONNECT -
Chiave = «w», valore = tipo 0, numero intero, tipo di messaggio (1)
-
Chiave = «d», valore = Tipo 3, stringa di testo, identificatore client per la sessione
-
Chiave = «a», valore = Tipo 3, stringa di testo, endpoint del broker per la sessione
-
Chiave = «c», valore = tipo di valore semplice Vero/Falso
0x02 CONNACK -
Chiave = «w», valore = tipo 0, numero intero, tipo di messaggio (2)
-
Chiave = «s», valore = tipo 0, numero intero, codice di stato
0x03 PUBLISH -
Chiave = «w», valore = tipo 0 Intero, tipo di messaggio (3)
-
Chiave = «u», valore = tipo 3, stringa di testo, argomento da pubblicare
-
Chiave = «n», valore = Type 0, Integer, QoS per la pubblicazione
-
Chiave = «i», valore = tipo 0, numero intero, identificatore del messaggio, solo per pubblicazioni QoS 1
-
Chiave = «k», valore = tipo 2, stringa di byte, payload per la pubblicazione
0x04 PUBBACK -
Inviato solo per messaggi QoS 1.
-
Chiave = «w», valore = tipo 0, numero intero, tipo di messaggio (4)
-
Chiave = «i», valore = tipo 0, numero intero, identificatore del messaggio
0x08 SUBSCRIBE -
Chiave = «w», valore = tipo 0, numero intero, tipo di messaggio (8)
-
Chiave = «v», valore = Tipo 4, matrice di stringhe di testo, argomenti per l'abbonamento
-
Chiave = «o», valore = Tipo 4, Matrice di numeri interi, QoS per abbonamento
-
Chiave = «i», valore = tipo 0, numero intero, identificatore del messaggio
0x09 SUBBACK -
Chiave = «w», valore = Tipo 0 Intero, tipo di messaggio (9)
-
Chiave = «i», valore = tipo 0, numero intero, identificatore del messaggio
-
Chiave = «s», valore = tipo 0, numero intero, codice di stato dell'abbonamento
0X0A UNSUBSCRIBE -
Chiave = «w», valore = tipo 0, numero intero, tipo di messaggio (10)
-
Chiave = «v», valore = Tipo 4, matrice di stringhe di testo, argomenti per l'annullamento dell'iscrizione
-
Chiave = «i», valore = tipo 0, numero intero, identificatore del messaggio
0x0B ANNULLARE -
Chiave = «w», valore = Tipo 0 Intero, tipo di messaggio (11)
-
Chiave = «i», valore = tipo 0, numero intero, identificatore del messaggio
-
Chiave = «s», valore = tipo 0, numero intero, codice di stato per UnSubscription
0X0C PING REQ -
Chiave = «w», valore = Tipo 0 Intero, tipo di messaggio (12)
0x0D PING RESP -
Chiave = «w», valore = Tipo 0 Intero, tipo di messaggio (13)
0x0E DISCONNETTERE -
Chiave = «w», valore = tipo 0, numero intero, tipo di messaggio (14)
-
- Caratteristiche di trasferimento di carichi utili di grandi dimensioni
-
- TX LargeMessage
-
TX LargeMessage viene utilizzato dal dispositivo per inviare un payload di grandi dimensioni superiore alla dimensione MTU negoziata per la connessione BLE.
-
Il dispositivo invia i primi byte MTU del payload come notifica tramite la caratteristica.
-
Il proxy invia una richiesta di lettura su questa caratteristica per i byte rimanenti.
-
Il dispositivo invia fino alla dimensione MTU o ai byte rimanenti del payload, a seconda di quale sia inferiore. Ogni volta, aumenta l'offset letto in base alla dimensione del payload inviato.
-
Il proxy continuerà a leggere la caratteristica fino a ottenere un payload di lunghezza zero o un payload inferiore alla dimensione MTU.
-
Se il dispositivo non riceve una richiesta di lettura entro un determinato timeout, il trasferimento non riesce e il proxy e il gateway rilasciano il buffer.
-
Se il proxy non riceve una risposta di lettura entro un determinato timeout, il trasferimento fallisce e il proxy rilascia il buffer.
-
- RX LargeMessage
-
RX LargeMessage viene utilizzato dal dispositivo per ricevere un payload di grandi dimensioni, superiore alla dimensione MTU negoziata per la connessione BLE.
-
Il proxy scrive i messaggi, fino alla dimensione MTU, uno per uno, utilizzando write with response su questa caratteristica.
-
Il dispositivo memorizza il messaggio nel buffer finché non riceve una richiesta di scrittura con lunghezza zero o lunghezza inferiore alla dimensione MTU.
-
Se il dispositivo non riceve una richiesta di scrittura entro un timeout specificato, il trasferimento fallisce e il dispositivo rilascia il buffer.
-
Se il proxy non riceve una risposta di scrittura entro un timeout specificato, il trasferimento fallisce e il proxy rilascia il buffer.
-