Espressif IOT Demo
Smart Light/Plug/Sensor
Version 1.3
Espressif Systems IOT Team
Copyright ? 2016
免责申明和版权公告
本?文中的信息,包括供参考的 URL 地址,如有变更,恕不另?行通知。
?文档 “按现状” 提供,不负任何担保责任,包括对适销性、适?用于特定?用途或?非侵权性的任何担保,和任何提案、规格或样品在他处提到的任何担保。本?文档不负任何责任,包括使?用本?文档内信息产?生的侵犯任何专利权?行为的责任。本?文档在此未以禁?止反?言或其他?方式授予任何知识产权使?用许可,不管是明?示许可还是暗?示许可。
Wi-Fi 联盟成员标志归 Wi-Fi 联盟所有。
?文中提到的所有商标名称、商标和注册商标均属其各?自所有者的财产,特此声明。
版权归? 2016 乐鑫信息科技(上海)有限公司所有。保留所有权利。
Table of Content
...............................................................................................................
1.前?言 5
...............................................................................................................
2.概述 5
..................................................................................................
2.1.代码结构 5
..................................................................................................
1."usr"??目录 5
...........................................................................................
2. "include"??目录 5
...........................................................................................
3."driver"?文件夹 6
..................................................................................................
4.?工作模式 6
..................................................................................................
2.2.调试?工具 6
..........................................................................
1.curl 指令使?用的常?见错误 6
....................................................................................................
3.局域??网功能7
..................................................................................................
3.1.通?用功能 7
...........................................................................................
1.查询版本信息 7
...........................................................................................
2.设置连接参数 7
3.WiFi 连接与?工作模式的切换 9
.....................................................................
3.2.局域??网内查找 ESP8266 10
.........................................................................
3.3.智能插座 11
................................................................................................
1.查询插座状态 11
.........................................................................................
2.设置插座状态 11
.........................................................................................
3.4.智能灯 11
....................................................................................................
1.查询灯的状态 11
.........................................................................................
2.设置灯的状态 12
.........................................................................................
3.5.温湿度传感器 12
.........................................................................................
.................................................................................................. 4.??广域??网功能13
4.1.Espressif Cloud 13
......................................................................................
1.激活 13
........................................................................................................
2.认证 14
........................................................................................................
3.PING 服务器 14
...........................................................................................
4.智能插座 15
................................................................................................
5.智能灯 16
....................................................................................................
.........................................................................................
6.温湿度传感器 17
.............................................................................. 4.2.?用户?自定义反向控制 18
1.前?言
基于 ESP8266 物联??网平台的 IoT SDK 为?用户提供了?一个简单、快速、?高效开发物联??网产品的软件平台。本?文主要介绍基于 Espressif IoT SDK 的嵌?入式应?用开发,在 IoT Demo 中,实现了三类产品:智能插座、智能灯、传感器,并且通过外??网服务器,实现了对设备的反向控制以及数据的采集。
通过对本?文的熟悉,?用户可以快速的开发类似应?用产品。
2.概述
SDK 为?用户提供了?一套数据接收、发送的函数接?口,?用户不必关?心底层??网络,如 Wi-Fi、TCP/IP 等的具体实现,只需要专注于物联??网上层应?用的开发,利?用相应接?口完成??网络数据的收发即可。
ESP8266 物联??网平台的所有??网络功能均在库中实现,对?用户不透明。?用户应?用的初始化功能可以在user_main.c 中实现。
void user_init(void)是上层程序的?入?口函数,给?用户提供?一个初始化接?口,?用户可在该函数内增加硬件初始化、??网络参数设置、定时器初始化等功能。
SDK中提供了对 json 包的处理 API,?用户也可以采?用?自定义数据包格式,?自?行对数据进?行处理。 ESP8266_NONOS_SDK 的 example ?文件夹提供 IOT_Demo,AT,smart_con?g 等应?用?示例,实际上,也可以在 IOT_Demo 中调?用 smart_con?g 的 API,SDK 提供相关 API 上层应?用均可调?用。
2.1.代码结构
1."usr"??目录
usr ??目录下为 IoT Demo 应?用?示例的功能实现代码,具体如下:
user_main.c — 程序主?入?口;
user_webserver.c — 创建 TCP 服务器的?示例,提供 REST 的轻量 webserver 功能;
user_device?nd.c — UDP 传输功能的?示例,提供 ESP8266 设备查找功能;
user_esp_platform.c — 与 Espressif 云端服务器通信的?示例;
user_json.c — json 包的处理?示例;
user_plug.c — 智能插座的功能?示例代码;
user_light.c — PWM 实现智能灯的功能?示例代码;
user_humiture.c — 温湿度传感器的功能?示例代码;
2. "include"??目录
include??目录下为应?用程序相关头?文件,需要注意的是"user_con?g.h" ?文件,在该头?文件中可选择具体的应?用?示例,仅?支持每次打开?一个宏定义,使能?一个设备。
具体?支持如下例?子:
PLUG_DEVICE(智能插座),LIGHT_DEVICE(灯),SENSOR_DEVICE(传感器);
其中SENSOR_DEVICE(传感器)?又分为HUMITURE_SUB_DEVICE(温湿度传感器)和FLAMMABLE_GAS_SUB_DEVICE(可燃?气体检测)。
另需注意,以下头?文件中的宏定义指?示?用户参数区,?用户需根据编译时选择的 ?ash map ?自?行调整,?ash map 详?见?文档 “2A-ESP8266__IOT_SDK_User_Manual”
user_esp_platform.h中的#de?ne ESP_PARAM_START_SEC 0x3D // or 0x7D, or 0xFD
user_light.h中的#de?ne PRIV_PARAM_START_SEC 0x3C // or 0x7C, or 0xFC
user_plug.h中的#de?ne PRIV_PARAM_START_SEC 0x3C // or 0x7C, or 0xFC
3."driver"?文件夹
??目前外围驱动?支持 I2C Master,SPI,外部按键, PWM,双 UART。
4.?工作模式
IoT Demo 在user_esp_platform_init中设置初始?工作模式为 sotfAP+station 共存的模式,?用户连?入ESP8266 softAP 接?口的局域??网,发指令让 ESP8266 station 接?口连接可?入外??网的路由(AP),?用户可通过向 ESP8266 softAP 接?口发指令查询 ESP8266 station 连接 WiFi 的状况。ESP8266 station 接?口连?入路由后,?自动连接 Espressif 云端服务器,对应代码user_esp_platform_check_ip 。连接服务器完成后,切换进?入station模式。
ESP8266 softAP 的 SSID 默认为ESP_XXXXXX,其中XXXXXX 为设备 MAC 地址的后三个字节,默认加密模式为 WPA/WPA2。
在 station 模式下,?长按复位按键5秒,设备即复位并重启恢复初始 softAP+station 共存模式,可重新进?行配置。
2.2.调试?工具
IoT Demo 在 user_webserver.c 内建?立的 TCP server 采?用 REST 架构,?用户通过 PC 端与 IoT Demo 设备进?行通讯时,可采?用 curl 命令。
可在链接(http://curl.haxx.se/download.html)进?行指定版本的下载,后?文中的 curl 指令请参照“Windows curl” 的?示例。
若使?用 Linux curl 或者 Cygwin curl,后?文中的 curl 指令请参照 “Linux/Cygwin curl” 的?示例。 如?无特别说明,则表?示可以通?用。
1.curl 指令使?用的常?见错误
?注意 curl 指令中的字符?大?小写,若?大?小写出错,则指令出错。
?curl 指令中均为英?文标点符号,若指令夹杂了中?文符号,则指令出错。
?curl 指令中的空格,若未打空格,或者多打成两个空格,则指令出错。
?随机 token 不能与其他设备共?用。
?根据发 curl 指令的?工具(Linux/Cygwin or Windows)不同,注意选择正确的指令格式。
3.局域??网功能
ESP8266 softAP 接?口默认 IP 为192.168.4.1,station 接?口的 IP 由路由分配。以下 URL 中 “ip” 信息指 softAP 和 station 模式下的 IP,需输?入实际的 IP 地址。
IOT_DEMO 中#de?ne SOFTAP_ENCRYPT 定义 softAP 需要密码进?行连接 (?用户如果?无需密码,则可将宏#de?ne SOFTAP_ENCRYPT 关闭),密码格式为:ESP8266_softAPMAC_PASSWORD,开发者可?自?行修改ESP8266_NONOS_SDK\app\include\user_con?g.h中宏定义#de?ne PASSWORD,配置密码。
例如:
宏定义 "PASSWORD" 定义为v*%W>L<@i&Nxe!
ESP8266 设备 softAP MAC 地址为1a:fe:86:90:d5:7b
则 ESP8266 softAP 的 WiFi 连接密码为1a:fe:86:90:d5:7b_v*%W>L<@i&Nxe!
3.1.通?用功能
1.查询版本信息
curl -X GET http://ip/client?command=info
响应:
{
"Version": {
"hardware":"0.1",
"software":"0.8.0"
},
"Device": {
"product":"Plug",
"manufacture", "Espressif Systems"
}
}
2.设置连接参数
ESP8266 设备初始状态 softAP+station 模式,将 PC 连?入设备 softAP 提供的局域??网(密码如前述),通过 PC 发送 curl 指令设置。
设置 station 模式
PC 连?入 ESP8266 softAP 发送下述 curl 指令,设置 ESP8266 station 连接 AP 。
Linux/Cygwin curl:
curl -X POST -H "Content-Type:application/json" -d '{"Request":{"Station":{"Connect_Station":
{"ssid":"tenda","password":"1234567890","token": "1234567890123456789012345678901234567890"}}}}'
http://192.168.4.1/con?g?command=wi?
Windows curl:
curl -X POST -H "Content-Type:application/json" -d "{\"Request\":{\"Station\":{\"Connect_Station\":{\"ssid\":
\"tenda\",\"password\":\"1234567890\",\"token\": \"1234567890123456789012345678901234567890\"}}}}"
http://192.168.4.1/con?g?command=wi?
设置完成后,ESP8266 连接指令中的路由。
注意:
上述红?色 token 字段是个随机的?长度为 40 的 16 进制数的字符串。ESP8266 设备后续会?用此随机 token 向 Espressif Cloud 激活、认证;?用户使?用同?一个随机 token 向 Espressif Cloud 申请该设备的控制权限。因此,随机 token 与 ESP8266 设备是?一?一对应的关系,不能与其他设备共?用。
另有特殊情况:
若 AP(路由)的加密?方式为 WEP HEX,则密码需要转为 ASC 码 HEX 值。
举例如下:
假设路由 SSID “wi?_1”,密码为 “tdr0123456789”,加密?方式为WEP,则
Linux/Cygwin curl:
curl -X POST -H Content-Type:application/json -d '{"Request":{"Station":{"Connect_Station":
{"ssid":"wi?_1","password":"74647230313233343536373839","token":
"1234567890123456789012345678901234567890"}}}}' http://192.168.4.1/con?g?command=wi?
Windows curl:
curl -X POST -H "Content-Type:application/json" -d “{\”Request\”:{\"Station\":{\"Connect_Station\":{\"ssid\":
\"wi?_1\",\"password\":\"74647230313233343536373839 \" , \"token\":
\”1234567890123456789012345678901234567890\”}}}}" http://192.168.4.1/con?g?command=wi?
在配置 ESP8266 station接?口连接路由的过程中,可通过如下 curl 指令,查询设备的连接状态。
curl -X GET http://ip/client?command=status
返回 status 说明如下:
对于智能插座或者智能灯,这种?支持反向控制的设备,可发如下指令让 ESP8266 设备重启: curl -X POST http://ip/con?g?command=reboot
对于温湿度传感器,这种不?支持反向控制的设备,可发如下指令让 ESP8266 设备休眠: curl -X POST http://ip/con?g?command=sleep
温湿度传感器休眠 30 秒后,?自动唤醒。
设置 softAP 参数
发送如下 curl 指令,设置 ESP8266 softAP 的参数,例如 SSID、password 等。
Linux/Cygwin curl:
curl -X POST -H "Content-Type:application/json" -d '{"Request":{"Softap":{"Connect_Softap":
{"authmode":"OPEN", "channel":6, "ssid":"ESP_IOT_SOFTAP", "password":""}}}}' http://192.168.4.1/con?g?
command=wi?
Windows curl:
curl -X POST -H "Content-Type:application/json" -d "{\"Request\":{\"Softap\":{\"Connect_Softap\":{\"authmode
\":\"OPEN\",\"channel\":6,\"ssid\":\"ESP_IOT_SOFTAP\",\"password\":\"\"}}}}" http://192.168.4.1/con?g?
command=wi?
注意:
authmode ?支持: OPEN, WPAPSK, WPA2PSK, WPAPSK/WPA2PSK.
password 必须多于 8 bytes.
3.WiFi 连接与?工作模式的切换
?初始上电时,默认为 softAP + station 共存模式。
??手机 APP (或 PC ) 连?入 ESP8266 softAP 发 curl 指令,让 ESP8266 station 连接路由。过程中可以查询 station 的连接状态。
?ESP8266 station 连上路由后,向服务器认证,通过后,ESP8266 切换为单独 station 模式。
?之后,ESP8266 保持 station 模式。当??网络连接断开,尝试重连?无效,ESP8266 切回 softAP + station 模式。此时可以重新从步骤2进?行连接。
另,ESP8266_NONOS_SDK_v0.9.2 及之后版本,?支持??网络连接失败时,?自动切换已记录的 AP 进?行连接,由宏定义#de?ne AP_CACHE 控制此功能开关。
3.2.局域??网内查找 ESP8266
PC 可以通过在局域??网内向端?口 1025 发送 UDP ??广播包的?方法进?行 ESP8266 设备的查找,发送??广播包信息 “Are You Espressif IOT Smart Device?”,ESP8266 设备对在 1025 端?口收到的 UDP ??广播包进?行判断,如为该字符串,则回复响应。
可利?用??网络调试助?手来测试此功能,例如:
响应:
?智能插座
I’m Plug.xx:xx:xx:xx:xx:xxyyy.yyy.yyy.yyy
?智能灯
I’m Light.xx:xx:xx:xx:xx:xxyyy.yyy.yyy.yyy
?温湿度传感器
I’m Humiture.xx:xx:xx:xx:xx:xxyyy.yyy.yyy.yyy
其中xx:xx:xx:xx:xx:xx 为设备 MAC 地址,yyy.yyy.yyy.yyy 为设备 IP 地址。
如不为该字符串,则不做响应。
3.3.智能插座
1.查询插座状态
curl -X GET http://ip/con?g?command=switch
响应:
{
"Response": {
"status": 0
}
}
status 可以为 0 或者 1。
2.设置插座状态
Linux/Cygwin curl:
curl -X POST -H "Content-Type:application/json" -d '{"Response":{"status":1}}' http://ip/con?g?
command=switch
Windows curl:
curl -X POST -H "Content-Type:application/json" -d "{\"Response\":{\"status\":1}}" http://ip/con?g?
command=switch
status 可以为 0 或者 1。
3.4.智能灯
1.查询灯的状态
curl -X GET http://ip/con?g?command=light
响应:
{
"freq": 100,
"rgb": {
"red": 100,
"green": 0,
"blue": 0
}
}
其中,freq 取值范围为1~500;red、green、blue 取值范围为0~255。
2.设置灯的状态
Linux/Cygwin curl:
curl -X POST -H "Content-Type:application/json" -d '{"freq":100, "rgb":{"red":200, "green":0, "blue":0}}' http://ip/ con?g?command=light
Windows curl:
curl -X POST -H "Content-Type:application/json" -d "{\"freq\":100,\"rgb\":{\"red\":200,\"green\":0,\"blue\":0}}"
http://ip/con?g?command=light
其中,freq 取值范围为1~500;red、green、blue 取值范围为0~255。
3.5.温湿度传感器
温湿度传感器的状态需要在??广域??网下通过 Espressif Cloud 获取。
4.??广域??网功能
4.1.Espressif Cloud
关于 Espressif 服务器平台的详细使?用,会在 Espressif 服务器上提供详细的操作及API介绍。 注意:
?后述“设备”指设备?自?行完成的动作,?无需?用户操作;
?后述“PC”指?用户可通过PC发指令,进?行操作。
master-device-key
ESP8266 设备凭借它作为?身份认证,享受 Espressif Cloud 提供的云端服务,master-device-key.bin 需要向 Espressif Cloud 申请,烧录到 SPI ?ash。
1.激活
设备
ESP8266 设备根据 curl 命令设置的 ssid、password 及随机 token 连接路由后,会默认向Espressif Cloud 激活认证。
激活需要往 Espressif Cloud (IP 地址: 115.29.202.58,端?口: 8000) 发送如下格式的 TCP 包:
{"path": "/v1/device/activate/", "method": "POST", "meta": {"Authorization": "token
HERE_IS_THE_MASTER_DEVICE_KEY"}, "body": {"encrypt_method": "PLAIN", "bSSID": "18:fe:34:70:12:00", "token": "1234567890123456789012345678901234567890"}}
HERE_IS_THE_MASTER_DEVICE_KEY为烧录到 ESP8266 设备 SPI ?ash 的实际 master-device-key 值,1234567890123456789012345678901234567890为之前3.1.2 设置连接参数中设置的随机 token
响应
{"status": 200, "device": {device}, "key": {key}, "token": {token}}
PC
PC 侧在配置 ESP8266 设备成功连接路由后,PC 也同样需要连接到?一个可上外??网的路由,向Espressif Cloud 申请设备的控制权。
Linux/Cygwin curl:
curl -X POST -H "Authorization:token c8922638bb6ec4c18fcf3e44ce9955f19fa3ba12" -d '{"token":
"1234567890123456789012345678901234567890"}' https://www.sodocs.net/doc/3211111857.html,/v1/key/authorize/
Windows curl:
curl -X POST -H "Authorization:token c8922638bb6ec4c18fcf3e44ce9955f19fa3ba12" -d "{\"token\":
\"1234567890123456789012345678901234567890\"}" https://www.sodocs.net/doc/3211111857.html,/v1/key/authorize/
响应:
{"status": 200, "key": {"updated": "2014-05-12 21:22:03", "user_id": 1, "product_id": 0, "name": "device
activate share token", "created": "2014-05-12 21:22:03", "source_ip": "*", "visibly": 1, "id": 149,
"datastream_tmpl_id": 0, "token": "e474bba4b8e11b97b91019e61b7a018cdbaa3246", "access_methods": "*", "is_owner_key": 1, "scope": 3, "device_id": 29, "activate_status": 1, "datastream_id": 0, "expired_at":
"2288-02-22 20:31:47"}}
c8922638bb6ec4c18fcf3e44ce9955f19fa3ba12为 user key(?用户?身份 ID)的举例,需填?入?用户实际的user key 值,在 Espressif Cloud 注册?用户时获得。步骤如下:
?注册并登陆 Espressif Cloud https://www.sodocs.net/doc/3211111857.html,/
?点击右上?角的?用户名
?点击进?入设置
?点击 “开发者”
e474bba4b8e11b97b91019e61b7a018cdbaa3246为返回的设备 owner key,在 PC 侧使?用 owner key 对设备进?行控制。
2.认证
激活后,设备向 Espressif Cloud (IP 地址: 115.29.202.58,端?口: 8000) 发送如下格式的 TCP 包,进?行认证:
{"nonce": 560192812, "path": "/v1/device/identify", "method": "GET", "meta": {"Authorization": "token
HERE_IS_THE_MASTER_DEVICE_KEY"}}
这个 TCP 包的作?用是,ESP8266 设备向 Espressif Cloud 认证?自?身的?身份,每次 ESP8266 设备重新连接 Espressif Cloud 都需要向服务器发送这样?一包数据。其中“nonce”是?一组随机整数,token 后?面是设备的 master-device-key。
Espressif Cloud 认证设备持有的确实是服务器发布的 master-device-key 后,会向设备回复?一个?身份确认成功的数据包。
响应:
{"device": {"productbatch_id": 0, "last_active": "2014-06-19 10:06:58", "ptype": 12335, "activate_status": 1,
"serial": "334a8481", "id": 130, "bSSID": "18:fe:34:97:d5:33", "last_pull": "2014-06-19 10:06:58", "last_push":
"2014-06-19 10:06:58", "location": "", "metadata": "18:fe:34:97:d5:33 temperature", "status": 2, "updated":
"2014-06-19 10:06:58", "description": "device-description-79eba060", "activated_at": "2014-06-19 10:06:58",
"visibly": 1, "is_private": 1, "product_id": 1, "name": "device-name-79eba060", "created": "2014-05-28
17:43:29", "is_frozen": 0, "key_id": 387}, "nonce": 560192812, "message": "device identi?ed", "status": 200}
认证过程在智能插座和灯的应?用中需要。
3.PING 服务器
为了保持 ESP8266 设备与 Espressif Cloud 之间的 socket 连接,ESP8266 需要每 50 秒向Espressif Cloud (IP 地址: 115.29.202.58,端?口: 8000) 发送如下格式的的 TCP 包。
{"path": "/v1/ping/", "method": "POST", "meta": {"Authorization": "token
HERE_IS_THE_MASTER_DEVICE_KEY"}}
响应:
{"status": 200, "message": "ping success", "datetime": "2014-06-19 09:32:28", "nonce": 977346588}
PING 服务器的机制,在智能插座及灯这种需要进?行反向控制的设备中进?行。
4.智能插座
设备
在进?行对设备的反向控制时,存在如下两种情况:
?ESP8266 设备收到云端服务器发来的 GET 命令时,表?示设备需要将?自?身的状态上传?至服务器,服务器发给设备的 GET 命令格式如下所?示:
{"body": {}, "nonce": 33377242, "is_query_device": true, "get": {}, "token":
"e474bba4b8e11b97b91019e61b7a018cdbaa3246", "meta": {"Authorization": "token
e474bba4b8e11b97b91019e61b7a018cdbaa3246"}, "path": "/v1/datastreams/plug-status/datapoint/", "post":
{}, "method": "GET"}
响应:
{"status": 200, "datapoint": {"x": 0}, "nonce": 33377242, "is_query_device": true}
?ESP8266 设备收到云端服务器发来的 POST 命令时,表?示设备需要改变?自?身状态。服务器相关的数据包实现对应的控制动作,例如,打开智能插座开关的命令:
{"body": {"datapoint": {"x": 1}}, "nonce": 620580862, "is_query_device": true, "get": {}, "token":
"e474bba4b8e11b97b91019e61b7a018cdbaa3246", "meta": {"Authorization": "token
e474bba4b8e11b97b91019e61b7a018cdbaa3246"}, "path": "/v1/datastreams/plug-status/datapoint/", "post":
{}, "method": "POST", "deliver_to_device": true}
ESP8266 智能插座完成控制动作后,向服务器发送?一个更新状态成功的响应,格式如下,响应回复的 nonce 值必须与云端服务器之前发送的控制命令中的 nonce 值?一致,以表?示每次控制和响应相互对应。
响应:
{"status": 200, "datapoint": {"x": 1}, "nonce": 620580862, "deliver_to_device": true}
PC
查询智能插座状态
curl -X GET -H "Content-Type:application/json" -H "Authorization: token
e474bba4b8e11b97b91019e61b7a018cdbaa3246" https://www.sodocs.net/doc/3211111857.html,/v1/datastreams/plug-status/datapoint/
响应:
{"status": 200, "nonce": 11432809, "datapoint": {"x": 1}, "deliver_to_device": true}
设置智能插座状态
Linux/Cygwin curl:
curl -X POST -H "Content-Type:application/json" -H "Authorization: token
e474bba4b8e11b97b91019e61b7a018cdbaa3246" –d '{"datapoint":{"x":1}}' https://www.sodocs.net/doc/3211111857.html,/v1/
datastreams/plug-status/datapoint/?deliver_to_device=true
Windows curl:
curl -X POST -H "Content-Type:application/json" -H "Authorization: token
e474bba4b8e11b97b91019e61b7a018cdbaa3246" –d "{\"datapoint\":{\"x\":1}}" https://www.sodocs.net/doc/3211111857.html,/v1/
datastreams/plug-status/datapoint/?deliver_to_device=true
响应:
{"status": 200, "nonce": 11432809, "datapoint": {"x": 1}, "deliver_to_device": true}
5.智能灯
设备
在进?行对设备的反向控制时,存在如下两种情况:
?ESP8266 设备收到云端服务器发来的 GET 命令时,表?示设备需要将?自?身的状态上传?至服务器,服务器发给设备的 GET 命令格式如下所?示:
{"body": {}, "nonce": 8968711, "is_query_device": true, "get": {}, "token":
"e474bba4b8e11b97b91019e61b7a018cdbaa3246", "meta": {"Authorization": "token
e474bba4b8e11b97b91019e61b7a018cdbaa3246"}, "path": "/v1/datastreams/light/datapoint/", "post": {},
"method": "GET"}
响应:
{"nonce": 5619936, "datapoint": {"x": 100, "y": 200, "z": 0, "k": 0, "l": 50}, "deliver_to_device": true}
?ESP8266 设备收到云端服务器发来的 POST 命令时,表?示设备需要改变?自?身状态。服务器相关的数据包实现对应的控制动作,例如,设置智能灯光调?色的命令:
{"body": {"datapoint": {"y": 200, "x": 100, "k": 0, "z": 0, "l": 50}}, "nonce": 5619936, "is_query_device": true,
"get": {}, "token": "e474bba4b8e11b97b91019e61b7a018cdbaa3246", "meta": {"Authorization": "token
e474bba4b8e11b97b91019e61b7a018cdbaa3246"}, "path": "/v1/datastreams/light/datapoint/", "post": {},
"method": "POST"
响应:
{"nonce": 5619936, "datapoint": {"x": 100, "y": 200, "z": 0, "k": 0, "l": 50}, "deliver_to_device": true}
其中,X 表?示频率,取值范围 1~500;Y (red),Z (green),K (blue) 调节智能灯的颜?色,取值范围0~255;L 为保留参数。
PC
查询灯的状态
curl -X GET -H "Content-Type:application/json" -H "Authorization: token
e474bba4b8e11b97b91019e61b7a018cdbaa3246" https://www.sodocs.net/doc/3211111857.html,/v1/datastreams/light/datapoint
响应:
{"nonce": 5619936, "datapoint": {"x": 100, "y": 200, "z": 0, "k": 0, "l": 50}, "deliver_to_device": true}
设置灯的状态
Linux/Cygwin curl:
curl -X POST -H "Content-Type:application/json" -H "Authorization: token
e474bba4b8e11b97b91019e61b7a018cdbaa3246" –d '{"datapoint":{"x": 100, "y": 200, "z": 0, "k": 0, "l": 50}} '
https://www.sodocs.net/doc/3211111857.html,/v1/datastreams/light/datapoint/?deliver_to_device=true
Windows curl:
curl -X POST -H "Content-Type:application/json" -H "Authorization: token
e474bba4b8e11b97b91019e61b7a018cdbaa3246" –d "{\"datapoint\":{\"x\": 100, \"y\": 200, \"z\": 0, \"k\": 0, \"l\": 50}}" https://www.sodocs.net/doc/3211111857.html,/v1/datastreams/light/datapoint/?deliver_to_device=true
响应:
{"nonce": 5619936, "datapoint": {"x": 100, "y": 200, "z": 0, "k": 0, "l": 50}, "deliver_to_device": true}
其中,X 表?示频率,取值范围 1~500;Y (red),Z (green),K (blue) 调节智能灯的颜?色,取值范围0~255;L 为保留参数。
6.温湿度传感器
设备
上传温湿度数据到 Espressif Cloud:
{"nonce": 1, "path": "/v1/datastreams/tem_hum/datapoint/", "method": "POST", "body": {"datapoint": {"x": 35,
"y": 32}}, "meta": {"Authorization": "token HERE_IS_THE_MASTER_DEVICE_KEY"}}
X 表?示温度值,Y 表?示湿度值。
温湿度信息上传成功后,云端服务器返回如下响应:
响应:
{"status": 200, "datapoint": {"updated": "2014-05-14 18:42:54", "created": "2014-05-14 18:42:54", "visibly": 1, "datastream_id": 16, "at": "2014-05-14 18:42:54", "y": 32, "x": 35, "id": 882644}}
响应信息中携带数据更新的最后时间戳。
PC
PC 侧通过如下两类 API 查询温湿度传感器的最新数据和历史数据,其中,红?色字体是?用户的owner key。
?查询最新数据:
curl -X GET -H "Content-Type:application/json" -H "Authorization: token
e474bba4b8e11b97b91019e61b7a018cdbaa3246" https://www.sodocs.net/doc/3211111857.html,/v1/datastreams/tem_hum/datapoint
注意: 上述命令在 owner key 下会返回 “remote device is disconnect or busy”,是正常情况,因为温湿度传感器不?支持反向操作。
?查询历史数据:
curl -X GET -H "Content-Type:application/json" -H "Authorization: token
e474bba4b8e11b97b91019e61b7a018cdbaa3246" https://www.sodocs.net/doc/3211111857.html,/v1/datastreams/tem_hum/datapoints
4.2.?用户?自定义反向控制
Espressif 云端服务器?支持?用户?自定义?行为,可以发送任意的 action 到设备,附带参数,实现灵活的反向控制。指令格式如下:
Linux/Cygwin curl:
curl -X GET -H "Content-Type:application/json" -H "Authorization: token HERE_IS_THE_OWNER_KEY" 'http://
https://www.sodocs.net/doc/3211111857.html,/v1/device/rpc/?deliver_to_device=true&action=your_custom_action&any_parameter=any_value' Windows curl:
curl -X GET -H "Content-Type:application/json" -H "Authorization: token HERE_IS_THE_OWNER_KEY" "http://
https://www.sodocs.net/doc/3211111857.html,/v1/device/rpc/?deliver_to_device=true&action=your_custom_action&any_parameter=any_value"
红?色为可?自定义部分。在 ESP8266 IoT Demo 中新增解析 action 及 parameter,并实现?自定义的功能即可。
设备侧收到数据如下:
{"body": {}, "nonce": 872709859, "get": {"action": "your_custom_action", "any_parameter": "any_value",
"deliver_to_device": "true"}, "token": "HERE_IS_THE_DEVICE_KEY", "meta": {"Authorization": "token
HERE_IS_THE_DEVICE_KEY "}, "path": "/v1/device/rpc/", "post": {}, "method": "GET", "deliver_to_device":
true}
注意: RPC 指令只实现灵活的反向控制,不保存历史记录。
例如,?用户可以?自定义 custom_action 控制智能?风扇摇头,但云端服务器不会记录智能?风扇摇了?几次头,之前?几点钟在摇头,?几点钟停?止摇头的历史信息。