基于Arduino的亚马逊Alexa控制家庭自动化
扫描二维码
随时随地手机看文章
在之前的教程中,我们使用NodeMCU构建了一个Alexa控制的家庭自动化系统。它很容易构建和实现。但有时我们需要更多的引脚来控制更多的设备,在这种情况下,我们可以使用一些具有更多GPIO引脚的微控制器与ESP8266板。在这里,我们将使用Arduino Uno和ESP8266来构建基于物联网的家庭自动化系统。
因此,在本教程中,我们将学习如何使用亚马逊Echo Dot扬声器通过语音命令控制家用电器。这并不是说我们懒得用开关来切换负载,而是在物联网时代,一切都变得“智能”,我们也应该建立一个智能家庭自动化系统。基于物联网的家庭自动化现在非常流行,我们以前使用不同的控制器(如树莓派,ESP8266, Arduino等)完成了许多物联网家庭自动化项目。
所需的材料
1. Arduino Uno
2. 亚马逊Alexa点扬声器
3. ESP8266-01
4. 跳线
5. 面包板或零PCB
在之前的教程中已经解释过,使用Alexa控制家用电器的方法有很多种,最流行的方法是使用第三方服务,如ThingSpeak, IFTTT和Webhooks。但是这些方法需要在每个平台上进行配置,这使得任务不那么繁琐和耗时。此外,编码部分需要一些计算来获取字符并解码它们。为了在这个方法中调用Alexa需要一些额外的短语,比如打开灯泡,我们不得不说“Alexa, Alexa触发打开灯泡”。正如你所看到的,我们必须在每次调用时说“Alexa触发”,这听起来很奇怪。因此,由于这么多的复杂性,我们将使用我们之前的方法,即使用fauxmoESP库。
FauxmoESP库仅适用于ESP板,不支持Arduino板。现在,如何在Arduino中实现它呢?别担心,我们有实现这个的方法。在这里,我们不会在AT模式下使用ESP8266模块,而是在编程模式下使用它。因此,我们将在此模块中上传fauxmoESP代码,并在从Alexa接收到的状态(0或1)发生变化时使用串行通信发送不同的字符。这些字符将在Arduino板上接收,就像Arduino板与Arduino接口时接收蓝牙模块的数据一样。
安装物联网Alexa家庭自动化库
由于我们将在ESP上创建多个虚拟连接环境,因此我们需要安装fauxmoESP以及异步TCP库。
1. 对于ESP8266,从这个链接下载异步TCP库,对于ESP32,从这个链接下载它。
2. 然后从这个链接下载fauxmoESP库。
3. 现在,在Arduino目录的libraries文件夹中解压缩这些文件,该目录可以在Documents文件夹中找到。另外,将这些文件夹重命名为oseperez-fauxmoesp-50cbcf3087f至xoseperez_fauxmoesp,将espasynccp -master重命名为ESPAsyncTCP。
4. 在fauxmoESP中有一个用于控制设备的示例代码,我们必须修改这个示例。打开Arduino IDE并进入Examples -> FauxmoESp -> fauxmoESP_Basic。
在开始编码部分之前,请确保已经安装了ESP板文件。如果你没有板文件,然后按照我们之前的教程开始使用Arduino IDE的ESP。
代码及工作说明
在这里我们分别解释了ESP8266和Arduino的代码,以了解该项目的工作原理。
ESP8266编程部分
这部分将与我们在以前的教程中所做的保持相同。但是这里有一些修改,因为这里的数据将通过串行通信发送到Arduino。
首先,我们包含了ESP板和fauxmoESP的重要头文件。
然后定义波特率115200和wi - fi ssid和Password。另外,为fauxmoESP创建一个实例fauxmomo,以便我们可以在代码中使用它。
为Wi-Fi设置一个单独的函数,以便它可以在void setup函数中调用。将WiFi模式设置为站模式,并在WiFi.begin()函数中传递SSID和Password。等待连接建立。另外,请注意不要使用Serial。print或println()是不必要的,因为它会将这些数据发送给Arduino。所以,避免使用它。
在void setup()函数中,将波特率传递给serial。Begin函数并调用wifissetup函数。
现在,fauxmoESP必须创建自己的web服务器,为此我们在createserver函数中传递true并将端口号设置为80。如果你在启用功能中设置false,那么它将阻止设备被发现和切换。
使用fauxmo.addDevice()函数添加设备。参数将是您的设备的名称,您将使用它来要求Alexa打开/关闭它。
现在,创建一个函数来处理从Alexa接收到的命令。在这个函数中,我们将比较字符串与设备名称,如果匹配,则使用Serial向Arduino发送一个字符。打印或串行写入。
同样,对第二个设备进行相同的操作,但这次向Arduino发送不同的字符。
在void loop()函数中,只需使用fauxmo检查来自Alexa服务器的传入数据包。handle函数,它将使用onSetstate()函数执行操作。
ESP8266的完整代码在本教程的末尾给出。使用FTDI模块或Arduino Uno板对ESP8266-01进行编程。我们将使用Arduino板进行编程。在Arduino板上上传一个空白草图或BareMinimum示例代码,并按照下面的电路图进行连接。在这里了解更多关于使用FTDI模块编程ESP8266的信息。
Arduino编程部分
Arduino代码Alexa家庭自动化是非常简单的。您必须使用Serial.available()函数检查传入的数据,当该数据与if语句中给定的条件匹配时,然后触发中继。
线路图
首先,使用Arduino板对ESP8266进行编程,进行以下连接,选择“board”为Generic ESP8266,并选择正确的端口号。最后,点击上传按钮。
模块编程完成后,只需从Arduino中移除Rx Tx线并上传Arduino部分代码。
然后再做一次连接,但要做一点改动。
连接ESP8266的Rx -> Arduino的Tx
连接ESP8266的Tx -> Arduino的Rx
从GND上取下Esp8266的GPIO 0。
除上述更改外,所有连接保持不变。
现在,我们已经完成了编码和硬件部分。是时候测试我们的家庭自动化系统了。另外,请注意,ESP8266和Amazon echo dot的Wi-Fi网络应该保持一致,即它们必须共享相同的Wi-Fi。
测试基于Arduino的Alexa家庭自动化系统
现在,试着说Alexa,发现设备。Alexa会回复说开始发现,我找到了两个设备,试着说“Alexa,打开卧室灯”。
或者,你可以在Alexa应用程序中发现这些设备。点击+号,然后发现设备。你应该看到两个装置,即卧室灯和电视。
现在我们准备测试我们的物联网Alexa家庭自动化系统。所以只要试着说Alexa,打开卧室灯,继电器应该就会打开。
现在说Alexa,关掉卧室灯,继电器一个要关掉。试着命令开/关电视。
您可以在串行监视器中看到设备的响应和状态。
还需要注意的是,fauxmoESP库存在一些bug,目前还处于改进阶段。所以,有时Alexa无法发现设备。
这就是如何使用Arduino制作基于Alexa的物联网控制的家庭自动化系统。
本文编译自iotdesignpro