|
在本篇文章中我们主要介绍关于如何使用NodeMCU和Android实现Wifi和语音控制家庭自动化。我们之前介绍过类似的项目,即使用NodeMCU和Alexa设计基于语音的家庭自动化。我们使用Alexa来控制家用电器。现在,我们将制作类似的项目,但这次不是使用Alexa,而是在Android智能手机上开发自己的应用程序,以实现在本地控制我们的家用设备。
在本篇文章中,我们将4通道继电器与NodeMCU ESP8266模块连接,并控制4个不同的LED。这4个不同的LED类似于4个不同的家用电器。我们将使用具有5 + 5按钮的Android应用程序将信号发送到NodeMCU,以控制继电器输出。每个NodeMCU都有特定的IP地址。我们会将这个IP地址分配给Android应用进行访问控制。同样,需要NodeMCU连接到本地Wifi。
所需的组件 ● NodeMCU ESP8266 12E Wifi模块 ● 4通道继电器模块 ● 4个不同颜色的LED ● 5伏电源 ● 面包板 ● 连接导线
功能框图 以下是使用NodeMCU和Android实现Wifi和语音控制家庭自动化的功能框图。它简单易懂。
NodeMCU使用GPIO引脚与4通道继电器连接。 NodeMCU的输出引脚通过220欧姆电阻连接到4个不同的LED。 NodeMCU连接到本地Wifi,并能够通过Internet接收信号。
Android设备上安装了“Home Automation Control” Android应用。要控制NodeMCU的输入/输出,请在Android App IP框中输入NodeMCU的IP地址。
完成此设置后,您可以在世界任何地方控制Android App。您的Android手机充当遥控器,NodeMCU充当接收器,信号通过Internet传输。
连接电路图
我们将使用4通道继电器模块来控制4个LED,模拟4个家用设备。类似地,将4个输出通过4个电阻连接到4个不同的LED,如上图所示。
Wifi和语音控制的Android应用程序
Android应用程序将发送一个字符串,该字符串必须由代码解释才能激活定义如下的每个继电器: 继电器1: 打开:“ r1on”; 关闭:“ r1off”;
继电器2: 开启:“ r2on”; 关闭:“ r2off”
继电器3: 开启:“ r3on”; 关闭:“ r3off”
继电器4: 开启:“ r4on”; 关闭:“ r4off”
如果Android App发送命令“ r1on”,则打开继电器1。我们还定义了“组命令”以同时打开(“ allon”)和关闭(“ alloff”)所有设备。同样,还会提供语音输入图像,单击该图像会弹出弹出窗口,让Google助手接受语音命令。
使用MIT App Inventor创建Android应用程序 此步骤是可选的。我已通过下面的链接直接下载了Android应用。我还添加了.aia链接,可以根据您的需要直接下载和修改该链接。
创建Android应用程序访问http://ai2.appinventor.mit.edu/并创建一个项目。
内部按钮包含用于继电器的继电器开关以及语音输入命令,如下图所示。您可以观看下面的视频以获取更多详细信息。
Android App下载链接 如果您是初学者,并且不想制作任何Android应用,则只需从下面的链接下载该应用即可:下载Android应用程序。 您还可以通过导出.aia文件来修改Android应用:下载.aia文件
查找设备IP地址的代码 只需复制此代码并上传到Arduino IDE。代码上传后,单击“串口监视器”并获取IP。根据您的Android应用所需复制此IP。 - #include <ESP8266WiFi.h>
- WiFiClient client;
- WiFiServer server(80);
- const char* ssid = "how2electronics";
- const char* password = "alhabibi";
- void setup()
- {
- Serial.begin(115200);
- connectWiFi();
- server.begin();
- }
- void loop()
- {
- }
- /* connecting WiFi */
- void connectWiFi()
- {
- Serial.println("Connecting to WIFI");
- WiFi.begin(ssid, password);
- while ((!(WiFi.status() == WL_CONNECTED)))
- {
- delay(300);
- Serial.print("..");
- }
- Serial.println("");
- Serial.println("WiFi connected");
- Serial.println("NodeMCU Local IP is : ");
- Serial.print((WiFi.localIP()));
- }
复制代码
源代码/程序 以下是使用NodeMCU和Android实现Wifi和语音控制家庭自动化的源代码。 编译该代码并将其上传到您的NodeMCU开发板上。 警告:上传代码时,请断开继电器电源引脚。 - #include <ESP8266WiFi.h>
- WiFiClient client;
- WiFiServer server(80);
- const char* ssid = "how2electronics";
- const char* password = "alhabibi";
- String command =""; // Command received from Android device
- // Set Relay Pins
- int relay1 = 1;
- int relay2 = 3;
- int relay3 = 12;
- int relay4 = 14;
- void setup()
- {
- Serial.begin(115200);
- pinMode(relay1, OUTPUT);
- pinMode(relay2, OUTPUT);
- pinMode(relay3, OUTPUT);
- pinMode(relay4, OUTPUT);
- digitalWrite(relay1,HIGH);
- digitalWrite(relay2,HIGH);
- digitalWrite(relay3,HIGH);
- digitalWrite(relay4,HIGH);
-
- connectWiFi();
- server.begin();
- }
- void loop()
- {
- client = server.available();
- if (!client) return;
- command = checkClient ();
- if (command == "r1on" || command == "turn on relay 1" || command == "relay 1 on") digitalWrite(relay1,0);
- else if (command == "r1off" || command == "turn off relay 1" || command == "relay 1 off") digitalWrite(relay1,1);
- else if (command == "r2on" || command == "turn on relay 2" || command == "relay 2 on") digitalWrite(relay2,0);
- else if (command == "r2off" || command == "turn off relay 2" || command == "relay 2 off") digitalWrite(relay2,1);
- else if (command == "r3on" || command == "turn on relay 3" || command == "relay 3 on") digitalWrite(relay3,0);
- else if (command == "r3off" || command == "turn off relay 3" || command == "relay 3 off") digitalWrite(relay3,1);
- else if (command == "r4on" || command == "turn on relay 4" || command == "relay 4 on") digitalWrite(relay4,0);
- else if (command == "r4off" || command == "turn off relay 4" || command == "relay 4 off") digitalWrite(relay4,1);
- else if (command == "allon" || command == "Turn on all devices" || command == "all on")
- {
- digitalWrite(relay1,LOW);
- digitalWrite(relay2,LOW);
- digitalWrite(relay3,LOW);
- digitalWrite(relay4,LOW);
- }
- else if (command == "alloff" || command == "Turn off all devices" || command == "all off")
- {
- digitalWrite(relay1,HIGH);
- digitalWrite(relay2,HIGH);
- digitalWrite(relay3,HIGH);
- digitalWrite(relay4,HIGH);
- }
- sendBackEcho(command); // send command echo back to android device
- command = "";
- }
- /* connecting WiFi */
- void connectWiFi()
- {
- Serial.println("Connecting to WIFI");
- WiFi.begin(ssid, password);
- while ((!(WiFi.status() == WL_CONNECTED)))
- {
- delay(300);
- Serial.print("..");
- }
- Serial.println("");
- Serial.println("WiFi connected");
- Serial.println("NodeMCU Local IP is : ");
- Serial.print((WiFi.localIP()));
- }
- /* check command received from Android Device */
- String checkClient (void)
- {
- while(!client.available()) delay(1);
- String request = client.readStringUntil('\r');
- request.remove(0, 5);
- request.remove(request.length()-9,9);
- return request;
- }
- /* send command echo back to android device */
- void sendBackEcho(String echo)
- {
- client.println("HTTP/1.1 200 OK ");
- client.println("Content-Type: text/html");
- client.println("");
- client.println("<!DOCTYPE HTML>");
- client.println("<html>");
- client.println(echo);
- client.println("</html>");
- client.stop();
- delay(1);
- }
复制代码
|