发现ESP-NOW之旅——用ESP8266做灯控开关

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/eezata/article/details/49801835

发现ESP-NOW

我是一名从事智能照明的工程师,今年智能照明特别火爆,远超出我的想象。而且有量就压价,客户都不是省油的灯,所以设计也不能大手大脚的,新上手的ESP8266便宜好用,过我手的就有不少项目,网上各位DIY的也一大堆,不过智能照明搞来搞去就那么点花样,一时半会儿也无法跨界和其他智能家居互动起来,虽然这种言论是说了好久了,我倒是很期待跨界合作。 

我在“2C-ESP8266__SDK__Programming Guide__CN_v1.4.pdf” 这个文档中注意到了ESP-NOW 接⼝。(http://bbs.espressif.com/viewtopic.php?f=51&t=1023),并且文档强调这是一个在智能灯项目中应用的接口,我很好奇这到底是什么?而且似乎其他文档都没有提到这个应用。 



从以上这段描述来看,我觉得这是一个用来控制灯的技术,提到的slave角色应该就是一个智能灯,controller角色就是可以控制灯的设备。而且这个灯用的是ESP8266芯片,这个设备也是使用ESP8266芯片。

由于目前我所做的智能灯项目都是使用手机APP来控制,如果是调色等应用,我觉得APP确实很方便直接,但那毕竟只是一次性设置,更多的智能灯日常应用还只是开/关,亮/暗这类简单的,再掏出手机用APP简直反人性啊,万一手机没带回家就不要开关灯了?=。=b。所以我想如果能够回归到一个普通的开关来控制灯,但又保持智能化就好了。 于是我想或许可以利用这个ESP-NOW技术来做一个普通的开关,而且这个开关是可移动的,不需要被固定在墙上。

硬件准备

智能灯

我先准备了一个用ESP8266芯片做的智能灯,如果你们想省这一步,那就淘宝上买一个吧,固件无所谓,过会儿灯里的固件也是要被重刷的,选用一款插件式模组的灯,会比较方便重刷。


Button

我在Hackaday上看到过一种button 项目,用来控制门磁。button的想法很不错,做灯控开关也很合适。 于是我用我的小3D打印机做了这么一个东西。  

 


ESP8266 外围元器件少就是好,板子做出来如此简洁如此美,整体就可以做的很小,这真是我很喜欢它的地方。一开始我想把7号电池放在button的背后,所以设计时主要的体积都是为了迁就两颗7号电池的大小,后来为了调试方便我还是外接电池盒了。如果商用的化,换成条型锂电池的话还可以做更小。 


附上Button的PCB图



软件准备

建立light和button的工程

设计硬件的同时,当然不能漏了软件部分。 在Espressif的github上有这个https://github.com/espressif/ESP8266_LIGHT_WITH_MESH, 虽然名叫MESH,但里面的内容有一部分和我的button 想法是相关的,而且也提到正是使用了ESP-NOW技术,印证了我之前的猜想。 



下载github上的代码后,看了一下原厂提供的代码内容。 发现ESP-Now的使用代码在APP_LIGHT和 APP_CONTROLLER中都有,显然是要配对使用,于是我建了两个project,分别导入。注意代码在以下几个文件中,两个project都是如此。 


  • Espnow.h 
  • User_light_action.c 和 User_light_action.h


然后结合“2C-ESP8266__SDK__Programming Guide__CN_v1.4.pdf” 这个文件中ESP NOW接口介绍来看这些命令。

固件烧录flash

先不修改代码,按原厂代码来操作一遍,工程编译后会成4个bin。分别是 

  • esp_init_data_default
  • blank
  • user1.1024.new.2
  • boot_v1.4(b1)  

烧录地址如图



注意是两个工程,所以每个project都会生成这4个,将light工程生成的bin烧录入灯,将controller工程生成的bin烧录入我的button,不要烧反了。 



APP配置

演示还需要原厂的APP,我在鹅厂的应用宝中下载了IOT Espressif APP



先在APP中添加灯,这个APP用的是ESP-TOUCH的一键配置技术,计算了一下从添加设备界面的点击[确定]开始到界面显示[注册设备]花费约8秒,然后再到app反馈结果说[确定]又花费约12秒,整个配置完成用了20秒时间,还算稳定。


添加完灯的状态是在云端,要控制的话还需要下拉刷新为本地的灯,右边云标记表示云端的灯,左边Wi-Fi信号标记表示本地的灯,要刷新显示本地标记。

点击新添加的灯,进入控制页面后,点击右上角菜单,就会显示配对EspButton的选项。



这时开始配对Button,同时按住两个特定的按键大约3秒时间,就可以完成配对。

完成配对后执行一些简单功能操作,开和关,还有变色,反应都非常快,几乎是按下button的按键,灯执行反应,没有感觉到延时。 

功耗寿命

Wi-Fi是出了名的功耗高,但ESP8266的datasheet上说在deep-sleep模式下功耗为10uA。

所以我设计button在触发按键时才发送命令,不触发按键时处于deep-sleep功能,这样理论上功耗应该很低。所以我决定再测试一下button在2节七号电池的情况下能够支撑多久。于是我加了一些机械臂帮我做按键测试,看按几下之后2节七号电池才会罢工。结果是机械臂按了20000多次时罢工了,导致我必须先去修复一下我的机械臂了,一时半会儿也不会好,先搁置吧,反正按键电还有,可以继续使用。



做完这一些,我打算商用化试试,所以我自己再修改了什么,就不告诉大家啦:)

后记:看了京东新推出的的京东来点按键,搞一键下单购物。如果我这个按键再加上一些云端API去触发服务也是一样可以做的呀,下次试试。


展开阅读全文

没有更多推荐了,返回首页