固件烧录请参考腾讯云官方文档:腾讯云 IoT AT ESP8266 定制固件及说明。
AT指令详细说明也请参考其中腾讯的文档。
腾讯云配套的AT测试工具也在其中。
登录腾讯云物联网开发平台(IoT Explorer),点击“立即使用”进入控制台。
项目是为了用户面对不同的产品迭代或不同的项目角色而设计的一种隔离机制,便于用户清晰管理物联网项目,并能灵活地配置项目权限。
点击项目名称进入到该项目中,点击新建产品:
填写产品的一些信息:
数据模板是将物理实体设备进行数字化描述,构建其数字模型。在物联网开发平台定义数据模板即定义产品功能。完成功能定义后,系统将自动生成该产品的数据模板。
进入产品,点击新建功能:
功能类型包含三元素:
功能元素 | 功能描述 | 功能标识符 |
---|---|---|
属性 | 用于描述设备的实时状态,支持读取和设置,如模式、亮度、开关等。 | PropertiesId |
事件 | 用于描述设备运行时的事件,包括告警、信息和故障等三种事件类型,可添加多个输出参数,如环境传感器检测到空气质量很差,空调异常告警等。 | EventId |
行为 | 用于描述复杂的业务逻辑,可添加多个调用参数和返回参数,用于让设备执行某项定特定的任务,例如,开锁动作需要知道是哪个用户在什么时间开锁,锁的状态如何等。 | ActionId |
数据类型支持6种:
数据模板是一个 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": []
}
进入设备调试界面,新建设备:
进入设备之后即可看到对接信息。
使用USB转串口将烧录好腾讯云定制固件的ESP8266连接到PC,使用串口助手打开串口开始调试。
测试AT指令是否正常:
AT
OK
设置ESP8266工作模式为AP和STA并存:
AT+CWMODE=3
OK
设置传输模式为普通传输模式:
AT+CIPMODE=0
OK
开启多路模式:
AT+CIPMUX=1
OK
入网:
AT+CWJAP="Mculover666","mculover666"
WIFI CONNECTED
WIFI GOT IP
OK
示例:
AT+TCDEVINFOSET=1,"WDRRDCF1TE","dev1","ULtbpSxXtSQyaFyeaax6pw=="
OK
+TCDEVINFOSET:OK
此信息会保存到Flash中,可以使用下面的命令查看:
AT+TCDEVINFOSET?
+TCDEVINFOSET:1,"WDRRDCF1TE","dev1",113
OK
示例:
AT+TCMQTTCONN=1,5000,240,1,1
OK
+TCMQTTCONN:OK
连接成功,此时在腾讯云IoT Explorer平台即可看到设备在线:
Explorer平台相比IoThub平台,支持的topic比较多,主要有如下功能:
设备向云端上报数据的topic如下:
$thing/up/property/{ProductID}/{DeviceName}
$thing/down/property/{ProductID}/{DeviceName}
这两个topic咋玩呢?
首先订阅上行响应topic:
AT+TCMQTTSUB="$thing/down/property/FWR8PGACUS/ESP8266_Dev_001",0
返回结果如下:
OK
+TCMQTTSUB:OK
接着向上行请求topic上报数据,上报数据时平台不仅规定了topic,还规定了数据内容,如下:
{
"method":"report",
"clientToken":"clientToken-145023f5-bc9b-4174-ba3b-430ba5956e5c",
"params":
{
"brightness":55,
"name":"bedroom",
"power_switch":1,
"color":2
}
}
其中每一项的意义如下;
参数 | 类型 | 说明 |
---|---|---|
method | String | report 表示设备属性上报。 |
clientToken | String | 用于上下行消息配对标识 |
timestamp | Integer | 属性上报的时间 |
params | JSON | JSON 结构内为设备上报的属性值 |
所以组合出来上报数据的AT指令如下:
AT+TCMQTTPUB="$thing/up/property/FWR8PGACUS/ESP8266_Dev_001",0,"{\"method\":\"report\"\,\"clientToken\":\"clientToken-145023f5-bc9b-4174-ba3b-430ba5956e5c\"\,\"params\":{\"brightness\":55\,\"name\":\"bedroom\"\,\"power_switch\":1\,\"color\":2}}"
返回结果如下:
OK
+TCMQTTPUB:OK
同时,因为订阅了上行响应topic,所以模组会收到云端下发的响应并通过URC模式上报:
+TCMQTTRCVPUB:"$thing/down/property/FWR8PGACUS/ESP8266_Dev_001",118,"{"method":"report_reply","clientToken":"clientToken-145023f5-bc9b-4174-ba3b-430ba5956e5c","code":0,"status":"success"}"
云端响应报文整理一下格式如下:
{
"method":"report_reply",
"clientToken":"clientToken-145023f5-bc9b-4174-ba3b-430ba5956e5c",
"code":0,
"status":"success"
}
其中每一项也有具体的含义:
参数 | 类型 | 说明 |
---|---|---|
method | String | report_reply 表示云端接收设备上报后的响应报文 |
clientToken | String | 用于上下行消息配对标识 |
code | Integer | 0表示云端成功收到设备上报的属性 |
status | String | 当code非0的时候, 提示错误信息 |
在云端查看设备上报的数据:
同时在设备日志中可以查看设别上报的数据内容。
经过3.4.1节的玩法说明,后续都是一样的玩法。
云端下发控制指令的 Topic如下:
$thing/down/property/{ProductID}/{DeviceName}
$thing/up/property/{ProductID}/{DeviceName}
下面讲述如何玩。
首先订阅下发Topic:
AT+TCMQTTSUB="$thing/down/property/FWR8PGACUS/ESP8266_Dev_001",0
返回结果如下,订阅成功:
OK
+TCMQTTSUB:OK
然后在云端进入设备在线调试,修改灯的属性,然后下发控制命令:
在串口助手中可以看到设备收到了云端下发的数据,并以URC模式上报:
+TCMQTTRCVPUB:"$thing/down/property/FWR8PGACUS/ESP8266_Dev_001",156,"{"method":"control","clientToken":"clientToken-e037d04b-c3a4-4350-8d67-5c6be19b888a","params":{"name":"bedroom","power_switch":0,"color":0,"brightness":30}}"
整理一下json内容的格式,可以看到与我们期待下发的数据相对应:
{
"method":"control",
"clientToken":"clientToken-e037d04b-c3a4-4350-8d67-5c6be19b888a",
"params":
{
"name":"bedroom",
"power_switch":0,
"color":0,
"brightness":30
}
}
注意,此时设备还需要手动给平台回复内容给下发响应topic,内容格式如下:
{
"method":"control_reply",
"clientToken":"clientToken-e037d04b-c3a4-4350-8d67-5c6be19b888a",
"code":0,
"status":"success"
}
组合出来发布回应消息的AT指令如下:
AT+TCMQTTPUB="$thing/up/property/FWR8PGACUS/ESP8266_Dev_001",0,"{ \"method\":\"control_reply\"\, \"clientToken\":\"clientToken-e037d04b-c3a4-4350-8d67-5c6be19b888a\"\, \"code\":0\, \"status\":\"success\" }"
返回结果如下:
OK
+TCMQTTPUB:OK
设备从云端接收最新消息使用的 Topic如下:
$thing/up/property/{ProductID}/{DeviceName}
$thing/down/property/{ProductID}/{DeviceName}
首先订阅响应topic(之前已经订阅过,不用重复订阅)。
向请求Topic发送数据,请求内容如下:
{
"method": "get_status",
"clientToken": "123",
"type" : "report",
"showmeta": 0
}
组合一下发出的AT指令如下:
AT+TCMQTTPUB="$thing/up/property/FWR8PGACUS/ESP8266_Dev_001",0,"{ \"method\": \"get_status\"\, \"clientToken\": \"123\"\, \"type\" : \"report\"\, \"showmeta\": 0 }"
返回结果如下:
OK
+TCMQTTPUB:OK
同时设备收到了云端的响应:
+TCMQTTRCVPUB:"$thing/down/property/FWR8PGACUS/ESP8266_Dev_001",175,"{"method":"get_status_reply","clientToken":"123","code":0,"status":"success","type":"report","data":{"reported":{"brightness":55,"name":"bedroom","power_switch":1,"color":2}}}"
将其中的json内容整理格式如下,和当前设备最后一次上报数据的状态对应:
{
"method":"get_status_reply",
"clientToken":"123",
"code":0,
"status":"success",
"type":"report",
"data":
{
"reported":
{
"brightness":55,
"name":"bedroom",
"power_switch":1,
"color":2
}
}
}
设备向云端上报事件的 Topic如下:
$thing/up/event/{ProductID}/{DeviceName}
$thing/down/event/{ProductID}/{DeviceName}
首先订阅上行响应Topic:
AT+TCMQTTSUB="$thing/down/event/FWR8PGACUS/ESP8266_Dev_001",0
返回结果如下:
OK
+TCMQTTSUB:OK
接着向上行请求Topic发布消息,事件内容格式如下:
{
"method":"event_post",
"clientToken":"123",
"version":"1.0",
"eventId":"low_voltage",
"type":"alert ",
"params":
{
"Voltage":2.8
}
}
其中参数说明如下:
参数 | 类型 | 说明 |
---|---|---|
method | String | event_post 表示事件上报。 |
clientToken | String | 消息 ID,回复的消息将会返回该数据, 用于请求响应消息的对比。 |
version | String | 协议版本,默认为1.0。 |
eventId | String | 事件的 ID,在数据模板事件中定义。 |
params | String | 事件的参数,在数据模板事件中定义。 |
timestamp | Integer | 事件上报的时间,不填写该字段表示就使用事件上报本身的时间。 |
type | String | 事件类型,info 为信息,alert 为告警,fault 为故障。 |
组合出向上行请求发送的AT命令如下:
AT+TCMQTTPUB="$thing/up/event/FWR8PGACUS/ESP8266_Dev_001",0,"{ \"method\":\"event_post\"\, \"clientToken\":\"123\"\, \"version\":\"1.0\"\, \"eventId\":\"low_voltage\"\, \"type\":\"alert \"\, \"params\": { \"voltage\":2.8 } }"
返回结果如下,上报成功:
OK
+TCMQTTPUB:OK
同时收到平台发给设备的回应:
+TCMQTTRCVPUB:"$thing/down/event/FWR8PGACUS/ESP8266_Dev_001",75,"{"method":"event_reply","clientToken":"123","code":0,"status":"","data":{}}"
其中的json数据整理一下如下:
{
"method":"event_reply",
"clientToken":"123",
"code":0,
"status":"",
"data":{}
}
当应用通过云端向设备发起某个行为调用时,开发平台为设备行为的处理设定了默认的 Topic 如下:
$thing/down/action/{ProductID}/{DeviceName}
$thing/up/action/{ProductID}/{DeviceName}
首先订阅设备应用调用设备行为的Topic:
AT+TCMQTTSUB="$thing/down/action/FWR8PGACUS/ESP8266_Dev_001",0
返回结果如下:
OK
+TCMQTTSUB:OK
智能灯默认数据模板中没有……需要手动创建,新建一个行为功能:
新建之后在自定义功能这一栏即可看到:
进入设备在线调试界面,发送行为:
在串口助手中可以看到模组接收到云端的消息:
+TCMQTTRCVPUB:"$thing/down/action/FWR8PGACUS/ESP8266_Dev_001",132,"{"method":"action","clientToken":"1d603a84c71e4d1da38c2dacce27112e","actionId":"blink","timestamp":1593396804,"params":{"period":5}}"
整理一下json格式如下:
{
"method":"action",
"clientToken":"1d603a84c71e4d1da38c2dacce27112e",
"actionId":"blink",
"timestamp":1593396804,
"params":
{
"period":5
}
}
在串口助手中向设备响应行为执行结果 Topic回复响应,响应内容格式如下:
{
"method": "action_reply",
"clientToken": "1d603a84c71e4d1da38c2dacce27112e",
"code": 0,
"status": "success",
"response": {
"Code": 0
}
}
组合出发送响应的AT指令如下;
AT+TCMQTTPUB="$thing/up/action/FWR8PGACUS/ESP8266_Dev_001",0,"{ \"method\": \"action_reply\"\, \"clientToken\": \"1d603a84c71e4d1da38c2dacce27112e\"\, \"code\": 0\, \"status\": \"success\"\, \"response\": { \"Code\": 0 } }"
返回结果为:
OK
+TCMQTTPUB:OK
至此,使用ESP8266腾讯云定制固件对接腾讯云IoT Explorer平台的测试完成。