使用 TencentOS tiny 对接腾讯云IoT Explorer(以智能灯为例)

1. 腾讯云IoT Explorer平台

腾讯云物联网开发平台(IoT Explorer)为各行业的设备制造商、方案商及应用开发商提供一站式设备智能化服务。平台提供海量设备连接与管理能力及小程序应用开发能力,并打通腾讯云基础产品及 AI 能力,提升传统行业设备智能化的效率,降低用户的开发运维成本,助力用户业务发展。

2. 云端配置

登录腾讯云物联网开发平台(IoT Explorer),点击“立即使用”进入控制台。

2.1. 新建项目

项目是为了用户面对不同的产品迭代或不同的项目角色而设计的一种隔离机制,便于用户清晰管理物联网项目,并能灵活地配置项目权限。

  • 项目下可以建立多个产品与应用,应用默认有权限访问该项目下的所有产品
  • 每个项目会有自己的唯一 ID,数据会根据项目进行隔离,以确保数据安全;
  • 项目删除后,该项目所属产品等数据都将被删除且不能恢复;
  • 开发平台提供资源级的权限控制,可为不同的子用户分配项目级、产品级的权限控制;

点击新建项目,填写项目名称和简介:

2.2. 产品开发

2.2.1. 新建产品

点击项目名称进入到该项目中,点击新建产品:

填写产品的一些信息:

  • 产品名称:名称为中文、字母、数字、下划线的组合,1 - 20位且不能为空。
  • 产品品类:选择您所创建产品的所属品类,不同类型产品的属性、事件等数据模板会有所不同。详情请参见 数据模板。
  • 设备类型:设备使用2G/3G/4G/Wi-Fi无线通信或有线通信方式,网关可提供云端通信能力,帮助设备与平台通信。
  • 认证方式:物联网开发平台提供两种认证方式用于设备与平台之间鉴权认证。
    • 证书认证:在创建设备时,平台将为设备生成一个证书文件和一个私钥文件,实现设备与云之间的双向认证。
    • 密钥认证:在创建设备时,使用平台为设备随机生成的 PSK。
  • 通信方式:您可以选择 Wi-Fi、移动蜂窝(2G/3G/4G)和其他通信方式。
  • 数据协议:默认采用数据模板的数据协议,您也可以自定义协议进行透传。
  • 描述:字数不能超过80个,您可以根据需要选填。

产品新建成功后,可在产品列表页查看到“智能灯”。

2.2.2. 数据模板

数据模板是将物理实体设备进行数字化描述,构建其数字模型。在物联网开发平台定义数据模板即定义产品功能。完成功能定义后,系统将自动生成该产品的数据模板。

进入产品,点击新建功能:


填写功能信息。

功能类型包含三元素:

  • 属性:包括布尔型、整数型、字符型、浮点型、枚举型和时间型等6种基本数据类型;
  • 事件:包括告警、故障和信息三种类型,事件型功能属性可以添加具体的事件参数,这些参数可以由属性中6种基本数据类型组成;
  • 行为:用于实现更复杂的业务逻辑,可包含输入参数和输出参数,可用于让设备执行某项特定的任务。行为的输入参数和输出参数可添加上述6种属性的基本数据类型。
功能元素功能描述功能标识符
属性用于描述设备的实时状态,支持读取和设置,如模式、亮度、开关等。PropertiesId
事件用于描述设备运行时的事件,包括告警、信息和故障等三种事件类型,可添加多个输出参数,如环境传感器检测到空气质量很差,空调异常告警等。EventId
行为用于描述复杂的业务逻辑,可添加多个调用参数和返回参数,用于让设备执行某项定特定的任务,例如,开锁动作需要知道是哪个用户在什么时间开锁,锁的状态如何等。ActionId

数据类型支持6种:

  • 布尔型:非真即假的二值型变量。例如,开关功能。
  • 整数型:可用于线性调节的整数变量。例如,空调的温度。
  • 字符型:以字符串形式表达的功能点,例如,灯的位置。
  • 浮点型:精度为浮点型的功能点。例如,压力值的范围:0.0 - 24.0。
  • 枚举型:自定义的有限集合值。例如,灯的颜色:白色、红色、黄色等。
  • 时间型:string 类型的 UTC 时间戳(毫秒)。

选择“智能灯”类型后,系统会自动生成标准功能:

数据模板是一个 JSON 格式的文件,使用数据模板协议,用户的设备需按数据模板定义要求传输设备数据到云端,并可使用基于数据模板的诸多业务功能,点击查看json可以看到上面创建功能的json格式:

{
  "version": "1.0",
  "properties": [
    {
      "id": "power_switch",
      "name": "电灯开关",
      "desc": "控制电灯开灭",
      "required": true,
      "mode": "rw",
      "define": {
        "type": "bool",
        "mapping": {
          "0": "关",
          "1": "开"
        }
      }
    },
    {
      "id": "color",
      "name": "颜色",
      "desc": "灯光颜色",
      "mode": "rw",
      "define": {
        "type": "enum",
        "mapping": {
          "0": "Red",
          "1": "Green",
          "2": "Blue"
        }
      }
    },
    {
      "id": "brightness",
      "name": "亮度",
      "desc": "灯光亮度",
      "mode": "rw",
      "define": {
        "type": "int",
        "unit": "%",
        "step": "1",
        "min": "0",
        "max": "100",
        "start": "1"
      }
    },
    {
      "id": "name",
      "name": "灯位置名称",
      "desc": "灯位置名称:书房、客厅等",
      "mode": "rw",
      "required": false,
      "define": {
        "type": "string",
        "min": "0",
        "max": "64"
      }
    }
  ],
  "events": [
    {
      "id": "status_report",
      "name": "DeviceStatus",
      "desc": "Report the device status",
      "type": "info",
      "required": false,
      "params": [
        {
          "id": "status",
          "name": "running_state",
          "desc": "Report current device running state",
          "define": {
            "type": "bool",
            "mapping": {
              "0": "normal",
              "1": "fault"
            }
          }
        },
        {
          "id": "message",
          "name": "Message",
          "desc": "Some extra message",
          "define": {
            "type": "string",
            "min": "0",
            "max": "64"
          }
        }
      ]
    },
    {
      "id": "low_voltage",
      "name": "LowVoltage",
      "desc": "Alert for device voltage is low",
      "type": "alert",
      "required": false,
      "params": [
        {
          "id": "voltage",
          "name": "Voltage",
          "desc": "Current voltage",
          "define": {
            "type": "float",
            "unit": "V",
            "step": "1",
            "min": "0.0",
            "max": "24.0",
            "start": "1"
          }
        }
      ]
    },
    {
      "id": "hardware_fault",
      "name": "Hardware_fault",
      "desc": "Report hardware fault",
      "type": "fault",
      "required": false,
      "params": [
        {
          "id": "name",
          "name": "Name",
          "desc": "Name like: memory,tf card, censors ...",
          "define": {
            "type": "string",
            "min": "0",
            "max": "64"
          }
        },
        {
          "id": "error_code",
          "name": "Error_Code",
          "desc": "Error code for fault",
          "define": {
            "type": "int",
            "unit": "",
            "step": "1",
            "min": "0",
            "max": "2000",
            "start": "1"
          }
        }
      ]
    }
  ],
  "profile": {
    "ProductId": "FWR8PGACUS",
    "CategoryId": "3"
  },
  "actions": []
}

2.3. 创建测试设备

在【设备调试】页面中,单击【新建设备】,设备名为 dev001:

3. 设备侧操作

TencentOS tiny项目工程中包含了explorer的demo工程,进入

TencentOS-tiny\board\TencentOS_tiny_EVB_MX_plus\KEIL\qcloud_iot_explorer_sdk_data_template

目录,双击TencentOS_tiny.uvprojx,用mdk打开Demo工程。

3.2. 配置端云对接信息

修改HAL_Device_tencentos_tiny.c文件,在

TencentOS-tiny\components\connectivity\qcloud-iot-explorer-sdk\port\TencentOS_tiny

目录中:

将上图红色线框中的数据分别替换为控制台 “设备详情页” 中的参数并保存。

  • 产品 ID: 将控制台的产品 ID ,复制到上图 sg_product_id。
  • 设备名称: 将控制台的设备名称,复制到上图 sg_device_name。
  • 设备密钥:将控制台的设备密钥,复制到上图sg_device_secret。

3.3. 配置WIFI信息

修改entry.c,这里esp8266_join_ap函数的入参,填写用户自己的wifi热点名字及密码。

将esp8266模组插入到开发板模组接口上。

编译,下载程序到开发板中,复位开发板开始运行,可以在串口助手中查看打印信息。

4.查看设备状态

  1. 保持 light Demo 程序为运行状态。

  2. 进入【控制台】>【产品开发】>【设备调试】,可查看到设备 “dev001” 的状态为“上线”状态,表示 Demo 程序已成功连接上开发平台。

  1. 单击【查看】,可进入设备详情页。


单击每个属性历史数据即可查看图表:

5. 下发控制指令

在串口助手中可以看到设备在等待平台下发控制指令:

在云端平台进入设备在线调试,下发控制指令:

可以看到设备收到后在串口打印:

同时可以看到设备的OLED屏幕上显示也已变化:

6. 设备行为调用

在云端的数据模板中手动新建一个设备行为功能:

data_template_sample.c文件中使能Action:

重新,编译下载,按复位运行。

在云端下发设备行为调用:

在串口助手中可以看到设备行为被调用:

7. 设备事件调用

修改config.h文件,开启事件支持:

修改data_template_sample.c文件,开启事件上报示例:

编译程序,下载到开发板中,复位。

在串口助手中可以看到设备上报事件的日志:

在平台端可以看到设备上报事件的日志:

Mculover666 CSDN认证博客专家 嵌入式软件开发 IoT全栈开发
CSDN博客专家,微信公众号mculover666,凭借与生俱来的热爱专注于嵌入式领域,在自己折腾的同时,以文字的方式分享所玩、所思、所想、所悟,作为一个技术人,我们一起前进~
©️2020 CSDN 皮肤主题: 成长之路 设计师:Amelia_0503 返回首页