在以前的教程中,我们已经了解了如何构建Amazon Echo Speaker,以及如何使用Alexa Voice控制任何Raspberry Pi GPIO。现在,我们正在开发一个IoT项目,以 使用AlexaPi和ESP-12E(或任何ESP板)控制世界各地的家用电器。
硬件要求
- 安装了AVS的Raspberry Pi
- USB 2.0麦克风/网络摄像头
- ESP-12E
- 继电器模块
- LED / AC灯泡
您应该已经为Raspberry Pi安装了Alexa语音服务,并且已正确配置了Amazon Developer Account。因此,请通过下面的教程来准备Alexa服务。
- 使用Raspberry Pi构建自己的Amazon Echo
Alexa语音控制LED的项目流程
对于该物联网控制的LED项目,我们将遵循以下流程图:
因此,过程是这样的。首先,通过USB Mic将输入输入给Raspberry Pi 。现在,该记录被发送到Alexa语音服务,并且在语音识别之后,AVS将数据发送到IFTTT,并触发IFTTT中的条件。根据配方,IFTTT会将命令发送到MQTT经纪人Adafruit IO,以执行操作。然后,ESP 12e将通过MQTT协议从Adafruit IO接收数据,并且LED将根据命令打开/关闭。
在这里,我们使用了用于麦克风的USB WebCam。我们已经使用Alexa语音服务打开灯泡了,但是它只能处理本地连接的设备。
由于我们假设您已经安装了带有Alexa语音服务的Raspberry Pi,因此我们仅需执行以下两个步骤,我们将逐一进行说明:
- 设置一个Adafruit帐户进行通信
- 使用IFTTT将Alexa链接到Adafruit IO
- 在ESP12中上传代码
设置一个Adafruit帐户进行通信
首先,我们将在Adafruit IO中进行提要。Feed中存储了由IFTTT发送的数据。要制作Feed,请按照以下步骤操作:
步骤1:-使用您的凭据登录到Adafruit IO,如果没有帐户,请注册。
第2步:-单击 我的帐户->仪表板
第3步:-单击 操作 并 创建一个新的仪表板 。
步骤4:-给您的Feed提供名称和描述,然后点击 创建 。
步骤5:-单击“ 密钥” 按钮并记下AIO密钥,我们将在代码中使用此密钥。
步骤6:-单击“ +”按钮创建一个新块,然后单击“切换”按钮。
步骤7:-现在,输入Feed名称,然后点击 创建 。然后选择提要,然后单击下一步。
第8步: -在块设置,写“1” 按钮,文本 字段和“0”在 按钮OFF文本 字段。
第9步:-您的Feed已成功创建。
使用IFTTT将Alexa链接到Adafruit IO
请按照以下步骤在IFTTT中创建小程序/食谱:
步骤1:-使用您的凭据登录IFTTT或如果您没有帐户,请 注册 。
步骤2: 在“我的小程序”上,单击“ 新小程序”
步骤3:- 点击+此
步骤4:- 搜索Amazon Alexa并单击它,并使用您的Amazon开发人员帐户详细信息登录。
步骤5:- 选择触发条件, 说出特定的词组
步骤6:- 提供 “打开灯” 作为短语,单击“ 创建触发器”。
步骤7:- 点击 +
步骤8:-搜索 Adafruit 并单击它。
步骤9:-使用您的凭据登录到Adafruit帐户。单击 发送数据到Adafruit 。
选择您刚在Adafruit IO中创建的Feed名称。现在,在数据中输入“ 1”以保存,这意味着LED将亮起。单击 创建动作 。
步骤10:-按照相同的步骤 制作小程序以关闭LED 。只需在“要保存的数据”字段中输入“ 0”即可。所有步骤均保持不变。
您已经完成了一半的工作。现在,该对ESP-12E进行编程了。
ESP12代码说明
我们将使用Arduino IDE编写ESP12。完整的代码在本教程的结尾给出。
首先,我们需要一个Adafruit Mqtt库,可以从此链接下载该库。只需打开Arduino IDE。转到 示例-> adafruit mqtt库-> mqtt_esp8266
我们将根据我们的AIO密钥和Wi-Fi凭据编辑此代码。
首先,我们包含 了ESP8266WIFI和Adafruit MQTT的 所有 库 。
#包括
我们为您的Wi-Fi定义了SSID和密码,您想从中连接ESP-12e。
#define WLAN_SSID“ xxxxxxxx” #define WLAN_PASS“ xxxxxxxxxxx”
本节定义Adafruit服务器和服务器端口,它们分别固定为“ io.adafruit.com ”和“ 1883 ”。
#define AIO_SERVER“ io.adafruit.com” #define AIO_SERVERPORT 1883
使用您在制作Feed时从Adafruit网站复制的用户名和AIO密钥替换以下字段。
#define AIO_USERNAME“ ********” #define AIO_KEY“ ********************************”
然后创建一个ESP8266 WiFiClient类以连接到MQTT服务器。
WiFiClient客户端;
通过传入WiFi客户端和MQTT服务器以及登录详细信息来设置MQTT客户端类。
Adafruit_MQTT_Client mqtt(&client,AIO_SERVER,AIO_SERVERPORT,AIO_USERNAME,AIO_KEY);
设置一个称为“ light”的供稿以订阅更改。
Adafruit_MQTT_Subscribe light = Adafruit_MQTT_Subscribe(&mqtt,AIO_USERNAME“ / feeds / light”);
在设置功能中,我们声明要在其上输出的ESP-12e的PIN。我正在使用D0引脚作为输出。然后,我们将ESP-12e连接到Wi-fi接入点。
void setup(){ Serial.begin(115200); 延迟(10); pinMode(D0,OUTPUT); Serial.println(F(“ Adafruit MQTT demo”));; //连接到WiFi接入点。 Serial.println(); Serial.println(); Serial.print(“正在连接”); Serial.println(WLAN_SSID); WiFi.begin(WLAN_SSID,WLAN_PASS); 而(WiFi.status()!= WL_CONNECTED){ …。 …。 …
设置MQTT订阅以进行轻饲料。
mqtt.subscribe(&light); }
在 循环 功能中,我们将使用MQTT_connect()确保与MQTT服务器的连接处于活动状态。功能。
无效循环(){ MQTT_connect();
现在,我们订阅“ light”提要,并从adafruit IO中获取字符串,然后使用atoi()将其转换为数字;函数,并使用digitalWrite()将此数字写入PIND0;功能。
Adafruit_MQTT_Subscribe *订阅; while((subscription = mqtt.readSubscription(5000))){ if(subscription ==&light){ Serial.print(F(“ Got_light:”)); Serial.println((char *)light.lastread); uint16_t num = atoi((char *)light.lastread); digitalWrite(16,num); }
加工:
将您的ESP-12E与笔记本电脑连接,并上传以下代码(不要忘记在代码中编辑您的凭据)。
将LED或继电器连接到引脚D0。现在,确保您的Alexa服务正在RPi上运行。
要发出任何命令,您需要在每次要发送命令时调用“ Alexa”以唤醒Alexa服务。您会听到哔声。听到哔哔声后,请说“ Alexa触发器打开灯。 您可以在瞬间看到灯亮起。然后,如果您说“ Alexa触发器关闭灯 ”,则灯应关闭。
而已…。您可以通过添加ESP-12E的GPIO引脚以及在IFTTT中使用不同的短语制作不同的Applet,从而在上述代码中添加更多设备。
查看下面的完整代码和演示视频。另外在这里检查我们所有的家庭自动化项目