搜档网
当前位置:搜档网 › 2b-esp8266_sdk_iot_demo_cn_v1.3_0

2b-esp8266_sdk_iot_demo_cn_v1.3_0

2b-esp8266_sdk_iot_demo_cn_v1.3_0
2b-esp8266_sdk_iot_demo_cn_v1.3_0

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 控制智能?风扇摇头,但云端服务器不会记录智能?风扇摇了?几次头,之前?几点钟在摇头,?几点钟停?止摇头的历史信息。

相关主题