本文为您介绍如何使用MQTT-TCP接入物联网平台。
前提条件
启用TCP接入:
2023年10月后创建的实例:设备使用TCP接入的安全风险非常高,新建的企业版实例默认关闭TCP接入方式。
2023年10月前创建的实例:保持兼容,默认启用TCP接入。
获取C Link SDK。在SDK定制页面的连接物联网平台协议区域,选中MQTT 3.1.1复选框。
已获取设备认证信息。设备使用物联网平台颁发的设备证书进行认证,具体操作,请参见获取设备认证信息。
背景信息
(推荐)使用MQTT-TLS方式将设备接入物联网平台,可以保证数据传输的安全。
(不推荐)使用MQTT-TCP接入物联网平台。对于部分资源受限的设备使用TLS接入会导致资源消耗增加,因此只能使用TCP方式接入。但使用TCP方式接入,会导致非常大的安全风险,而且不支持使用动态注册、设备分发、安全隧道、远程登录等功能,您需要自行承担MQTT-TCP接入的风险和后果。
LinkSDK的移植与是否开启TCP接入无关,移植步骤请参见SDK移植参考。
对于资源受限设备的OTA升级,建议使用MQTT-OTA方式,使用方法请参见示例三:MQTT协议下载单个文件的OTA升级。
操作步骤
裁剪TLS库
裁剪mbedtls库:在LinkSDK根目录,执行以下命令,删除
external/mbedtls
库。rm -rf external/mbedtls/
关闭TLS库调用:打开
core/sysdep/core_adapter.c
文件,将#define CORE_ADAPTER_MBEDTLS_ENABLED
注释。/* * CORE_ADAPTER_MBEDTLS_ENABLED 不是一个用户需要关心的编译开关 * * 大多数情况下, 就保持它如下的设置即可 * 只有少数时候, SDK的用户关心对接层代码的ROM尺寸, 并且也没有选择用TLS连接服务器 * 那时才会出现, 将 CORE_ADAPTER_MBEDTLS_ENABLED 宏定义关闭的改动, 以减小对接尺寸 * * 我们不建议去掉 #define CORE_ADAPTER_MBEDTLS_ENABLED 这行代码 * 虽然物联网平台接收TCP方式的连接, 但我们不推荐这样做, TLS是更安全的通信方式 * */ //#define CORE_ADAPTER_MBEDTLS_ENABLED
应用说明
以MQTT基础接入示例(mqtt_basic_demo.c)为例介绍使用方法,其它示例与该示例修改方法相同。
替换设备信息
/* TODO: 替换为自己的设备证书 */ char *product_key = "${YourProductKey}"; char *device_name = "${YourDeviceName}"; char *device_secret = "${YourDeviceSecret}";
替换接入点信息
char *mqtt_host = "${YourInstanceId}.mqtt.iothub.aliyuncs.com";
使用TCP接入
/* TODO: 如果以下代码不被注释, 则例程会用TCP而不是TLS连接阿里云物联网平台 */ /* { memset(&cred, 0, sizeof(aiot_sysdep_network_cred_t)); cred.option = AIOT_SYSDEP_NETWORK_CRED_NONE; } */
运行日志
编译&运行
make -j ./output/mqtt-basic-demo
TCP建连
establish tcp connection with server(host='iot-********.mqtt.iothub.aliyuncs.com', port=[443]) success to establish tcp, fd=5 local port: 54461
MQTT建连
[1695887193.832][LK-0313] MQTT connect success in 137 ms AIOT_MQTTEVT_CONNECT
文档内容是否对您有帮助?