阿里云物联网平台提供设备端SDK,设备使用SDK与平台建立通信。本文示例使用平台提供的样例程序fota_posix_demo.c,模拟设备接入和OTA升级。

前提条件

已创建产品和设备,并获取设备证书(ProductKey、DeviceName和DeviceSecret)。具体操作,请参见创建产品创建设备

本示例需要创建两个设备SDevice1SDevice2

背景信息

  • 本文使用Linux下的设备端C语言SDK。该SDK的编译环境推荐使用64位的Ubuntu16.04。
  • SDK的开发编译环境会用到以下软件:

    make(4.1及以上版本)、gcc(5.4.0及以上版本)。

    可以使用如下命令行安装:

    sudo apt-get install -y build-essential make gcc

操作步骤

  1. 获取设备端C语言SDK。
    1. 登录物联网平台控制台
    2. 在控制台左上方,选择物联网平台所在地域,然后在实例概览页面,单击实例。
    3. 在左侧导航栏单击文档与工具,然后在设备接入SDK区域的Link SDK下,单击SDK定制
    4. 高级能力下,单击OTA,其他参数使用默认配置,然后单击开始生成,将SDK的ZIP文件保存至本地。
      获取SDK
  2. 解压本地的C语言SDK文件,修改/LinkSDK/demos/fota_posix_demo.c文件中的设备接入信息。
    此处修改为设备SDevice1的信息。
    char *product_key       = "g18***";
    char *device_name       = "SDevice1";
    char *device_secret     = "cefbebf00***";
    ...
    ...
    char  *url = "iot-***.mqtt.iothub.aliyuncs.com";
    参数 示例 说明
    url iot-***.mqtt.iothub.aliyuncs.com 设备的接入域名。
    • 企业版实例和新版公共实例:在实例详情页面的开发配置面板,查看接入域名。
    • 旧版公共实例:接入域名格式为${YourProductKey}.iot-as-mqtt.${YourRegionId}.aliyuncs.com

    新旧版公共实例和企业版实例、以及接入域名的更多信息,请参见实例管理

    product_key g18***

    设备认证信息。更多信息,请参见获取设备认证信息

    本例程的身份认证方式为一机一密。

    device_name SDevice1
    device_secret cefbebf00***
    fota_posix_demo.c文件中已提供设备进行OTA升级的代码示例,OTA升级前设备上报的版本号为1.0.0。在实际业务中,您需从设备的配置区获取实际的版本号,并执行编写代码。更多信息,请参见示例代码说明
        cur_version = "1.0.0";
        res = aiot_ota_report_version(ota_handle, cur_version);
        if (res < STATE_SUCCESS) {
            printf("aiot_ota_report_version failed: -0x%04X\r\n", -res);
        }
  3. 登录Linux虚拟机,执行以下命令,安装所需软件。
    sudo apt-get install -y build-essential make gcc
  4. 步骤2中的已修改完成的LinkSDK文件,上传至Linux虚拟机的开发环境。
  5. 在SDK根目录/LinkSDK下,执行make命令,完成样例程序的编译。
    make clean
    make

    生成的样例程序fota-posix-demo存放在./output目录下。

  6. 执行以下命令,运行样例程序。
    ./output/fota-posix-demo
  7. 查看设备运行日志和状态。
    • 设备连接信息和上报版本号日志如下。运行日志
    • 返回物联网平台控制台对应实例下,在左侧导航栏选择设备管理 > 设备,找到目标设备,查看设备状态。设备状态显示为在线,则表示设备与物联网平台成功连接。设备在线
  8. 参照以上步骤,开发设备SDevice2,上报OTA模块版本号2.0.0。
    1. 参照步骤1,获取SDK的ZIP文件。
    2. 解压ZIP文件,在/LinkSDK/demos/fota_posix_demo.c文件中,修改SDevice2的接入信息和OTA模块版本号。
      代码示例如下:
      char *product_key       = "g18***";
      char *device_name       = "SDevice2";
      char *device_secret     = "8b2ada9a0***";
      ...
      ...
      char  *url = "iot-***.mqtt.iothub.aliyuncs.com";
      ...
      ...
      cur_version = "2.0.0";
          res = aiot_ota_report_version(ota_handle, cur_version);
          if (res < STATE_SUCCESS) {
              printf("aiot_ota_report_version failed: -0x%04X\r\n", -res);
          }
    3. 参照步骤3~步骤7,查看设备SDevice2成功上报高版本号。
      设备2日志

后续步骤

推送OTA升级包到设备端:物联网平台下发OTA升级任务到设备,在线设备获取升级信息,进行OTA升级。