Linux设备接入物联网平台

更新时间:
复制为 MD 格式

阿里云提供的设备端C语言SDK可以直接运行于Linux系统,并通过MQTT协议接入物联网平台。本文以在Ubuntu x86_64系统上编译设备端C语言SDK为例,介绍设备上云的配置和开发过程。

背景信息

有关设备端C语言SDK详细信息,请参见概述

创建产品和设备

  1. 登录物联网平台控制台
  2. 实例概览页签的全部环境下,找到对应的实例,单击实例卡片。

  3. 在左侧导航栏,选择设备管理 > 产品,再单击创建产品,创建一个产品。
    参数 说明
    产品名称 自定义产品名称。
    所属品类 选择自定义品类
    节点类型 选择直连设备
    连网方式 选择Wi-Fi
    数据格式 选择ICA标准数据格式(Alink JSON)
    认证方式 选择设备密钥
  4. 在左侧导航栏,选择设备,再单击添加设备,在刚创建的产品下添加设备。
    设备创建成功后,获取设备证书信息(ProductKey、DeviceNameDeviceSecret)。

定义产品物模型

物联网平台提供的设备端C SDK Demo包中,包含一个完整的物模型JSON文件。本示例中,导入该物模型文件,生成产品的物模型。

  1. 编辑物模型文件。
    1. 下载C SDK 3.2版本设备端SDK文件包。下载地址,请参见C SDK 3.2
    2. 解压SDK压缩包后,打开src/dev_model/examples目录下的model_for_examples.json文件。
    3. 将物模型JSON文件中的productKey的值替换为您在物联网平台上创建产品的ProductKey值,然后保存文件。

      {
        "schema":"https://iotx-tsl.oss-ap-southeast-1.aliyuncs.com/schema.json",
        "profile":{
          "productKey":"a1xxx"
        },
        "services":[...]
      }

  2. 在物联网平台控制台对应实例产品页,找到之前创建的产品,单击对应的查看
  3. 产品详情页面的功能定义页签下,单击编辑草稿 > 快速导入
  4. 在弹出的对话框中,选择导入物模型,上传已编辑好的物模型JSON文件,单击确定
    导入成功后,该文件定义的所有功能将显示在自定义功能列表中。
  5. 单击发布上线,将物模型发布为正式版。

配置SDK

将设备端SDK文件导入您的开发环境中,并修改配置文件中的信息为您的设备信息。

  1. SDK文件的wrappers/os/ubuntu目录下HAL_OS_linux.c文件中,修改设备证书信息为您的设备证书信息。
    #include "infra_config.h"
    #include "infra_compat.h"
    #include "infra_defs.h"
    #include "wrappers_defs.h"
    #define PLATFORM_WAIT_INFINITE (~0)
    #ifdef DYNAMIC_REGISTER
        char _product_key[IOTX_PRODUCT_KEY_LEN + 1]       = "xxx";
        char _product_secret[IOTX_PRODUCT_SECRET_LEN + 1] = "xxx";
        char _device_name[IOTX_DEVICE_NAME_LEN + 1]       = "xxx";
        char _device_secret[IOTX_DEVICE_SECRET_LEN + 1]   = "";
    #else
        #ifdef DEVICE_MODEL_ENABLED
            char _product_key[IOTX_PRODUCT_KEY_LEN + 1]       = "a1Oyxxx";
            char _product_secret[IOTX_PRODUCT_SECRET_LEN + 1] = "I5Nvxxx";
            char _device_name[IOTX_DEVICE_NAME_LEN + 1]       = "Linuxxx";
            char _device_secret[IOTX_DEVICE_SECRET_LEN + 1]   = "6a03xxx";
        #else
            char _product_key[IOTX_PRODUCT_KEY_LEN + 1]       = "xxx";
            char _product_secret[IOTX_PRODUCT_SECRET_LEN + 1] = "xxx";
            char _device_name[IOTX_DEVICE_NAME_LEN + 1]       = "xxx";
            char _device_secret[IOTX_DEVICE_SECRET_LEN + 1]   = "xxx";
        #endif
    #endif
    char _firmware_version[IOTX_FIRMWARE_VER_LEN] = "app-1.0.0-20180101.1000";
  2. 编译SDK。在SDK根目录中,执行make reconfig命令,选择3,然后make
    root@xxx:~/c-sdk-v3.0.1# make reconfig
    SELECT A CONFIGURATION:
    1) config.alios.esp8266
    2) config.alios.mk3080
    3) config.ubuntu.x86
    #? 3
  3. 测试运行SDK。
    SDK根目录中,执行./output/release/bin/linkkit-example-solo命令。执行结果如下。
    root@xxx:~/c-sdk-v3.0.1# ./output/release/bin/linkkit-example-solo
    establish tcp connection with server(host='a1Cxxx.iot-as-mqtt.cn-shanghai.aliyuncs.com', port=[1883])
    success to establish tcp, fd=3
    > {
    >     "id": "1",
    >     "version": "1.0",
    >     "params": [
    >         {
    >             "attrKey": "SYS_LP_SDK_VERSION",
    >             "attrValue": "3.0.1",
    >             "domain": "SYSTEM"
    >         },
    >         {
    >             "attrKey": "SYS_SDK_LANGUAGE",
    >             "attrValue": "C",
    >             "domain": "SYSTEM"
    >         }
    >     ],
    >     "method": "thing.deviceinfo.update"
    > }
    SDK运行成功后,可在物联网平台控制台对应实例下,进入设备对应的设备详情页面,查看设备状态和设备上报的物模型数据。