本文以夜灯开关为例,介绍如何快速使用C Link SDK,模拟设备采用MQTT协议接入物联网平台,并通过自定义Topic上报数据至物联网平台的完整操作。
前提条件
已开通物联网平台服务。
创建产品和设备
准备开发环境
本示例的开发环境为Ubuntu 16.04,开发工具为GCC和Make。关于环境的更多说明,请参见环境说明。
安装Ubuntu 16.04。
更多信息,请参见Ubuntu。
执行以下命令,安装GCC和Make。
sudo apt-get -y install gcc make
配置设备端SDK
下载Demo文件至开发环境并解压。
物联网平台提供SDK定制功能,更多信息,请参见获取C Link SDK。
打开
./LinkSDK/demos/mqtt_basic_demo.c
文件,配置如下参数:配置设备接入信息,使设备接入物联网平台。示例代码如下:
char *product_key = "a18wP******"; char *device_name = "LightSwitch"; char *device_secret = "uwMTmVAMnGGHaAkqmeDY6cHxxB******"; char *mqtt_host = "a18wP******.iot-as-mqtt.cn-shanghai.aliyuncs.com";
参数
示例
说明
mqtt_host
a18wP******.iot-as-mqtt.cn-shanghai.aliyuncs.com
设备的接入域名。
企业版实例和新版公共实例:在实例详情页面的开发配置面板,查看接入域名。
旧版公共实例:接入域名格式为
${YourProductKey}.iot-as-mqtt.${YourRegionId}.aliyuncs.com
。
新旧版公共实例和企业版实例、以及接入域名的更多信息,请参见查看实例终端节点。
product_key
a18wP******
设备认证信息。即完成添加设备后,您保存至本地的设备证书。
您也可以在物联网平台的设备详情页查看设备的认证信息。更多信息,请参见获取设备认证信息。
device_name
LightSwitch
device_secret
uwMTmVAMnGGHaAkqmeDY6cHxxB******
配置设备订阅Topic,例如
/a18wP******/LightSwitch/user/get
,以接收来自物联网平台的消息。示例代码如下:说明如需体验该功能,您需取消该代码两边的注释符号(/**/)。
{ char *sub_topic = "/a18wP******/LightSwitch/user/get"; res = aiot_mqtt_sub(mqtt_handle, sub_topic, NULL, 1, NULL); if (res < 0) { printf("aiot_mqtt_sub failed, res: -0x%04X\n", -res); return -1; } }
参数
示例
说明
sub_topic
/a18wP******/LightSwitch/user/get
具有订阅权限的Topic,设备通过该Topic,可接收物联网平台的消息。
您可以在物联网平台的产品详情页的Topic类列表下的自定义Topic页签下,查看您的自定义Topic。更多信息,请参见什么是Topic。
本示例为默认的自定义Topic。其中:
a18wP******
为设备的ProductKey。LightSwitch
为设备的DeviceName。
配置设备用于发送信息的Topic,例如
/a18wP******/LightSwitch/user/update
,并设置要发送的信息内容。示例代码如下:说明如需体验该功能,您需取消该代码两边的注释符号(/**/)。
{ char *pub_topic = "/a18wP******/LightSwitch/user/update"; char *pub_payload = "{\"id\":\"1\",\"version\":\"1.0\",\"params\":{\"LightSwitch\":0}}"; res = aiot_mqtt_pub(mqtt_handle, pub_topic, (uint8_t *)pub_payload, (uint32_t)strlen(pub_payload), 0); if (res < 0) { printf("aiot_mqtt_sub failed, res: -0x%04X\n", -res); return -1; } }
参数
示例
说明
pub_topic
/a18wP******/LightSwitch/user/update
具有发布权限的Topic,设备通过该Topic向物联网平台发送消息。
您可以在物联网平台的产品详情页的Topic类列表下的自定义Topic页签下,查看您的自定义Topic。更多信息,请参见什么是Topic。
本示例为默认的自定义Topic。其中:
a18wP******
为设备的ProductKey。LightSwitch
为设备的DeviceName。
pub_payload
{\"id\":\"1\",\"version\":\"1.0\",\"params\":{\"LightSwitch\":0}}
上报至物联网平台的消息内容。
本示例使用自定义Topic,您可自定义消息的数据格式。
在Link SDK根目录下,执行命令
make
。生成的Demo可执行文件为
./output/mqtt-basic-demo
。
运行结果
在Link SDK根目录下,执行以下命令,运行Demo可执行文件。
./output/mqtt-basic-demo
您可以在设备端查看运行结果。
以下日志显示设备
LightSwitch
与物联网平台连接成功。[1619768570.433][LK-0313] MQTT user calls aiot_mqtt_connect api, connect [1619768570.433][LK-0317] LightSwitch&a18wP****** [1619768570.433][LK-0318] 933FE333F78F42E2AAD384F629C771277E06D459577942EA1F04ACFDFE****** core_sysdep_network_establish host a18wP******.iot-as-mqtt.cn-shanghai.aliyuncs.com port 8883, type 0 establish tcp connection with server(host='a18wP******.iot-as-mqtt.cn-shanghai.aliyuncs.com', port=[8883]) success to establish tcp, fd=3 local port: 49122 [1619768570.599][LK-1000] establish mbedtls connection with server(host='a18wP******.iot-as-mqtt.cn-shanghai.aliyuncs.com', port=[8883]) [1619768570.600][LK-1000] success to establish mbedtls connection, (cost 45134 bytes in total, max used 47870 bytes) [1619768570.644][LK-0313] MQTT connect success in 212 ms AIOT_MQTTEVT_CONNECT
以下日志显示设备
LightSwitch
订阅了Topic/a18wP******/LightSwitch/user/get
。[1620373302.144][LK-0309] sub: /a18wP******/LightSwitch/user/get
Topic订阅成功后,您可以返回物联网平台,在设备详情页面的Topic列表页签,单击订阅的Topic操作栏的发布消息,然后在发布消息对话框的消息输入栏中,输入一条消息,例如:This is a test message from Alibaba Iot Platform.,模拟从物联网平台向设备发送消息。
以下日志显示设备
LightSwitch
通过Topic/a18wP******/LightSwitch/user/update
,向物联网平台上报了一条消息。[1619768570.644][LK-0309] pub: /a18wP******/LightSwitch/user/update [LK-030A] > 7B 22 69 64 22 3A 22 31 22 2C 22 76 65 72 73 69 | {"id":"1","versi [LK-030A] > 6F 6E 22 3A 22 31 2E 30 22 2C 22 70 61 72 61 6D | on":"1.0","param [LK-030A] > 73 22 3A 7B 22 4C 69 67 68 74 53 77 69 74 63 68 | s":{"LightSwitch [LK-030A] > 22 3A 30 7D 7D
您可以在物联网平台控制台,查看设备的状态和运行日志。
左侧导航栏,选择
,找到设备,查看设备状态。设备状态显示为在线,则表示设备与物联网平台成功连接。在左侧导航栏,选择
,选择夜灯开关产品后,查看设备上线、订阅Topic和上报消息的日志。
如果在调试过程中出现错误,请参见设备端接收的错误码,根据提示解决问题。