使用ESP32基于物聯(lián)網(wǎng)的智能車庫(kù)門開啟器
掃描二維碼
隨時(shí)隨地手機(jī)看文章
車庫(kù)門太重,打開和關(guān)閉要費(fèi)很大的力氣。在這個(gè)萬物互聯(lián)的物聯(lián)網(wǎng)時(shí)代,我們也應(yīng)該改進(jìn)它。想象一下,只需點(diǎn)擊智能手機(jī)就可以輕松打開車庫(kù)門,這正是我們要在這個(gè)智能車庫(kù)門物聯(lián)網(wǎng)項(xiàng)目中構(gòu)建的,我們將使用ESP32開發(fā)板和Arduino IDE來構(gòu)建這個(gè)項(xiàng)目。以前我們也建立了一個(gè)類似的Wi-Fi車庫(kù)門開啟器項(xiàng)目,使用直流電機(jī),你也可以檢查一下,如果你感興趣。
構(gòu)建物聯(lián)網(wǎng)車庫(kù)開門器所需的組件
?NodeMCU ESP32
?2個(gè)伺服電機(jī)(SG90)
?電力供應(yīng)
?電路試驗(yàn)板
?跳線
我們使用NodeMCU ESP32板作為這個(gè)項(xiàng)目的微控制器。它是一個(gè)非常強(qiáng)大的、支持wifi的、非常低成本的微控制器。它是物聯(lián)網(wǎng)項(xiàng)目的完美板。我們有2臺(tái)伺服電機(jī)(SG90)用于物聯(lián)網(wǎng)車庫(kù)門的升降機(jī)構(gòu)。它是一種小型的低成本伺服電機(jī),可以在4.8到6V的工作電壓下從0到180度旋轉(zhuǎn)。這9克電機(jī)提供高達(dá)1.8公斤-厘米的扭矩在6V。我們需要一個(gè)5V電源為整個(gè)裝置供電。你可以使用5V適配器或充電寶。對(duì)于所有的連接,我們需要一個(gè)面包板和一些跳線。最后,我們還需要做一個(gè)車庫(kù),為此我們使用了紙板和海圖紙。
物聯(lián)網(wǎng)車庫(kù)門電路圖
由于我們沒有使用任何物聯(lián)網(wǎng)車庫(kù)門傳感器,所以這個(gè)項(xiàng)目的電路非常簡(jiǎn)單。我們只需要兩個(gè)伺服電機(jī)連接到ESP32開發(fā)板,如下面的連接圖所示。此外,如果您是第一次使用ESP32板,您應(yīng)該查看我們的ESP32物聯(lián)網(wǎng)項(xiàng)目以探索更多內(nèi)容,并了解可以使用該板構(gòu)建的其他有趣項(xiàng)目。
這是一個(gè)非常簡(jiǎn)單的小電路,只有很少的元件。我們需要將兩個(gè)伺服電機(jī)的VCC引腳連接到VIN引腳,將兩個(gè)伺服電機(jī)的GND引腳連接到NodeMCU ESP32的GND引腳,然后將兩個(gè)伺服電機(jī)的PWM引腳分別連接到D13和D12。下面的表格將幫助你輕松地建立聯(lián)系。
注意:本系統(tǒng)的供電電壓不要超過6V,否則會(huì)損壞伺服電機(jī)。
我們只用了一個(gè)面包板和一些連接線來構(gòu)建電路,車庫(kù)門模型的構(gòu)建是用簡(jiǎn)單的紙箱和海圖紙來完成的。在下圖中,您可以看到ESP32開發(fā)板連接到車庫(kù)內(nèi)的伺服電機(jī)。
如果您想使連接更安全,您還可以將ESP32板焊接在零PCB上,并使用男性bergstick引腳連接兩個(gè)伺服電機(jī)。此外,我們已經(jīng)使用ESP32板上的USB端口為整個(gè)項(xiàng)目供電,如果你想讓你的項(xiàng)目遠(yuǎn)程,你也可以考慮使用9V電池或鋰電池。一旦連接準(zhǔn)備好,我們就可以開始編程ESP32板,以使用物聯(lián)網(wǎng)構(gòu)建我們的智能門車庫(kù)。
如何為基于物聯(lián)網(wǎng)的智能車庫(kù)門編程
為我們的基于物聯(lián)網(wǎng)的智能車庫(kù)門編程,我們必須專注于兩件事,一是控制ESP32的伺服器,另一個(gè)是建立一個(gè)智能車庫(kù)門網(wǎng)絡(luò)服務(wù)器,可用于使用手機(jī)打開或關(guān)閉我們的智能門。完整的代碼可以在頁(yè)面底部找到,相同的解釋如下。
這些行包括Arduino草圖所需的庫(kù)。ESP32Servo.h用于使用NodeMCU ESP32微控制器控制伺服電機(jī),wifi .h是啟用設(shè)備中wifi功能的庫(kù)。
這里我們?yōu)樗欧刂谱隽艘恍┳兞?,為wifi憑證做了一些常量。確保將WiFi名稱和密碼更改為您的。聲明用于存儲(chǔ)HTTP請(qǐng)求的服務(wù)器端口和變量。
在設(shè)置部分,我們已經(jīng)為伺服電機(jī)分配了引腳,并開始建立WiFi連接。它將在串行監(jiān)視器上打印Wi-Fi連接狀態(tài)和本地IP地址。注意某個(gè)地方的IP地址,它是網(wǎng)頁(yè)的地址。
在開始循環(huán)時(shí),我們的設(shè)備始終處于來自物聯(lián)網(wǎng)web服務(wù)器的命令接收模式,并檢查是否有任何傳入數(shù)據(jù),如果是,則開始從本地IP地址獲取數(shù)據(jù)并將其存儲(chǔ)在變量中。此外,它還用于控制伺服運(yùn)動(dòng)。
在接收到命令之后,我們必須處理一件事,我們有兩個(gè)伺服電機(jī),它們必須以不同的角度同時(shí)旋轉(zhuǎn),因?yàn)樗鼈兌荚谙喾吹姆较蛏?。否則,整個(gè)系統(tǒng)就會(huì)崩潰。為了解決這個(gè)問題,我們必須做一個(gè)while循環(huán),這樣兩個(gè)電機(jī)每次都移動(dòng)1度,一個(gè)接一個(gè)地移動(dòng)到期望的位置。
這個(gè)循環(huán)的下一部分完全致力于基于HTML的web界面。我們已經(jīng)設(shè)計(jì)了按鈕和名稱,您可以根據(jù)您的選擇更改它們。它將在網(wǎng)頁(yè)上創(chuàng)建一個(gè)交互界面,這樣我們就不需要每次輸入和關(guān)閉,我們將有一個(gè)按鈕。
智能車庫(kù)門物聯(lián)網(wǎng)項(xiàng)目使用ESP32 -工作
建好電子部件后,我們必須為它造一個(gè)車庫(kù)。我用了硬紙板和一些不同顏色的海圖。然后我用熱熔膠槍把伺服電機(jī)安裝在車庫(kù)門上。
安裝伺服電機(jī)后,我們必須照顧整個(gè)面包板電路設(shè)置。我用雙面膠帶把它固定在側(cè)壁上,用透明膠帶固定電線。
完成所有設(shè)置和連接后,它就可以工作了。我用的是充電寶。
在構(gòu)建項(xiàng)目之后,有一個(gè)小的過程可以用智能手機(jī)控制它。首先,如果您想將此設(shè)備連接到路由器,請(qǐng)確保將您的智能手機(jī)連接到相同的網(wǎng)絡(luò)。你也可以使用你的智能手機(jī)熱點(diǎn)連接你的設(shè)備。當(dāng)設(shè)備連接到互聯(lián)網(wǎng)時(shí),你可以在串行監(jiān)視器上找到它的IP地址。然后在智能手機(jī)上的任何瀏覽器的搜索欄中輸入此IP地址,然后您將看到該網(wǎng)頁(yè)。您可以將該頁(yè)面添加到“主界面”中,這樣就不需要每次都重新搜索IP地址了。最后,您的設(shè)備連接到智能手機(jī),我們的智能車庫(kù)門物聯(lián)網(wǎng)項(xiàng)目已準(zhǔn)備好進(jìn)行演示。這個(gè)項(xiàng)目的完整工作可以在下面的視頻中找到,希望你學(xué)到了一些有用的東西,并喜歡這個(gè)項(xiàng)目。
//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