通信协议选择与适配
Tiny中支持MQTT、LWM2M、CoAP、mbedtls、LwIP全套IoT互联互通协议栈,以下主要介绍MQTT、LWM2M、CoAP这三种协议。
术语名称 |
描述 |
---|---|
MQTT |
MQTT(Message Queue Telemetry Transport)是一个物联网传输协议,被设计用于轻量级的发布/订阅式消息传输,旨在为低带宽和不稳定的网络环境中的物联网设备提供可靠的网络服务。MQTTS指MQTT+SSL/TLS,在MQTTS中使用SSL/TLS协议进行加密传输。 |
CoAP |
受约束的应用协议CoAP(Constrained Application Protocol)是一种软件协议,旨在使非常简单的电子设备能够在互联网上进行交互式通信。CoAPS指CoAP over DTLS,在CoAPS中使用DTLS协议进行加密传输。 |
LwM2M |
LwM2M(lightweight Machine to Machine)是由OMA(Open Mobile Alliance)定义的物联网协议,主要使用在资源受限(包括存储、功耗等)的NB-IoT终端。 |
mbedtls |
mbedTLS(前身PolarSSL)是面向嵌入式系统,实现的一套易用的加解密算法和SSL/TLS库。mbedTLS系统开销极小,对于系统资源要求不高。mbedTLS是开源项目,并且使用Apache 2.0许可证,使得用户既可以将mbedTLS使用在开源项目中,也可以应用于商业项目。目前使用mbedTLS的项目很多,例如Monkey HTTP Daemon,LinkSYS路由器。 |
云服务抽象层API
端云互通组件是IoT Device SDK Tiny中的重要组件,提供端云协同能力和基于MQTT、LwM2M、CoAP协议对接华为云的开放API。
支持MQTT/ LwM2M/CoAP协议、MQTT/ LwM2M协议模组或内置对接华为云模组来对接华为云的开发者,无需关注对接华为云物联网协议的实现细节,仅仅需要将所选择的物联网协议注册到云服务抽象层(OC AL),再调用OC AL提供的抽象层接口即可。
- OC-MQTT
OC AL提供的基于MQTT协议抽象层接口代码目录为:…\iot_link\oc\oc_mqtt,OC AL提供的MQTT协议端云互通API请参考最新的oc_mqtt_al.h文件,API接口具体如下:
目录
描述
…/oc_mqtt_al
适配华为OC服务的MQTT抽象层。通过注册机制,最终调用到用户注册的函数
…/oc_mqtt_tiny_v5
SDK内置的soft类设备适配华为OC服务的MQTT的具体实现(针对云端V5版本接口)。
…/oc_mqtt_profile_v5
SDK内置的基于物模型的接口,解析了topic,定义了相关的数据格式
- OC-LwM2M
OC AL提供的基于LwM2M协议抽象层接口代码目录为:…\iot_link\oc\oc_lwm2m, OC AL提供的基于LwM2M协议端云互通API参考oc_lwm2m_al.h文件,API接口具体如下:
目录
描述
…/oc_lwm2m_al
华为云服务OC LwM2M的抽象层接口及实现。通过注册,最终调用底层的适配函数
…/atiny_lwm2m
SDK内置的soft类设备适配华为OC服务的LwM2M的具体实现。通过抽象层提供的oc_lwm2m_register注册函数,将相关功能注册到SDK中
…/oc_lwm2m_imp/boudica150
SDK内置的boudica150适配华为OC服务的LwM2M的具体实现。通过抽象层提供的oc_lwm2m_register注册函数,将相关功能注册到SDK中
- OC-CoAP
OC AL提供的基于CoAP协议抽象层接口代码目录为:…\iot_link\oc\oc_coap,OC AL提供的基于CoAP协议端云互通API参考oc_coap_al.h文件,API接口具体如下:
目录
描述
…/oc_coap_al
华为云服务OC LwM2M的抽象层接口及实现。通过注册,最终调用底层的适配函数
…/atiny_coap
SDK内置的soft类设备适配华为OC服务的CoAP的具体实现。通过抽象层提供的oc_coap_register注册函数,将相关功能注册到SDK中
物联组件协议层
IoT Device SDK Tiny集成了LwM2M、CoAP、MQTT等物联网标准协议,您可以直接调用已实现协议,或添加自定义协议,将其注册进SDK中。其协议层目录为:…\network\。
- MQTT AL
根据MQTT标准协议,IoT Device SDK Tiny提供的MQTT服务都是建立在标准的MQTT协议基础上,并提供MQTT协议抽象层接口。适配MQTT的软件结构示意图如下:
typedef struct { ///< connect to the server void* (* connect) (mqtt_al_conpara_t *param); ///< disconnect from the server int (* disconnect)(void *handle ); ///< publish a message to the server int (* publish) (void *handle, mqtt_al_pubpara_t *msg); ///< subscribe a topic to the server int (* subscribe) (void *handle, mqtt_al_subpara_t *subpara); ///< unsubscribe a topic to the server int (* unsubscribe) (void *handle, mqtt_al_unsubpara_t *unsubpara); ///< check the mqtt engine status en_mqtt_al_connect_state (* check_status) (void *handle); }mqtt_al_op_t; int mqtt_al_install(mqtt_al_op_t *op);
表2 MQTT抽象层接口 接口分类
接口名
说明
MQTT相关接口
void * mqtt_al_connect( mqtt_al_conpara_t *conparam)
请求连接
int mqtt_al_disconnect(void *handle)
断开连接
int mqtt_al_publish(void *handle, mqtt_al_pubpara_t *pubpara)
发布消息
int mqtt_al_subscribe(void *handle, mqtt_al_subpara_t *subpara)
订阅请求
int mqtt_al_unsubscribe(void *handle, mqtt_al_unsubpara_t *unsubpara)
取消订阅
en_mqtt_al_connect_state mqtt_al_check_status(void *handle)
检查连接状态
- LWM2M AL
根据LwM2M标准协议,IoT Device SDK Tiny提供的LwM2M服务都是建立在标准的LwM2M协议基础上,并提供LwM2M协议抽象层接口。适配LwM2M的软件结构示意图如下:
typedef struct { /* lwm2m config, prepare endpoint name and message deal callback */ int (*config)(void **handle, lwm2m_al_init_param_t *init_param); /* lwm2m deinit */ int (*deconfig)(void *handle); /* lwm2m add object */ int (*add_object)(void *handle, int object_id, int object_instance_id, int resource_id, void *param); /* lwm2m delete object */ int (*delete_object)(void *handle, int object_id); /* lwm2m connect */ int (*connect)(void *handle); /* lwm2m disconnect */ int (*disconnect)(void *handle); /* lwm2m send */ int (*send)(void *handle, lwm2m_al_send_param_t *send_param); } lwm2m_al_op_t;
表3 LWM2M 抽象层接口 接口分类
接口名
说明
LWM2M相关接口
int (*config)(void **handle, lwm2m_al_init_param_t *init_param);
配置初始化
int (*deconfig)(void *handle);
取消初始化
int (*add_object)(void *handle, int object_id, int object_instance_id, int resource_id, void *param);
添加对象
int (*delete_object)(void *handle, int object_id);
删除对象
int (*connect)(void *handle);
请求连接
int (*disconnect)(void *handle);
断开连接
int (*send)(void *handle, lwm2m_al_send_param_t *send_param);
发送
- COAP AL
根据COAP标准协议,IoT Device SDK Tiny提供的COAP服务都是建立在标准的COAP协议基础上,并提供COAP协议抽象层接口。适配CoAP的软件结构示意图如下:
typedef struct { ///< coap init, prepare context, session, etc int (* init) (coap_al_initpara_t *initparam); ///< coap deinit int (* deinit) (void *handle); ///< coap add option void* (* add_opt) (coap_al_optpara_t *optparam); ///< new coap request void* (* request) (coap_al_reqpara_t *reqparam); ///< send a request to server int (* send) (coap_al_sndpara_t *sndparam); ///< recv and handle response from server int (* recv) (coap_al_rcvpara_t *rcvparam); }coap_al_op_t; int coap_al_install(coap_al_op_t *op);
相关适配接口介绍:
接口分类
接口名
说明
CoAP相关接口
int coap_al_init(coap_al_initpara_t *initparam);
初始化
int coap_al_deinit(void *handle);
取消初始化
void *coap_al_add_option(coap_al_optpara_t *optparam);
添加CoAP选项
void *coap_al_new_request(coap_al_reqpara_t *reqparam);
创建新的消息请求
int coap_al_send(coap_al_sndpara_t *sndparam);
发送消息给服务器
int coap_al_recv(coap_al_rcvpara_t *rcvparam);
接收并处理服务器下发的数据
int coap_al_install(coap_al_op_t *op);
将协议栈注册到系统中
int coap_al_uninstall();
取消注册