当前,智能家居控制系统变得越来越流行。 控制整个家庭设备的集中式界面可以节省时间,并使您可以更有效地控制家庭。 他们对这种系统的愿景的实现是由著名的品牌实现的:苹果,亚马逊和谷歌,将它们构建到其基础架构中,以及根据Arduino平台组装此类系统的工匠。
我们的目标如下:创建一个可以在大量设备上使用并且不会绑定到任何地方的系统。 事实证明,实现此控件的绝佳选择是Telegram Messenger的机器人。 Telegram在所有主要平台上都有应用程序,以及网络版本。 可以从任何地方访问它,您只需要拥有一个帐户。
从模块中,我们选择了以下内容:
•RGB控制的LED灯条
•网点管理
•温度传感器
•光线传感器(用于自动打开灯光)
我们需要什么
1.树莓派3
无需引入小型但远程的计算机,其强大的功能足以满足我们执行这些任务的需要。 第三个版本带有集成的Wi-Fi模块,因此很好,因此我们不必考虑第三方适配器。
2. ESP8266模组
我们将需要其中4个。 我们使用了ESP-12F,但总的来说没有什么区别:ESP-1就足够了。 而且,现成的NodeMCU板还可以节省您的时间和精力。
3. LED灯条
我们在WS2812b控制器上采用了受管理的RGB磁带,不过,顺便说一下,适用于5V且受Arduino平台支持的任何磁带都适用。
4.温度和光传感器
我们使用BH1750模块确定房间的照明,并使用DS18B20确定温度。 主要标准是可用性,Arduino平台的支持以及使用3.3V ESP8266逻辑的能力。
5.接力
Arduino的MOD-1CH子模块可以通过高达10A的电流,并由5V控制,我们找不到3.3V的类似物,因此我们在键控模式下使用了一个晶体管进行控制。
6.电报机器人
将使用在Raspberry上启动的Telegram机器人对整个系统进行直接控制:这将使该系统可以在世界任何地方的任何平台上轻松访问。 由于开发平台和对多种语言的支持,为Telegram创建机器人非常简单。
因此,我们的整个系统将如下所示:

实作
首先,我们测试模块。

现成的电路板适应引脚之间的距离,这极大地方便了焊接,并且还包含将引脚CH_PD和GPIO2连接至Vcc的必要电阻。
不幸的是,像Arduino一样,ESP8266模块已经上电并以3.3V(而不是5V)运行。 您可以使用现成的转换器模块转换电压,但也可以像我们一样焊接基于AMS1117线性稳压器的电路。

下一步是编程。
幸运的是,ESP8266平台受Arduino IDE的支持,这为我们打开了许多可能性。 要将固件直接下载到模块,我们将使用Arduino Nano,但是,可以通过常规的USB-UART转换器完成此操作。 不要忘记Arduino和ESP之间的电压差。
该方案如下:

在为模块加电时,需要使用该按钮将GPIO1引脚关闭至GND,从而将其转换为编程模式。
接下来,我们配置Arduino IDE,以使其理解ESP( 带有所有链接的详细说明 ),并尝试记录LED闪烁的测试草图。

成功闪烁后,我们开始焊接所有模块。 带有温度和光传感器,一切都非常标准。
温度:


照明:


但是磁带和智能插座造成了一些困难。
磁带控制输入到ESP的简单连接失败。 毫不奇怪,因为WS2812b至少需要70%的VCC输入(5x0.7 = 3.5)作为控制输入,而3.3V板显然不够。 但是我们发现 拐杖 一种无需使用升压转换器即可启动它们的有趣方法。 如果二极管需要至少0.7xVcc的电压来对信号做出反应,而我们不能提高该信号的电平,则必须降低Vcc! 是的,LED不会亮得那么亮,但是,我们不需要以这种方式为整个磁带供电。 一个二极管就足够了。 通过沿信号链进一步传输信号,LED已经使用Vcc电平来形成信号,对于“正常” LED而言已足够。 因此,通过将胶带中的第一个二极管通过二极管“消耗”约0.6V的电源连接到电源,我们可以从ESP8266模块直接控制完美的胶带。 然后,我们将稍暗的第一个LED留给了调试需求:显示网络连接的状态。
这是发生了什么:


我们希望将智能插座完全放在带有计时器的旧插座中。 他们必须进入那里:ESP-12F本身,它的电源和控制插座的继电器。 但是,将继电器和电源放置在此处后,我们仍然无法在其中容纳ESP模块。 因此,我不得不在下面附加一个小盒子。

结果并不像我们最初想要的那样优雅,但这是一个坚固的设备,只需要插入电源插座即可。


下一步是配置Raspberry。 计划是这样的:我们的模块连接到Raspberry的Wi-Fi接入点,更确切地说,连接到其内置的Wi-Fi模块。 Raspberry运行Telegram-bot,该文件位于本地网络上的所有模块中,可以轻松地与它们交换http请求。 它们都通过以太网连接到Internet。
为了实施此计划,我们使用了两个软件包:
- hostapd-允许您将内置的wi-fi模块用作访问点
- dnsmasq-结合使用DHCP和DNS服务器。
我们试图实现代码和设备的相对独立性,因此,所有请求都不是对ip地址执行,而是对发明的.sh区域(light.sh,socket.sh等)中的名称执行。 为此,我们为每个模块配置了静态IP地址,并将与模块相对应的记录添加到了这些DNS地址。 幸运的是,dnsmasq非常易于配置( 有关设置此系统的详细说明 )。
最后,机器人本身。
我们使用python-telegram-bot库在Python中编写了一个bot。 我们开发了一个按钮界面,可以简化管理,将设备变成一种远程控制:


可以在此处找到源bot代码。
为了使没人能使用它,我们设置了密码保护。
结论
当然,我们没有创建任何革命性的系统;有大量更全面和深思熟虑的实现。 ESP8266具有特殊的待机模式,在该模式下,其功耗非常小,因此温度和照明模块可以独立运行。 可以增加简单的用户可扩展性,而无需更改源代码和重新配置网络连接等等。 但是,整个项目的目标并不是全部。 首先,我们希望创建一个简单的系统,该系统很容易由我们家里的任何人创建,并且不需要认真的准备和花费。 最重要的是:我们在进行此项目时想学习很多东西。 而且,如果可以长期开发我们解决方案的实用性和功能性,那么在计划和实施该系统的过程中所获得的知识无疑是值得的。