Biblioteca de Bluetooth de bajo consumo - FreeRTOS

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Biblioteca de Bluetooth de bajo consumo

importante

Esta biblioteca está alojada en el repositorio de Amazon-FreeRTOS, que está en desuso. Recomendamos empezar por aquí al crear un nuevo proyecto. Si ya tiene un proyecto FreeRTOS existente basado en el repositorio Amazon FreeRTOS, ahora obsoleto, consulte Guía de migración del repositorio Github de Amazon-FreeRTOS.

Información general

FreeRTOS admite la publicación y suscripción a temas de Message Queuing Telemetry Transport (MQTT) sobre Bluetooth de bajo consumo (BLE) a través de un dispositivo proxy, como un teléfono móvil. Con la biblioteca Bluetooth Low Energy (BLE) FreeRTOS, su microcontrolador puede comunicarse de forma segura con el AWS IoT intermediario MQTT.

Dispositivos BLE que se conectan AWS IoT Core mediante MQTT/HTTP/WebSocket a través de Cognito. AWS

Con los SDK para móviles de dispositivos Bluetooth de FreeRTOS, puede crear aplicaciones móviles nativas que se comuniquen con las aplicaciones integradas en su microcontrolador a través de BLE. Para obtener más información acerca de los SDK para móviles, consulte SDK para móviles para dispositivos Bluetooth de FreeRTOS.

La biblioteca de BLE de FreeRTOS incluye servicios para configurar redes Wi-Fi, transferir grandes cantidades de datos y proporcionar abstracciones de red a través de BLE. La biblioteca de BLE de FreeRTOS también incluye middleware y algunas API de nivel inferior para un control más directo sobre su pila BLE.

Arquitectura

La biblioteca de BLE de FreeRTOS se compone de tres capas: servicios, middleware y contenedores de bajo nivel.

Capas de arquitectura de nube: aplicaciones de usuario, servicios, middleware, envoltorios de bajo nivel, fabricante BLE Stack.

Servicios

La capa de servicios BLE de FreeRTOS consta de cuatro servicios de atributos genéricos (GATT) que aprovechan las API de middleware:

  • Información de dispositivo

  • Aprovisionamiento Wi-Fi

  • Abstracción de red

  • Transferencia de objetos grandes

Información de dispositivo

El servicio de Información de dispositivo recopila información sobre su microcontrolador, que incluye:

  • La versión de FreeRTOS que su dispositivo está utilizando.

  • El AWS IoT punto final de la cuenta en la que está registrado el dispositivo.

  • Unidad de transmisión máxima (MTU) de Bluetooth de bajo consumo.

Aprovisionamiento Wi-Fi

El servicio de Aprovisionamiento Wi-Fi permite microcontroladores con capacidades Wi-Fi para hacer lo siguiente:

  • Crear una lista de redes en el rango de alcance.

  • Guardar redes y credenciales de red en la memoria flash.

  • Establecer prioridad de red.

  • Eliminar redes y credenciales de red de la memoria flash.

Abstracción de red

El servicio de abstracción de red abstrae el tipo de conexión de red para las aplicaciones. Una API común interactúa con la pila de hardware de Wi-Fi, Ethernet y Bluetooth de bajo consumo de su dispositivo, lo que permite que una aplicación sea compatible con varios tipos de conexión.

Transferencia de objetos grandes

El servicio de transferencia de objetos grandes envía y recibe datos de un cliente. Otros servicios, como Aprovisionamiento Wi-Fi y Abstracción de red, utilizan el servicio de Transferencia de objetos grandes para enviar y recibir datos. También puede utilizar la API de transferencia de objetos grandes para interactuar con el servicio directamente.

MQTT sobre BLE

MQTT sobre BLE contiene el perfil de GATT para crear un servicio proxy de MQTT sobre BLE. El servicio proxy MQTT permite que un cliente MQTT se comunique con el intermediario AWS MQTT a través de un dispositivo de puerta de enlace. Por ejemplo, puede usar el servicio proxy para conectar un dispositivo que ejecute FreeRTOS a AWS MQTT a través de una aplicación para teléfonos inteligentes. El dispositivo BLE es el servidor del GATT y expone los servicios y las características del dispositivo de puerta de enlace. El servidor del GATT utiliza estos servicios y características expuestos para realizar operaciones de MQTT con la nube para ese dispositivo. Para obtener más detalles, consulte Apéndice A: perfil de GATT de MQTT sobre BLE .

Middleware

El middleware de Bluetooth de bajo consumo de FreeRTOS es una abstracción de las API de bajo nivel. Las API de middleware componen una interfaz más fácil de utilizar para la pila de Bluetooth de bajo consumo.

Con las API de middleware, puede registrar varias devoluciones de llamada, en varias capas, en un único evento. La inicialización del middleware de Bluetooth de bajo consumo también inicializa los servicios y comienza la publicidad.

Suscripción de devolución de llamada flexible

Supongamos que su hardware de Bluetooth de bajo consumo se desconecta y el servicio de MQTT sobre Bluetooth de bajo consumo necesita detectar la desconexión. Una aplicación que escribiera también podría necesitar detectar el mismo evento de desconexión. El middleware de Bluetooth de bajo consumo puede enrutar el evento a diferentes partes del código en el que haya registrado devoluciones de llamada, sin que la capas superiores compitan por recursos de nivel inferior.

Contenedores de bajo nivel

Los contenedores de Bluetooth de bajo consumo de FreeRTOS de bajo nivel son una abstracción de la pila de Bluetooth de bajo consumo del fabricante. Los contenedores de bajo nivel ofrecen un conjunto común de API para control directo sobre el hardware. Las API de bajo nivel optimizan el uso de RAM, pero su funcionalidad es limitada.

Utilice las API de servicio de Bluetooth de bajo consumo para interactuar con los servicios de Bluetooth de bajo consumo. Las API de servicio exigen más recursos que las API de bajo nivel.

Dependencias y requisitos

La biblioteca de Bluetooth de bajo consumo tiene las siguientes dependencias directas:

  • Biblioteca de contenedores lineales

  • Una capa de plataforma que interactúa con el sistema operativo para la administración de subprocesos, temporizadores, funciones de reloj y acceso a la red.

Diagrama de arquitectura que muestra los componentes: BLE, List/Queue, Network y Clock, con flechas direccionales que indican las interacciones.

Solo el servicio de aprovisionamiento Wi-Fi tiene dependencias de la biblioteca de FreeRTOS:

Servicio de GATT Dependencia
Aprovisionamiento Wi-Fi Biblioteca wifi

Para comunicarse con el intermediario de AWS IoT MQTT, debe tener una AWS cuenta y registrar sus dispositivos como cosas. AWS IoT Para obtener más información sobre la configuración, consulte la Guía para desarrolladores de AWS IoT.

Bluetooth de bajo consumo de FreeRTOS utiliza Amazon Cognito para la autenticación de usuarios en su dispositivo móvil. Para utilizar los servicios proxy de MQTT, debe crear una identidad y grupos de usuarios de Amazon Cognito. Cada identidad de Amazon Cognito debe tener asociada la política apropiada. Para obtener más información, consulte la Guía para desarrolladores de Amazon Cognito.

Archivo de configuración de la biblioteca

Las aplicaciones que usan el servicio de MQTT sobre Bluetooth de bajo consumo de FreeRTOS deben proporcionar un archivo de encabezado iot_ble_config.h, en el que se definen los parámetros de configuración. Los parámetros de configuración sin definir toman los valores predeterminados especificados en iot_ble_config_defaults.h.

Algunos parámetros de configuración importantes son:

IOT_BLE_ADD_CUSTOM_SERVICES

Permite a los usuarios crear sus propios servicios.

IOT_BLE_SET_CUSTOM_ADVERTISEMENT_MSG

Permite a los usuarios personalizar la publicidad y examinar los mensajes de respuesta.

Para obtener más información, consulte la Referencia de la API de Bluetooth de bajo consumo.

Optimización

Al optimizar el rendimiento de la placa, tenga en cuenta lo siguiente:

  • Las API de bajo nivel usan menos RAM, pero ofrecen una funcionalidad limitada.

  • Puede establecer el parámetro bleconfigMAX_NETWORK en el archivo de encabezado iot_ble_config.h en un valor inferior para reducir la cantidad de pila consumida.

  • Puede aumentar el tamaño de MTU a su valor máximo para limitar el almacenamiento en búfer de mensajes y hacer que el código se ejecute más rápido y consuma menos RAM.

Restricciones de uso

De forma predeterminada, la biblioteca de Bluetooth de bajo consumo de FreeRTOS establece la propiedad eBTpropertySecureConnectionOnly en TRUE, lo que coloca el dispositivo en un modo de Solo conexiones seguras. Como se especifica en Bluetooth Core Specification v5.0, Vol 3, parte C, 10.2.4, cuando un dispositivo se encuentra en modo de Solo conexiones seguras, se requiere el nivel de modo de seguridad LE 1 más alto, el nivel 4 para acceder a cualquier atributo que tenga permisos más altos que el nivel del modo de seguridad LE 1 más bajo, el nivel 1. En el nivel 4 del modo de seguridad LE 1, un dispositivo debe tener capacidades de entrada y salida para la comparación numérica.

Estos son los modos compatibles y sus propiedades asociadas:

Modo 1, nivel 1 (sin seguridad)
/* 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 )
Modo 1, nivel 2 (emparejamiento no autenticado con cifrado)
#define IOT_BLE_ENABLE_NUMERIC_COMPARISON ( 0 ) #define IOT_BLE_ENABLE_SECURE_CONNECTION ( 0 ) #define IOT_BLE_INPUT_OUTPUT ( eBTIONone )
Modo 1, nivel 3 (emparejamiento autenticado con cifrado)

Este modo no se admite.

Modo 1, nivel 4 (emparejamiento de conexiones seguras LE autenticadas con cifrado)

Este modo se admite de forma predeterminada.

Para obtener más información acerca de los modos de seguridad LE, consulte Bluetooth Core Specification v5.0, Vol 3, parte C, 10.2.1.

Inicialización

Si la aplicación interactúa con la pila de Bluetooth de bajo consumo a través de middleware, solo tiene que inicializar el middleware. El middleware se encarga de inicializar las capas inferiores de la pila.

Middleware

Inicialización del middleware

  1. Inicialice cualquier controlador de hardware de Bluetooth de bajo consumo antes de llamar a la API de middleware de Bluetooth de bajo consumo.

  2. Habilite Bluetooth de bajo consumo.

  3. Inicialice el middleware con IotBLE_Init().

    nota

    Este paso de inicialización no es necesario si está ejecutando las AWS demostraciones. El administrador de red se encarga de la inicialización de la demostración, que se encuentra en freertos/demos/network_manager.

API de bajo nivel

Si no desea utilizar los servicios de GATT de Bluetooth de bajo consumo de FreeRTOS, puede omitir el middleware e interactuar directamente con las API de bajo nivel para ahorrar recursos.

Inicialización de las API de bajo nivel

  1. Inicialice cualquier controlador de hardware de Bluetooth de bajo consumo antes de llamar a las API. La inicialización del controlador no forma parte de las API de bajo nivel de Bluetooth de bajo consumo.

  2. La API de bajo nivel de Bluetooth de bajo consumo dispone de una llamada de habilitación/deshabilitación a la pila de Bluetooth de bajo consumo para optimizar la alimentación y los recursos. Antes de llamar a las API, debe habilitar Bluetooth de bajo consumo.

    const BTInterface_t * pxIface = BTGetBluetoothInterface(); xStatus = pxIface->pxEnable( 0 );
  3. El administrador de Bluetooth contiene API que son comunes para Bluetooth de bajo consumo y Bluetooth Classic. Las devoluciones de llamada para el administrador común se deben inicializar en segundo lugar.

    xStatus = xBTInterface.pxBTInterface->pxBtManagerInit( &xBTManagerCb );
  4. El adaptador de Bluetooth de bajo consumo se adapta sobre la API común. Debe inicializar sus devoluciones de llamada de la misma forma que se inicializa la API común.

    xBTInterface.pxBTLeAdapterInterface = ( BTBleAdapter_t * ) xBTInterface.pxBTInterface->pxGetLeAdapter(); xStatus = xBTInterface.pxBTLeAdapterInterface->pxBleAdapterInit( &xBTBleAdapterCb );
  5. Registre su nueva aplicación de usuario.

    xBTInterface.pxBTLeAdapterInterface->pxRegisterBleApp( pxAppUuid );
  6. Inicialice las devoluciones de llamadas a los servidores de GATT.

    xBTInterface.pxGattServerInterface = ( BTGattServerInterface_t * ) xBTInterface.pxBTLeAdapterInterface->ppvGetGattServerInterface(); xBTInterface.pxGattServerInterface->pxGattServerInit( &xBTGattServerCb );

    Después de inicializar el adaptador de Bluetooth de bajo consumo, puede agregar un servidor de GATT. Solo puede registrar los servidor de GATT de uno en uno.

    xStatus = xBTInterface.pxGattServerInterface->pxRegisterServer( pxAppUuid );
  7. Establezca las propiedades de la aplicación solo como conexión segura y tamaño de MTU.

    xStatus = xBTInterface.pxBTInterface->pxSetDeviceProperty( &pxProperty[ usIndex ] );

Referencia de la API

Para ver una referencia completa de la API, consulte Bluetooth Low Energy API Reference.

Ejemplo de uso

Los siguientes ejemplos muestran cómo utilizar la biblioteca de Bluetooth de bajo consumo para la publicidad y la creación de nuevos servicios. Para aplicaciones de demostración de Bluetooth de bajo consumo de FreeRTOS, consulte Bluetooth Low Energy Demo Applications.

Publicidad

  1. En la aplicación, defina el UUID de la publicidad:

    static const BTUuid_t _advUUID = { .uu.uu128 = IOT_BLE_ADVERTISING_UUID, .ucType = eBTuuidType128 };
  2. A continuación, defina la función de devolución de llamada 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; }

    Esta devolución de llamada envía el UUID en el mensaje de publicidad y el nombre completo en la respuesta al examen.

  3. Abra vendors/vendor/boards/board/aws_demos/config_files/iot_ble_config.h y establezca IOT_BLE_SET_CUSTOM_ADVERTISEMENT_MSG en 1. Esto activa la devolución de llamada IotBle_SetCustomAdvCb.

Adición de un nuevo servicio

Para ver ejemplos completos de servicios, consulte freertos/.../ble/services.

  1. Cree los UUID para los descriptores y características del servicio:

    #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\ }
  2. Cree un búfer para registrar los controladores de características y descriptores.

    static uint16_t usHandlesBuffer[egattDemoNbAttributes];
  3. Cree la tabla de atributos. Para ahorrar algo de RAM, defina la tabla como una const.

    importante

    Siempre cree los atributos en orden, con el servicio como el primer atributo.

    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 ) } } };
  4. Cree una matriz de devoluciones de llamada. Esta matriz de devoluciones de llamada debe seguir el mismo orden que la matriz de la tabla descrita anteriormente.

    Por ejemplo, si vReadCounter se acciona cuando se accede a xCharCounterUUID_TYPE y vWriteCommand se acciona cuando se accede a xCharControlUUID_TYPE, defina la matriz tal y como se indica a continuación:

    static const IotBleAttributeEventCallback_t pxCallBackArray[egattDemoNbAttributes] = { NULL, vReadCounter, vEnableNotification, vWriteCommand };
  5. Cree el servicio:

    static const BTService_t xGattDemoService = { .xNumberOfAttributes = egattDemoNbAttributes, .ucInstId = 0, .xType = eBTServiceTypePrimary, .pusHandlesBuffer = usHandlesBuffer, .pxBLEAttributes = (BTAttribute_t *)pxAttributeTable };
  6. Llame a la API IotBle_CreateService con la estructura que ha creado en el paso anterior. El middleware sincroniza la creación de todos los servicios, por lo que cualquier servicio nuevo ya deberá haberse definido cuando se activa la devolución de llamada IotBle_AddCustomServicesCb.

    1. En vendors/vendor/boards/board/aws_demos/config_files/iot_ble_config.h, establezca IOT_BLE_ADD_CUSTOM_SERVICES en 1.

    2. Cree IotBle _ AddCustomServicesCb en su aplicación:

      void IotBle_AddCustomServicesCb(void) { BTStatus_t xStatus; /* Select the handle buffer. */ xStatus = IotBle_CreateService( (BTService_t *)&xGattDemoService, (IotBleAttributeEventCallback_t *)pxCallBackArray ); }

Portabilidad

Periférico de entrada y salida de usuario

Una conexión segura requiere entrada y salida para comparación numérica. El evento de eBLENumericComparisonCallback pueden registrarse con el administrador de eventos:

xEventCb.pxNumericComparisonCb = &prvNumericComparisonCb; xStatus = BLE_RegisterEventCb( eBLENumericComparisonCallback, xEventCb );

El periférico deben mostrar la clave de acceso numérica y tomar el resultado de la comparación como una entrada.

Portabilidad de implementaciones de API

Para realizar la portabilidad de FreeRTOS a un nuevo destino, debe implementar algunas API para el servicio de aprovisionamiento Wi-Fi y la funcionalidad de Bluetooth de bajo consumo.

API de Bluetooth de bajo consumo

Para utilizar el middleware de Bluetooth de bajo consumo de FreeRTOS, debe implementar algunas API.

API común entre GAP para Bluetooth Classic y GAP para Bluetooth de bajo consumo
  • pxBtManagerInit

  • pxEnable

  • pxDisable

  • pxGetDeviceProperty

  • pxSetDeviceProperty (Todas las opciones son obligatorios esperan eBTpropertyRemoteRssi y eBTpropertyRemoteVersionInfo)

  • pxPair

  • pxRemoveBond

  • pxGetConnectionState

  • pxPinReply

  • pxSspReply

  • pxGetTxpower

  • pxGetLeAdapter

  • pxDeviceStateChangedCb

  • pxAdapterPropertiesCb

  • pxSspRequestCb

  • pxPairingStateChangedCb

  • pxTxPowerCb

API específicas para GAP para Bluetooth de bajo consumo
  • pxRegisterBleApp

  • pxUnregisterBleApp

  • pxBleAdapterInit

  • pxStartAdv

  • pxStopAdv

  • pxSetAdvData

  • pxConnParameterUpdateRequest

  • pxRegisterBleAdapterCb

  • pxAdvStartCb

  • pxSetAdvDataCb

  • pxConnParameterUpdateRequestCb

  • pxCongestionCb

Servidor de 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

Para obtener más información acerca de la portabilidad de la biblioteca de Bluetooth de bajo consumo de FreeRTOS para su plataforma, consulte la sección sobre Portabilidad de Bluetooth de bajo consumo en la Guía de portabilidad de FreeRTOS.

Apéndice A: perfil de GATT de MQTT sobre BLE

Detalles del servicio GATT

MQTT sobre BLE utiliza una instancia del servicio GATT de transferencia de datos para enviar mensajes de representación concisa de objetos binarios (CBOR) de MQTT entre el dispositivo FreeRTOS y el dispositivo proxy. El servicio de transferencia de datos presenta ciertas características que ayudan a enviar y recibir datos sin procesar a través del protocolo GATT de BLE. También gestiona la fragmentación y el ensamblaje de cargas útiles superiores al tamaño de la unidad máxima de transferencia (MTU) del BLE.

UUID del servicio

A9D7-166A-D72E-40A9-A002-4804-4CC3-FF00

Instancias de servicio

Se crea una instancia del servicio GATT para cada sesión de MQTT con el agente. Cada servicio tiene un UUID único (dos bytes) que identifica su tipo. Cada instancia individual se diferencia por el ID de la instancia.

Cada servicio se instancia como un servicio principal en cada dispositivo del servidor BLE. Puede crear varias instancias del servicio en un dispositivo determinado. El tipo de servicio proxy de MQTT tiene un UUID único.

Características

Formato de contenido de característica: CBOR

Tamaño máximo del valor de la característica: 512 bytes

Característica Requisito Propiedades obligatorias Propiedades opcionales Permisos de seguridad Descripción breve UUID
Controlar M Escritura Ninguna Escritura necesita cifrado Se utiliza para iniciar y detener el proxy de MQTT. A9D7-166A-D72E-40A9-A002-4804-4CC3-FF01
TXMessage M Lectura, notificación Ninguna Lectura necesita cifrado Se utiliza para enviar una notificación que contiene un mensaje a un agente a través de un proxy. A9D7-166A-D72E-40A9-A002-4804-4CC3-FF02
RXMessage M Lectura, escritura sin respuesta Ninguna Lectura, escritura necesita cifrado Se utiliza para recibir un mensaje de un agente a través de un proxy. A9D7-166A-D72E-40A9-A002-4804-4CC3-FF03
TX LargeMessage M Lectura, notificación Ninguna Lectura necesita cifrado Se utiliza para enviar un mensaje grande (mensaje > tamaño de MTU de BLE) a un agente a través de un proxy. A9D7-166A-D72E-40A9-A002-4804-4CC3-FF04
RX LargeMessage M Lectura, escritura sin respuesta Ninguna Lectura, escritura necesita cifrado Se utiliza para enviar un mensaje grande (mensaje > tamaño de MTU de BLE) a un agente a través de un proxy. A9D7-166A-D72E-40A9-A002-4804-4CC3-FF05
Requisitos del procedimiento de GATT
Valores de característica de lectura Obligatorio
Valores largos de característica de lectura Obligatorio
Valores de característica de escritura Obligatorio
Valores largos de característica de escritura Obligatorio
Descriptores de característica de lectura Obligatorio
Descriptores de característica de escritura Obligatorio
Notificaciones Obligatorio
Indicaciones Obligatorio
Tipos de mensajes

Se intercambian los siguientes tipos de mensajes.

Tipo de mensaje Mensaje Asignación con estos pares de claves/valores
0x01 CONNECT
  • Clave = “w”, valor = Entero de tipo 0, Tipo de mensaje (1)

  • Clave = “d”, valor = Tipo 3, Cadena de texto, Identificador de cliente para la sesión

  • Clave = “a”, valor = Tipo 3, Cadena de texto, Punto de conexión de agente para la sesión

  • Clave = “c”, valor = Valor simple de tipo verdadero/falso

0x02 CONNACK
  • Clave = “w”, valor = Entero de tipo 0, Tipo de mensaje (2)

  • Clave = “s”, valor = Entero de tipo 0, Código de estado

0x03 PUBLISH
  • Clave = “w”, valor = Entero de tipo 0, Tipo de mensaje (3)

  • Clave = “u”, valor = Tipo 3, Cadena de texto, Tema para publicación

  • Clave = “n”, valor = Tipo 0, Entero, QoS para publicación

  • Clave = “i”, valor = Tipo 0, Entero, Identificador de mensaje, Solo para publicaciones de QoS 1

  • Clave = “k”, valor = Tipo 2, Cadena de bytes, Carga útil para publicación

0x04 PUBACK
  • Se envía solo para mensajes de QoS 1.

  • Clave = “w”, valor = Entero de tipo 0, Tipo de mensaje (4)

  • Clave = “i”, valor = Tipo 0, Entero, Identificador de mensaje

0x08 SUBSCRIBE
  • Clave = “w”, valor = Entero de tipo 0, Tipo de mensaje (8)

  • Clave = “v”, valor = Tipo 4, Matriz de cadenas de texto, temas para suscripción

  • Clave = “o”, valor = Tipo 4, Matriz de enteros, QoS para suscripción

  • Clave = “i”, valor = Tipo 0, Entero, Identificador de mensaje

0x09 SUBACK
  • Clave = “w”, valor = Entero de tipo 0, Tipo de mensaje (9)

  • Clave = “i”, valor = Tipo 0, Entero, Identificador de mensaje

  • Clave = “s”, valor = Tipo 0, Entero, Código de estado para suscripción

0X0A UNSUBSCRIBE
  • Clave = “w”, valor = Entero de tipo 0, Tipo de mensaje (10)

  • Clave = “v”, valor = Tipo 4, Matriz de cadenas de texto, temas para cancelación de suscripción

  • Clave = “i”, valor = Tipo 0, Entero, Identificador de mensaje

0x0B UNSUBACK
  • Clave = “w”, valor = Entero de tipo 0, Tipo de mensaje (11)

  • Clave = “i”, valor = Tipo 0, Entero, Identificador de mensaje

  • Clave = «s», valor = tipo 0, entero, código de estado para UnSubscription

0X0C PINGREQ
  • Clave = “w”, valor = Entero de tipo 0, Tipo de mensaje (12)

0x0D PINGRESP
  • Clave = “w”, valor = Entero de tipo 0, Tipo de mensaje (13)

0x0E DISCONNNECT
  • Clave = “w”, valor = Entero de tipo 0, Tipo de mensaje (14)

Características de transferencia de carga útil grande
TX LargeMessage

El dispositivo LargeMessage utiliza el TX para enviar una carga útil grande que es mayor que el tamaño de MTU negociado para la conexión BLE.

  • El dispositivo envía los primeros bytes de MTU de la carga útil como una notificación a través de la característica.

  • El proxy envía una solicitud de lectura sobre esta característica para los bytes restantes.

  • El dispositivo envía hasta el tamaño de la MTU o los bytes restantes de la carga útil, lo que sea menor. Cada vez, aumenta el desplazamiento leído en función del tamaño de la carga útil enviada.

  • El proxy seguirá leyendo la característica hasta que obtenga una carga útil de longitud cero o una carga útil inferior al tamaño de la MTU.

  • Si el dispositivo no recibe una solicitud de lectura dentro de un tiempo de espera especificado, se produce un error en la transferencia y el proxy y la puerta de enlace liberan el búfer.

  • Si el proxy no recibe una solicitud de lectura dentro de un tiempo de espera especificado, se produce un error en la transferencia y el proxy libera el búfer.

RX LargeMessage

El dispositivo LargeMessage utiliza el RX para recibir una carga útil grande que es mayor que el tamaño de MTU negociado para la conexión BLE.

  • El proxy escribe los mensajes, hasta el tamaño de la MTU, uno por uno, utilizando la función de escritura con respuesta según esta característica.

  • El dispositivo almacena el mensaje en búfer hasta que recibe una solicitud de escritura con una longitud cero o una longitud inferior al tamaño de la MTU.

  • Si el dispositivo no recibe una solicitud de escritura dentro de un tiempo de espera especificado, se produce un error en la transferencia y el dispositivo libera el búfer.

  • Si el proxy no recibe una solicitud de escritura dentro de un tiempo de espera especificado, se produce un error en la transferencia y el proxy libera el búfer.