本文介绍如何快速地使用C语言的Link SDK,通过MQTT协议,实现设备与物联网平台之间连接和通信的整体操作

前提条件

已开通物联网平台服务。

说明 开通阿里云物联网平台不收费。开通后,您可以根据免费额度试用服务,试用流程,请参见物联网平台试用中心

背景信息

本文以夜灯开关为例,通过配置Link SDK,模拟设备使用MQTT协议接入物联网平台。设备通过自定义Topic,将数据上报至物联网平台

关于物联网平台的更多信息,请参见什么是物联网平台

创建产品和设备

  1. 登录物联网平台控制台,单击公共实例卡片
  2. 在左侧导航栏,选择设备管理 > 产品,单击创建产品
  3. 新建产品页面,输入产品名称:夜灯开关,所属品类选择自定义品类其他参数使用默认值,单击确认
    创建产品
  4. 在完成创建产品的页面,单击添加设备下的前往添加
  5. 设备页面,单击添加设备
  6. 添加设备对话框中,输入设备名称,例如:LightSwitch。然后,单击确认
    添加设备
  7. 添加完成对话框中,单击一键复制设备证书。将设备证书信息保存至本地备用。关于设备证书的更多信息,请参见设备证书

准备开发环境

本示例的开发环境为Ubuntu 16.04,开发工具为GCC和Make。关于环境的更多说明,请参见环境说明

  1. 安装Ubuntu 16.04。
    更多信息,请参见Ubuntu
  2. 执行以下命令,安装GCC和Make。
    sudo apt-get -y install gcc make

配置设备端SDK

  1. 下载Demo文件至开发环境并解压。
    物联网平台提供SDK定制功能,更多信息,请参见获取SDK
  2. 打开./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,您可自定义消息的数据格式。

  3. 在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 443, type 0
      establish tcp connection with server(host='a18wP******.iot-as-mqtt.cn-shanghai.aliyuncs.com', port=[443])
      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=[443])
      [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和上报消息的日志。日志消息

如果在调试过程中出现错误,请参见设备端接收的错误码,根据提示解决问题。若未能解决问题,您可以提交工单

后续步骤

  • 设备接入物联网平台后,您可以管理设备并对其进行监控运维。关于物联网平台的更多功能,请参见物联网平台产品功能

  • 使用C Link SDK配置相关高级功能,请参见SDK功能概述