基于谷歌助手的家庭自动化系统
188app 188 ESP32 物联网 物联网

谷歌基于助理的家庭自动化系统ESP32, Blynk & IFTTT

控制您的家庭照明和风扇使用这个谷歌助理基于家庭自动化系统。这是非常容易设置,操作简单,和一个具有成本效益的系统,为您的家庭住宅,甚至办公室。您可以通过谷歌助手,手动按钮,和Blynk应用程序操作它。

我们的项目需要什么东西:

  • ESP32开发委员会
  • 继电器模块(2通道,4通道或更多)
  • 瞪眼的助理
  • Blynk物联网平台
  • IFTTT Webhooks服务
  • Arduino IDE

家庭自动化系统使用ESP32

如果你是一个基于物联网项目的初学者,这是一个有点大的项目。在这里,我们将使用不同的平台,并将它们集成起来,来制作我们的家庭自动化系统。现在我将指导您在整个项目中一步一步,正确地遵循所有步骤。

谷歌基于助手的家庭自动化系统:

家用自动化使用谷歌助手框图

Blynk App:

第一步是配置Blynk应用程序

从游戏商店或应用商店下载Blynk应用程序,或者你可以通过网站。

使用你的电子邮件帐户或注册与您的谷歌账户

创建一个新的项目并给它一个名称,从列表中选择设备类型ESSP32。

选择连接类型无线网络从给定的选项,并按创建。

您将在您注册的电子邮件帐户中收到一个认证令牌。不要分享它,任何人有这个代码可以控制你的设备。

点击“+”图标,从小部件中添加一个按钮,在这里你会发现各种类型的小部件。

点击按钮编辑,选择你想控制的ESP32的引脚号?(在我们的例子中是25)。

现在选择ON状态为0,OFF状态为逻辑1,这是一个活动低逻辑信号。选择要切换的模式,而不是按下按钮。

谷歌助理的家庭自动化

第二步ESP32:

在步骤2中,我们将设置ESP32模块。

下载Arduino草图文件,在Arduino IDE中打开。

将Blynk应用生成的AuthToken粘贴到define部分。

输入你的Wi-Fi SSID和密码。

将继电器模块连接到ESP32板的引脚25和26。

将草图上传到ESP32单板。

将它连接到您的Wi-Fi,现在您可以通过Blynk应用程序控制中继模块。

家庭自动化系统ESP32

继电器驱动电路:

这是一个继电器驱动电路,用于驱动继电器,并隔离和保护单片机ESP32免受高压交流。我们使用MOC8711光隔离器进行完全隔离和控制。

继电器驱动电路

第三步IFTTT:

这是最后一步,我们将使用IFTTT webhooks服务通过Blynk服务器连接我们的谷歌助手到ESP32。

下载IFTTT手机应用程序或进入网站,用您的电子邮件或谷歌账号注册IFTTT并开始。

IFTTT webhook applet

在这里,您可以创建各种条件小程序。IFTTT代表"如果这那么那“如果发生了一个事件,接下来该怎么办?”

谷歌助理:

创建你的第一个applet,点击创建,然后选择“I”f这个“条件,然后选择谷歌助手。选择说一个简单的短语。加上你的短语,加上助手会说什么回应,然后继续。

IFTTT webhooks设置

人:

在“Then That”部分选择webhooks并相应地配置它。为此,我们需要Blynk云的IP地址。

188.166.206.43是blynk-cloud.com的IP地址,您可以通过运行ping blynk-cloud.com命令在CMD

https://188.166.206.43/Blynk认证令牌/update/D26

这是人则URL,你需要身份验证令牌以便访问您的应用程序。将您的认证令牌放在URL中。

D26是我们要控制的密码。

选择“放置方法”,“应用类型”为“应用”JSON,还有身体类型(“0”)并继续。检查您的applet并完成您已成功创建的applet。

您需要创建两个applet,一个是打开的,另一个是关闭的。前一个是关闭,第二个是打开,你需要改变触发词和JSON价值(“1”)其他一切都保持不变。

IFTTT webhooks url

现在登录谷歌应用程序与相同的谷歌帐户,并访问谷歌助手。说出打开和关闭电器的短语。

基于谷歌助手的家庭自动化系统

有了这个家庭自动化系统,你可以用三种方式控制你的一个设备

  • 谷歌的助理
  • Blynk应用程序
  • 手动按钮

这是一个完整的家庭自动化解决方案,您可以通过这些应用程序控制大量的设备,您所需要的只是修改新的连接的代码。此外,你还可以为这些应用程序购买付费计划,这样你就可以获得一些额外的功能。

谷歌基于助手的家庭自动化系统由ESP32, Blynk & IFTTT设计:

观看完整的视频。

基于助理的家庭自动化系统代码谷歌

#include  BlynkTimer定时器;#define RelayPin1 26 //D5 #define RelayPin2 27 //D25 #define SwitchPin1 32 //D32 #define SwitchPin2 33 //D15 #define wifiLed 25 //D2 #define VPIN_BUTTON_1 V1 #define VPIN_BUTTON_2 V2 int toggleState_1 = 1;//定义整数以记住中继1的切换状态int toggleState_2 = 1;//定义整数以记住中继2的切换状态int wifiFlag = 0;#define WIFI_SSID "WIFI NAME" //输入WIFI NAME #define WIFI_PASS "WIFI PASSWORD" //输入WIFI PASSWORD void relayOnOff(int relay){switch(relay){case 1: if(toggleState_1 == 1){digitalWrite(RelayPin1, LOW);//打开继电器1 toggleState_1 = 0;系列。println(“Device1”);} else{digitalWrite(RelayPin1, HIGH);//关闭继电器1 toggleState_1 = 1; Serial.println("Device1 OFF"); } delay(100); break; case 2: if(toggleState_2 == 1){ digitalWrite(RelayPin2, LOW); // turn on relay 2 toggleState_2 = 0; Serial.println("Device2 ON"); } else{ digitalWrite(RelayPin2, HIGH); // turn off relay 2 toggleState_2 = 1; Serial.println("Device2 OFF"); } delay(100); break; default : break; } } void with_internet(){ //Manual Switch Control if (digitalRead(SwitchPin1) == LOW){ delay(200); relayOnOff(1); Blynk.virtualWrite(VPIN_BUTTON_1, toggleState_1); // Update Button Widget } else if (digitalRead(SwitchPin2) == LOW){ delay(200); relayOnOff(2); Blynk.virtualWrite(VPIN_BUTTON_2, toggleState_2); // Update Button Widget } } void without_internet(){ //Manual Switch Control if (digitalRead(SwitchPin1) == LOW){ delay(200); relayOnOff(1); } else if (digitalRead(SwitchPin2) == LOW){ delay(200); relayOnOff(2); } } BLYNK_CONNECTED() { // Request the latest state from the server Blynk.syncVirtual(VPIN_BUTTON_1); Blynk.syncVirtual(VPIN_BUTTON_2); } // When App button is pushed - switch the state BLYNK_WRITE(VPIN_BUTTON_1) { toggleState_1 = param.asInt(); digitalWrite(RelayPin1, toggleState_1); } BLYNK_WRITE(VPIN_BUTTON_2) { toggleState_2 = param.asInt(); digitalWrite(RelayPin2, toggleState_2); } void checkBlynkStatus() { // called every 3 seconds by SimpleTimer bool isconnected = Blynk.connected(); if (isconnected == false) { wifiFlag = 1; digitalWrite(wifiLed, LOW); //Turn off WiFi LED } if (isconnected == true) { wifiFlag = 0; digitalWrite(wifiLed, HIGH); //Turn on WiFi LED } } void setup() { Serial.begin(9600); pinMode(RelayPin1, OUTPUT); pinMode(RelayPin2, OUTPUT); pinMode(wifiLed, OUTPUT); pinMode(SwitchPin1, INPUT_PULLUP); pinMode(SwitchPin2, INPUT_PULLUP); //During Starting all Relays should TURN OFF digitalWrite(RelayPin1, toggleState_1); digitalWrite(RelayPin2, toggleState_2); WiFi.begin(WIFI_SSID, WIFI_PASS); timer.setInterval(3000L, checkBlynkStatus); // check if Blynk server is connected every 3 seconds Blynk.config(AUTH); } void loop() { if (WiFi.status() != WL_CONNECTED) { Serial.println("WiFi Not Connected"); } else { Serial.println("WiFi Connected"); Blynk.run(); } timer.run(); // Initiates SimpleTimer if (wifiFlag == 0) with_internet(); else without_internet(); }

留下回复

你的电邮地址将不会公布。必填字段已标记

这个网站使用Akismet来减少垃圾邮件。了解如何处理您的评论数据