自制一个能远程控制的五光十色小夜灯

小夜灯是我们生活中一个非常便利的工具,想象在某个伸手不见五指的夜晚, 你正做着美梦,和小学妹看着电影唱着歌,突然,你的女朋友惊现在你面前,手持双斧,怒气冲天,你后面突然变成了一片水塘,正在这千钧一发的时刻,你从梦中惊醒,四周一片漆黑,原来虚惊一场。此时此刻,如果能有一个温馨的小夜灯照亮空空如也的房间,你或许就没那么害怕了,一个小夜灯能极大的提升我们的幸福感和黑夜里的安全感。

身为理工男的我不满足于某宝上形形色色的小夜灯,想到还有一个环形的12位的WS2812和esp8266,决定自制一个彩色的智能小夜灯。

材料清单

用到了以下模块/材料:
ESP8266-12E x1
12位WS2812彩色LED灯 x1
人体感应传感器 x3
声音传感器 x1
光照强度传感器 x1
触摸按钮 x1
ASM1117 5v-3.3v模块 x1
microUSB底座 x1
10K贴片电阻 x3
导线若干

人体传感器为什么要x3呢?我要360度无死角感应,超级小夜灯嘛。

功能特性

既然是超级小夜灯,功能肯定是越多越好,但是又不能越俎代庖,夜灯就是夜灯,搞个显示器在上面恐怕不太合适吧。功能如下:

  1. 远程控制:通过对接到homeassistant平台,实现web远程控制开关,颜色,亮度,还可远程设置各个传感器的工作状态,如果有天猫精灵,更可以通过天猫精灵语音控制。
  2. 自动控制:人体感应器,声音传感器,光照传感器都是用来实现自动化控制的。当你在晚上做噩梦醒来,啊的一声,小夜灯感应到了你的呼唤,立马亮起,驱散你的恐惧。
  3. 手动控制: 要是没网或者你想开个灯怎么办?肯定要能手动控制的,并且人的手动控制大于其他方式的控制。当你想手动开/关灯时,只需像点手机屏幕那样点一下夜灯顶部的触摸按钮,即可实现开/关灯。

具体实现

好了,上面的牛吹完了,到了该如何动手做了。我设计的是一个六棱柱的样式,六棱柱的每个一个面放一个人体感应传感器,刚好实现360度感应。外形可随意设计,有条件的也可3D打印。接线图也比较简单,现在的电子模块像积木一样,接口统一,只需用导线连接起来就行,代码才是这个系统的灵魂。接线图如下:

软件设计

人生苦短,我用python。基于以上的功能需求,给esp8266刷上micropython固件,使用python来写代码。由于功能太多,python也写了两三百行,其中一个原因是micropython的mqtt不稳定,长时间连接要掉线,所以要使用Python的异步(micropython也是支持异步的)来定时发一个心跳包,如果检测到断开连接了就要重连,还要对接homeassistant实现远程的亮度调节,颜色控制等功能,如果网络连接失败不能影响到本地的手动控制,所以逻辑还是有点绕,不过这些都难不倒聪明的中国人(我)。
github链接:smart_night_light