使用ESP32基于物联网的智能车库门开启器
扫描二维码
随时随地手机看文章
车库门太重,打开和关闭要费很大的力气。在这个万物互联的物联网时代,我们也应该改进它。想象一下,只需点击智能手机就可以轻松打开车库门,这正是我们要在这个智能车库门物联网项目中构建的,我们将使用ESP32开发板和Arduino IDE来构建这个项目。以前我们也建立了一个类似的Wi-Fi车库门开启器项目,使用直流电机,你也可以检查一下,如果你感兴趣。
构建物联网车库开门器所需的组件
•NodeMCU ESP32
•2个伺服电机(SG90)
•电力供应
•电路试验板
•跳线
我们使用NodeMCU ESP32板作为这个项目的微控制器。它是一个非常强大的、支持wifi的、非常低成本的微控制器。它是物联网项目的完美板。我们有2台伺服电机(SG90)用于物联网车库门的升降机构。它是一种小型的低成本伺服电机,可以在4.8到6V的工作电压下从0到180度旋转。这9克电机提供高达1.8公斤-厘米的扭矩在6V。我们需要一个5V电源为整个装置供电。你可以使用5V适配器或充电宝。对于所有的连接,我们需要一个面包板和一些跳线。最后,我们还需要做一个车库,为此我们使用了纸板和海图纸。
物联网车库门电路图
由于我们没有使用任何物联网车库门传感器,所以这个项目的电路非常简单。我们只需要两个伺服电机连接到ESP32开发板,如下面的连接图所示。此外,如果您是第一次使用ESP32板,您应该查看我们的ESP32物联网项目以探索更多内容,并了解可以使用该板构建的其他有趣项目。
这是一个非常简单的小电路,只有很少的元件。我们需要将两个伺服电机的VCC引脚连接到VIN引脚,将两个伺服电机的GND引脚连接到NodeMCU ESP32的GND引脚,然后将两个伺服电机的PWM引脚分别连接到D13和D12。下面的表格将帮助你轻松地建立联系。
注意:本系统的供电电压不要超过6V,否则会损坏伺服电机。
我们只用了一个面包板和一些连接线来构建电路,车库门模型的构建是用简单的纸箱和海图纸来完成的。在下图中,您可以看到ESP32开发板连接到车库内的伺服电机。
如果您想使连接更安全,您还可以将ESP32板焊接在零PCB上,并使用男性bergstick引脚连接两个伺服电机。此外,我们已经使用ESP32板上的USB端口为整个项目供电,如果你想让你的项目远程,你也可以考虑使用9V电池或锂电池。一旦连接准备好,我们就可以开始编程ESP32板,以使用物联网构建我们的智能门车库。
如何为基于物联网的智能车库门编程
为我们的基于物联网的智能车库门编程,我们必须专注于两件事,一是控制ESP32的伺服器,另一个是建立一个智能车库门网络服务器,可用于使用手机打开或关闭我们的智能门。完整的代码可以在页面底部找到,相同的解释如下。
这些行包括Arduino草图所需的库。ESP32Servo.h用于使用NodeMCU ESP32微控制器控制伺服电机,wifi .h是启用设备中wifi功能的库。
这里我们为伺服控制做了一些变量,为wifi凭证做了一些常量。确保将WiFi名称和密码更改为您的。声明用于存储HTTP请求的服务器端口和变量。
在设置部分,我们已经为伺服电机分配了引脚,并开始建立WiFi连接。它将在串行监视器上打印Wi-Fi连接状态和本地IP地址。注意某个地方的IP地址,它是网页的地址。
在开始循环时,我们的设备始终处于来自物联网web服务器的命令接收模式,并检查是否有任何传入数据,如果是,则开始从本地IP地址获取数据并将其存储在变量中。此外,它还用于控制伺服运动。
在接收到命令之后,我们必须处理一件事,我们有两个伺服电机,它们必须以不同的角度同时旋转,因为它们都在相反的方向上。否则,整个系统就会崩溃。为了解决这个问题,我们必须做一个while循环,这样两个电机每次都移动1度,一个接一个地移动到期望的位置。
这个循环的下一部分完全致力于基于HTML的web界面。我们已经设计了按钮和名称,您可以根据您的选择更改它们。它将在网页上创建一个交互界面,这样我们就不需要每次输入和关闭,我们将有一个按钮。
智能车库门物联网项目使用ESP32 -工作
建好电子部件后,我们必须为它造一个车库。我用了硬纸板和一些不同颜色的海图。然后我用热熔胶枪把伺服电机安装在车库门上。
安装伺服电机后,我们必须照顾整个面包板电路设置。我用双面胶带把它固定在侧壁上,用透明胶带固定电线。
完成所有设置和连接后,它就可以工作了。我用的是充电宝。
在构建项目之后,有一个小的过程可以用智能手机控制它。首先,如果您想将此设备连接到路由器,请确保将您的智能手机连接到相同的网络。你也可以使用你的智能手机热点连接你的设备。当设备连接到互联网时,你可以在串行监视器上找到它的IP地址。然后在智能手机上的任何浏览器的搜索栏中输入此IP地址,然后您将看到该网页。您可以将该页面添加到“主界面”中,这样就不需要每次都重新搜索IP地址了。最后,您的设备连接到智能手机,我们的智能车库门物联网项目已准备好进行演示。这个项目的完整工作可以在下面的视频中找到,希望你学到了一些有用的东西,并喜欢这个项目。
//Code for IoT Smart Garage Door Opener
//by iotdesignpro.com
#include
#include
Servo servo1;
Servo servo2;
const char* ssid = "0000";
const char* password = "12345678";
int pos = 0;
WiFiServer server(80); // Set port to 80
String header; // Stores the HTTP request
String doorstate = "off"; // state of door
void setup() {
servo1.attach(15);
servo2.attach(13);
Serial.begin(115200);
// Set the pinmode of the pins to which the LEDs are connected and turn them low to prevent flunctuations
//connect to access point
WiFi.begin(ssid, password);
Serial.print("Connecting to ");
Serial.println(ssid);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
// Print local IP address and start web server
Serial.println("");
Serial.println("WiFi connected.");
server.begin();
Serial.println("IP address: ");
Serial.println(WiFi.localIP()); // this will display the Ip address of the Pi which should be entered into your browser
}
void loop() {
WiFiClient client = server.available(); // Listen for incoming clients
if (client) { // If a new client connects,
String currentLine = ""; // make a String to hold incoming data from the client
while (client.connected()) { // loop while the client's connected
if (client.available()) { // if there's bytes to read from the client,
char c = client.read(); // read a byte, then
Serial.write(c); // print it out the serial monitor
header += c;
if (c == '\n') { // if the byte is a newline character
// if the current line is blank, you got two newline characters in a row.
// that's the end of the client HTTP request, so send a response:
if (currentLine.length() == 0) {
client.println("HTTP/1.1 200 OK");
client.println("Content-type:text/html");
client.println("Connection: close");
client.println();
if (header.indexOf("GET /door/on") >= 0) {
Serial.println("Door Open");
doorstate = "on";
while (pos < 100) {
Serial.println(pos);
servo1.write(pos);
servo2.write(180 - pos);
pos++;
delay(10);
}
} else if (header.indexOf("GET /door/off") >= 0) {
Serial.println("Door Close");
doorstate = "off";
while (pos > 0) {
servo1.write(pos);
servo2.write(180 - pos);
Serial.println(pos);
pos--;
delay(10);
}
}
// Display the HTML web page
client.println("");
client.println("");
client.println("");
// CSS to style the on/off buttons
client.println("");
client.println("
IoT Based Garage Door
");
if (doorstate == "off") {
client.println("
Open
");
} else {
client.println("
Close
");
}
client.println("
本文编译自iotdesignpro