博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

  • 本系列博客学习由非官方人员 半颗心脏 潜心所力所写,仅仅做个人技术交流分享,不做任何商业用途。如有不对之处,请留言,本人及时更改。

1、esp32接入阿里云物联网平台,实现天猫精灵语音控制;
2、esp8266直连接入阿里云物联网平台,实现天猫精灵找队友零配网功能和语音控制;
3、esp32 sdk 直连接入天猫精灵IOT开放平台,实现天猫精灵找队友零配网功能和语音控制;
4、如何在天猫精灵IOT开放平台二次开发智能设备的 H5控制面板;
5、分享可商用的ESP8266 SDK连接阿里云物联网生活平台的在线远程升级OTA笔记。
6、ESP8266接入阿里生活飞燕平台国际版,实现亚马逊Alexa Echo音响语音控制。
7、阿里云物联网平台的网关-子设备理论协议说明,支持Zigbee/ble等没上云能力的设备;;

寄言


       我写过很多物联网控制的博文系列,包括微信公众号、微信小程序控制硬件,私有云对接天猫精灵服务器,抑或是硬件端 esp8266/esp32 等系列博文,这是一个一个专题是写下我们如何在阿里云物联网上全栈开发我们的应用专题,让我们无须企业账号也可以体验设备-云端-App” 的过程;让我们变得更强,一个人担任一个公司的全部职责,全栈开发物联网攻城狮前进;

       我会带领大家轻轻松松地把自己的设备接入天猫精灵,告别 “单机时代”,走进语音控制物联网时代。 有疑问请留言区留言,或者加群大伙们讨论;写总结,写博文不容易,望大家多多体谅!

  • 自带资料:
    • git 分布式管理软件的基本使用;
    • 硬件开发:乐鑫 esp8266、esp32模块一个;具备 c 语言基础 ,不需要很熟练;
    • 移动端开发:android 端具备 javavue.js 开发语言,AndroidStudio 环境;
    • 服务器端开发:php 开发,熟悉 服务器运行、部署等原理操作;

一 新建设备

在很多物联网场景中,终端设备本身没有连接互联网能力,那么数据如何上阿里云呢?

IoT物联网平台支持设备MQTT直连,也支持的设备挂载到网关上,作为网关的子设备,由网关代理接入IoT物联网平台。

这时候网关设备除了自身作为IoT网关设备(拥有身份三元组)与IoT物联网平台建立MQTT连接,收发数据,还要负责子设备的管理,包括:

  • 网关添加子设备网络拓扑关系
  • 子设备复用网关mqtt连接通道上线
  • 网关把子设备数据上报到云端
  • 网关接收指令,并转发给子设备
  • 网关上报子设备下线
  • 网关删除子设备网络拓扑关系

网关和子设备通信的协议由本地网络决定,可以是http,mqtt,ZigBee,Modbus,BLE等,这部分逻辑由网关实现,IoT SDK不包含这部分功能。

1.创建网关产品

创建网关产品时,需要选择节点类型:网关,即指可以挂载子设备的直连设备。网关可以管理子设备、可以维持与子设备的拓扑关系,并将该拓扑关系同步到云端。

2.创建子设备产品

这里我选择为标准品类,Alink JSON协议:

二 协议

网关连接阿里云物联网协议和普通设备连接上云的协议一致,就是对三元组计算得到MQTT的连接参数,这里不再累赘!

2.1 网关绑定子设备

  • 发布topic:/sys/${网关productKey}/${网关deviceName}/thing/topo/add
  • 订阅topic:/sys/${网关productKey}/${网关deviceName}/add_reply
  • 推荐使用在线加密网址:http://tools.jb51.net/password/hash_encrypt ,加密密钥为子设备的deviceScrect,而明文组成形式为:deviceNameproductKeytimestamp,比如下面这个:
deviceNameDevice01productKeya1bMLJS7Lxstimestamp1524448722000
  • 最后得到payload:
{
  "id": "123",
  "version": "1.0",
  "params": [
    {
      "deviceName": "Device01",
      "productKey": "a1bMLJS7Lxs",
      "sign": "aa2eb49753b7cbbcfda5a425623cc5190aXXXXXX",
      "signmethod": "hmacSha1",
      "timestamp": "1524448722000"
    }
  ],
  "method": "thing.topo.add"
}

在这里插入图片描述

2.2 网关替子设备上线

  • 发布topic:/sys/${网关productKey}/${网关deviceName}/thing/topo/add
  • 订阅topic:/ext/${网关productKey}/${网关deviceName}/combine/login_reply
  • 推荐使用在线加密网址:http://tools.jb51.net/password/hash_encrypt ,加密密钥为子设备的deviceScrect,而明文组成形式为:clientIddeviceNameproductKeytimestamp,比如下面这个:
clientId123deviceNameDevice01productKeya1bMLJS7Lxstimestamp1524448722000
  • 最后得到payload:
{
  "id": "123",
  "params": {
     "deviceName": "Device01",
     "productKey": "a1bMLJS7Lxs",
     "clientId":"xuhong",
     "timestamp": "1596124085",
     "sign": "12d0a20622c466e71a05d079defac13e",
     "signMethod": "hmacmd5",
     "cleanSession": "true"
  }
}

2.3 子设备上报数据

  • 由于子设备没有网络环境上报数据,所以这项操作由网关替子设备上报数据,上报数据的格式与普通设备的协议一致!

  • 发布topic:/sys/${子设备productKey}/${子设备deviceName}/thing/event/property/post

  • 订阅topic:/sys/${子设备productKey}/${子设备deviceName}/thing/event/property/post_reply

  • 比如Alink协议上报属性WaterLeachState为1,BatteryLevel数值为68,则 最后得到 payload

{
  "id": "123",
  "method": "thing.event.property.post",
  "params": {
     "WaterLeachState": 1,
     "BatteryLevel": 68
  }
}

https://img-blog.csdnimg.cn/20200731151720103.png

2.4 子设备接收数据

  • 由于子设备没有网络环境接收数据,所以这项操作由网关替子设备接收数据,接收数据的格式与普通设备的协议一致!

  • 云端发布topic:/${子设备productKey}/${子设备deviceName}/user/get

  • 订阅topic:/${子设备productKey}/${子设备deviceName}/user/get

  • 内容可以自定义,比如这样 payload

{
  "error": 123
}

2.5 子设备下线

  • 由于子设备没有网络环境,所以这项操作由网关替子设备完成表示下线:
  • 发布topic:/ext/session/${网关productKey}/${网关deviceName}/combine/logout
  • 订阅topic:/ext/session/${网关productKey}/${网关deviceName}/combine/logout_reply
{
  "id": 123,
  "params": {
    "productKey": "子设备的productKey",
    "deviceName": "子设备的deviceName"
  }
}
  • 然后,你会在订阅topic下,收到下面消息,表示子设备下线成功!
{"code":200,"data":{"productKey":"a1bMLJS7Lxs","deviceName":"Device01"},"id":"123","message":"success"}

2.6 网关解绑子设备

  • 子设备网络拓扑删除功能;
  • 发布topic:/sys/${网关productKey}/${网关deviceName}/thing/topo/delete
  • 订阅topic:/sys/${网关productKey}/${网关deviceName}/thing/topo/delete_reply
{
  "id": "123",
  "version": "1.0",
  "params": [
    {
    "productKey": "子设备的productKey",
    "deviceName": "子设备的deviceName"
    }
  ],
  "method": "thing.topo.delete"
}
  • 然后,你在云端发现解绑成功了,同时会在订阅topic下,收到下面消息:
{"code":200,"data":[{"productKey":"解绑成功的子设备的productKey","deviceName":"解绑成功的子设备deviceName"}],"id":"123","message":"success","method":"thing.topo.delete","version":"1.0"}
  • 共勉!