ESP8266 云端服务介绍

原创
2015/03/17 17:59
阅读数 1W

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/#/ 一起体验吧!




展开阅读全文
打赏
0
3 收藏
分享
加载中
更多评论
打赏
0 评论
3 收藏
0
分享
返回顶部
顶部