文档章节

ESP8266 云端服务介绍

乐鑫信息科技
 乐鑫信息科技
发布于 2015/03/17 17:59
字数 1227
阅读 4634
收藏 3

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




© 著作权归作者所有

乐鑫信息科技
粉丝 5
博文 1
码字总数 1227
作品 0
浦东
私信 提问
Esp8266学习之旅④ 了解PWM,更为深入地用PWM控制一盏LED的亮度变化。(附带demo)

欢迎来到物联网智能家居顶量级别wifi模块Esp8266学习之旅。 本系列博客学习由非官方人员 半颗心脏 潜心所力所写,仅仅做个人技术交流分享,不做任何商业用途。如有不对之处,请留言,本人及时...

xh870189248
2017/10/11
0
0
Esp8266学习之旅② 利用GPIO开始使用按钮点亮你的“第一盏灯”。(附带demo)

欢迎来到物联网智能家居顶量级别wifi模块Esp8266学习之旅。 本系列博客学习由非官方人员 半颗心脏 潜心所力所写,仅仅做个人技术交流分享,不做任何商业用途。如有不对之处,请留言,本人及时...

xh870189248
2017/09/28
0
0
Esp8266学习之旅③ 利用 " 软件定时器 " 定时0.5秒闪烁点亮一盏LED。(附带demo)

欢迎来到物联网智能家居顶量级别wifi模块Esp8266学习之旅。 本系列博客学习由非官方人员 半颗心脏 潜心所力所写,仅仅做个人技术交流分享,不做任何商业用途。如有不对之处,请留言,本人及时...

xh870189248
2017/10/03
0
0
wifi模块/GPRS 串口标准协议--Gizwits-GAgent

Gizwits-GAgent(简称GAgent)作为机智云物联网整体解决方案中可入网设备(如WiFi模组、GPRS模组)接入部分,是一套运行在可入网模组(如WiFi模组、GPRS模组)上,使用机智云协议接入机智云平...

物联网小能手
2016/12/28
519
0
Esp8266学习之旅① 搭建开发环境,开始一个“hellow world”串口打印。

欢迎来到物联网智能家居顶量级别wifi模块Esp8266学习之旅。 本系列博客学习由非官方人员 半颗心脏 潜心所力所写,仅仅做个人技术交流分享,不做任何商业用途。如有不对之处,请留言,本人及时...

xh870189248
2017/09/14
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Java的线程同步和并发问题示例

并发问题 多线程是一个非常强大的工具,它使我们能够更好地利用系统的资源,但我们需要在读取和写入多个线程共享的数据时特别小心。 当多个线程尝试同时读取和写入共享数据时,会出现两种类型...

hiuh
今天
3
0
Spring Boot 常用注解说明

实体类 @Entity (实体类注解) @Table(可指定表名) @Data(可缺省get/set) @Id (指定属性主键) @GeneratedValue(指定主键生成规则)

兜兜毛毛
今天
3
0
局域网能互相ping通,ubuntu虚拟机不能上外网

【问题】 桥接模式老是无法上网,查看本机IP发现被分配了一个私网地址,猜测应该是虚拟DHCP服务器没有打开,于是查看Ubuntu的网络配置: /etc/network/interfaces 发现没有dhcp配置的信息,只...

tahiti_aa
今天
2
0
以太坊助记词PHP开发包简介

以太坊助记词PHP开发包用来为PHP以太坊应用增加助记词和层级确定密钥支持能力。下载地址:以太坊助记词php开发包 。 1、开发包概述 以太坊助记词PHP开发包主要包括以下特性: 生成符合BIP39...

汇智网教程
昨天
4
0
系统监控-分布式调用链Skywalking

1. 为什么要使用分布式调用链技术? 随着公司业务的高速发展,公司服务之间的调用关系愈加复杂,如何理清并跟踪它们之间的调用关系就显的比较关键。线上每一个请求会经过多个业务系统,并产生...

秋日芒草
昨天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部