ESP8266 的软件编译与烧录,请参考 Espressif BBS : http://bbs.espressif.com/viewforum.php?f=21
您的 ESP8266 模块烧录后,正常运行应用程序 IOT_Demo,本文介绍如何使用 Espressif 的云端服务。当然,烧录时提到的 master-device-key.bin,笔者将在后文说明。
1. Espressif Cloud:http://iot.espressif.cn/#/ ,注册用户并登录。
2. 笔者的应用是个智能灯,因此,在网站上创建一个设备“灯”,步骤:点击“设备开发”,点击“创建”;
创建设备,“名字”light-001,设置为“公开设备”这样只要笔者共享出去 其他人也可以一起来控制这个灯,“产品”选择创建新的产品,“产品名字”ESP-light,“产品类型”灯光。点击“创建”。完成后,自动进入新设备界面,如下图:
3. 现在笔者在 Espressif 云端上有个设备灯了,给它添加一些灯该有的功能吧。
添加开关功能:数据模型 点击“创建”,名字“plug-status”与 ESP8266 IOT_Demo 的代码对应,维度“一维”表示该功能只带一个参数,简单写点开关功能的描述“0 - off;1 - on”如下图。点击“创建”。笔者的灯就可以远程开关了。
添加灯光控制功能:数据模型 点击“创建”,名字“light”与 ESP8266 IOT_Demo 的代码对应,维度“五维”表示该功能带了 5 个参数 freq、R、G、B、还有一个保留参数,描述不写也可以。如下图。点击“创建”。笔者的灯可以远程调节颜色了。
数据模型里的“名字”都是和 ESP8266 中的软件相对应的,ESP8266 收到云端发来的消息后,会解析“名字” 然后根据参数值 做对应的行为。IOT_Demo 中对应解析“plug-status”和“light”的代码如下:
void ICACHE_FLASH_ATTR user_esp_platform_set_info(struct espconn *pconn, uint8 *pbuffer) { #if PLUG_DEVICE char *pstr = NULL; pstr = (char *)os_strstr(pbuffer, "plug-status"); if (pstr != NULL) { pstr = (char *)os_strstr(pbuffer, "body"); if (pstr != NULL) { if (os_strncmp(pstr + 27, "1", 1) == 0) { user_plug_set_status(0x01); } else if (os_strncmp(pstr + 27, "0", 1) == 0) { user_plug_set_status(0x00); } } } #elif LIGHT_DEVICE char *pstr = NULL; char *pdata = NULL; char *pbuf = NULL; char recvbuf[10]; uint16 length = 0; uint16 data = 0; pstr = (char *)os_strstr(pbuffer, "\"path\": \"/v1/datastreams/light/datapoint/\""); if (pstr != NULL) { pstr = (char *)os_strstr(pbuffer, "{\"datapoint\": "); if (pstr != NULL) { pbuf = (char *)os_strstr(pbuffer, "}}"); length = pbuf - pstr; length += 2; pdata = (char *)os_zalloc(length + 1); os_memcpy(pdata, pstr, length); pstr = os_strchr(pdata, 'x'); if (pstr != NULL) { pstr += 4; pbuf = os_strchr(pstr, ','); if (pbuf != NULL) { length = pbuf - pstr; os_memset(recvbuf, 0, 10); os_memcpy(recvbuf, pstr, length); data = atoi(recvbuf); user_light_set_freq(data); } } pstr = os_strchr(pdata, 'y'); if (pstr != NULL) { pstr += 4; pbuf = os_strchr(pstr, ','); if (pbuf != NULL) { length = pbuf - pstr; os_memset(recvbuf, 0, 10); os_memcpy(recvbuf, pstr, length); data = atoi(recvbuf); user_light_set_duty(data, 0); } } pstr = os_strchr(pdata, 'z'); if (pstr != NULL) { pstr += 4; pbuf = os_strchr(pstr, ','); if (pbuf != NULL) { length = pbuf - pstr; os_memset(recvbuf, 0, 10); os_memcpy(recvbuf, pstr, length); data = atoi(recvbuf); user_light_set_duty(data, 1); } } pstr = os_strchr(pdata, 'k'); if (pstr != NULL) { pstr += 4;; pbuf = os_strchr(pstr, ','); if (pbuf != NULL) { length = pbuf - pstr; os_memset(recvbuf, 0, 10); os_memcpy(recvbuf, pstr, length); data = atoi(recvbuf); user_light_set_duty(data, 2); } } os_free(pdata); } } user_light_restart(); #endif user_esp_platform_get_info(pconn, pbuffer); }
因此,用户可以自行在代码中添加其他的数据模型“名字”及响应,在云端建立该数据模型,以实现远程控制的功能。
4. 现在笔者在 Espressif 云端的灯,可以远程开关和控制色彩了。那么,怎么把云端的灯,对应到我手中这块 ESP8266 模块上来呢? 此时就需要 master-device-key.bin 了。
在网站上点击“设备开发”,点击“导出”,产品选择为刚才建立的“ESP-light”,如下图,右下角有个小小的灰色的“还可以下载 zip”,点击这个“zip”
会下载一个压缩包“devices_generate”,解压后,就获得了我们的 master-device-key.bin
master-device-key.bin 的实际名称,就是设备的 ID 值,长度为 40 bytes 的 16 进制数。它就是笔者刚才在 Espressif 云端创建的灯“light-001”的身份 ID 值,现在把它烧到 ESP8266 模块的 Flash 中,地址 0x3E000。
至此,笔者手边的 ESP8266 模块就和 Espressif 云端建立的那个设备灯“light-001”对应起来了!
5. ESP8266 设备的软件 IOT_Demo,在连上路由后,会自动连接 Espressif Cloud 激活认证。设备激活认证后,就可以在网站上,控制灯的开关和色彩。当然,Espressif 也提供手机 APK,支持在手机上远程控制 ESP8266 设备。
在设备“light-001”页面,数据模型“plug-status”,点击“编辑”,修改当前数据值为 1 开灯,为 0 关灯,点击“设置数据值到设备”,否则 设置值仅保存在 Espressif 云端 不会当时更新。如下图。
以上,介绍 Espressif 云端服务的基本功能。
其实 Espressif Cloud 还有许多有趣的功能,在网站“开始”->“开发者API”中,提供 API 说明;“开始”->“帮助”中,提供帮助文档,相当于新手指南。
快来访问网站 http://iot.espressif.cn/#/ 一起体验吧!