電子發(fā)燒友App

硬聲App

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內(nèi)不再提示
創(chuàng)作
電子發(fā)燒友網(wǎng)>電子資料下載>電子資料>基于NODEMCU ESP8266板和6通道繼電器的家庭自動化板

基于NODEMCU ESP8266板和6通道繼電器的家庭自動化板

2022-10-19 | zip | 0.76 MB | 次下載 | 免費

資料介紹

描述

您好,歡迎回來。

這是一款基于 NODEMCU ESP8266 板和 6 通道繼電器的家庭自動化板。

?

該板通過任何瀏覽器訪問其 Web 應用程序在本地控制,它目前可以控制 6 種不同的輸出,但我們可以添加更多,并且很容易更改額外輸出的代碼。

該項目的目標是制作一個簡單易用的家庭自動化系統(tǒng),任何人都可以通過幾個簡單的步驟來制作和學習。

讓我們開始吧。

所需材料

?
?

以下是該項目中使用的東西-

  • ESP8266 NodeMCU
  • 6通道繼電器模塊
  • PCB面包板
  • 面包板
  • 發(fā)光二極管
  • 母頭針
  • USB 微型 THT 端口
  • 用于焊接的銅線或引線

基本面包板設置

?
?
?
pYYBAGNOSkmAW9PcAADlleMv3h4008.jpg
?
1 / 2
?

我們首先準備面包板設置,該設置由與 ESP8266 Nodemcu 板的 D0、D1、D2、D3、D4 和 D5 引腳連接的六個 LED 組成。

正在使用 NodeMCU,但任何 ESP8266 板都可以在這里使用,我們甚至可以通過使用最小的 ESP8266 設置來準備使用 ESP12F 或 12E 模塊的設置。

  • 我們將 LED 與 ESP8266 的 GPIO 引腳連接,如上述接線 Draigarm 中所述,并在其中上傳主草圖。
  • 只需確保在上傳之前更改草圖中的 SSID 和密碼即可。

結果

?
?
?
?
?
1 / 2
?
  • 上傳 Sketch 后,我們打開串口監(jiān)視器并等待 ESP 與本地 WIFI 網(wǎng)絡連接。
  • 當 ESP 連接到網(wǎng)絡時,您將看到本地 IP 地址,復制此 IP 地址并在瀏覽器中打開它。
  • 我們現(xiàn)在可以通過按下 Web 應用程序中的按鈕來切換 LED。

下一步,使用 PCB BREADBOARD 準備自定義設置

?
?
?
poYBAGNOSk2Ae6xCAAQB5wrvTwc157.jpg
?
1 / 2
?

完成面包板設置后,我們?yōu)樵擁椖繙蕚渲?PCB,該項目將在定制 PCB 面包板上制作。

PCB 面包板是我為快速原型工作而開發(fā)的定制板。它由與普通面包板相同的形狀因子排列的孔組成。

每個孔距每個孔 2.54 毫米,就像物理面包板和插頭引腳中的一樣。

PCBWAY 制造了這個,它的質(zhì)量非常好。

繼電器模塊

?
?
?
?
?
1 / 3
?

這是控制交流甚至直流負載的主要工作的組件,即 6 通道繼電器模塊。

6路繼電器輸出模塊觸點容量為10A 250V,因此可以處理2500W閾值以下的任何負載。

輸入使用 LOW 信號工作并打開繼電器,使用 HIGH 信號關閉繼電器。

它包含 6 個紅色 LED,每個 LED 都與一個光耦合器連接,該光耦合器控制 N 溝道晶體管的柵極,該晶體管然后打開或關閉繼電器。

每個繼電器都與相同的設置連接,該設置由一個光耦控制繼電器的晶體管組成

pYYBAGNOSk-AA8X5AAFCJXjkjVw443.jpg
?

我已經(jīng)在萬用表的幫助下按照軌跡為這個繼電器模塊創(chuàng)建了一個示意圖,您可以使用這個示意圖來重新制作您的繼電器模塊。

PCBWAY禮品店

poYBAGNOSlKAWa65AAHT7XdzqZg954.jpg
?

至于采購繼電器模塊,我使用PCBWAY 的禮品店訂購傳感器。

https://www.pcbway.com/project/gifts_detail/6_Channel_DC_5V_Relay_Module_Relay_Expansion_Board.html

除了 PCB Services,PCBWAY 也有專門的元件商店。

PCBWAY GIFTSHOP 是一個在線市場,我們可以從中采購所有主要的電子產(chǎn)品,如 Arduino 板、Raspberry Pi 板、模塊、傳感器等。

PCBWAY 有這個系統(tǒng),可以讓我們通過豆子從他們的禮品店購買任何東西,豆子就像一種可兌換的貨幣或優(yōu)惠券,我們通過在 PCBWAY 上下訂單或在社區(qū)中分享您的項目來獲得豆子。

從這里檢查 PCBWAY 以獲得出色的 PCB 服務 - https://www.pcbway.com/

最終示意圖

pYYBAGNOSlWAABvcAANcHou2BDs083.jpg
?

這是連接 ESP8266 NodeMCU 板和 6 通道繼電器模塊的示意圖。

  • ESP8266 的 D0 引腳與 Relay 的 IN1 引腳相連。
  • D1 與 IN2 相連
  • D2與IN3相連
  • D3與IN4相連
  • D4與IN5相連
  • D5與IN6相連
  • VCC 或 USB IN 電壓與 Relay Module 的 VCC 和 NodeMCU Board 的 Vin 相連。
  • 地到地

主要組件

?
?
?
?
?
1 / 4
?
  • 我們首先將母頭針連接器添加到 ESP8266 板上并切割它以使其適合兩側,然后我對繼電器模塊執(zhí)行相同的過程來開始主組件。這里的目標不是直接將 nodemcu 的頭針和繼電器與面包板焊接,使用頭針,以便稍后我們可以將它們都移除并重新使用電路板。
  • 接下來,我們將繼電器模塊和 NODEMCU 放置在 PCB 面包板上
  • 我們還在 PCB 面包板的一側添加了一個 USB 端口,用于將外部電源連接到 NODEMCU 和 RELAY MODULE。
  • 然后我們將所有組件焊接到面包板上。

將 IO 引腳與繼電器模塊連接

?
?
?
?
?
1 / 4
?
  • 接下來,我們使用銀銅線將ESP8266 Board的每個IO Pin與nodemcu Board的IO Pin連接起來。
  • 我們在 GPIO 引腳附近添加銅線,然后將其焊接到位,接下來我們在前一條銅線的末端添加另一根銅線,并與繼電器模塊的 IO 引腳連接。
  • 我們?yōu)樗?GPIO 執(zhí)行此操作
  • 對于一些連接,我們添加了電線。

總裝

?
?
  • 完成焊接工作后,我們添加帶有繼電器模塊的 PCB 面包板,電路板現(xiàn)已完成,我們可以繼續(xù)向其添加主代碼。

WEB APP及其主要代碼

poYBAGNOSlmAULdJAACzYdL7QL4928.jpg
?

這是用于控制家庭自動化設置的主要 WEB PAGE 或 WEB 應用程序,此網(wǎng)絡應用程序是完全定制的,完全由一個草圖制成,無需使用任何第三方工具。

#include 

// Replace with your network credentials
const char *ssid = "add your ssid";
const char *password = "add your password yo";

// Set web server port number to 80
WiFiServer server(80);

// Variable to store the HTTP request
String header;

// Auxiliar variables to store the current output state
String output1State = "off";
String output2State = "off";
String output3State = "off";
String output4State = "off";
String output5State = "off";


// Assign output variables to GPIO pins
const int output1 = 16; //D0
const int output2 = 5;  //D1
const int output3 = 4;  //D2
const int output4 = 0;  //D3
const int output5 = 2;  //D4

void setup() {
  Serial.begin(115200);
  // Initialize the output variables as outputs
  pinMode(output1, OUTPUT);
  pinMode(output2, OUTPUT);
  pinMode(output3, OUTPUT);
  pinMode(output4, OUTPUT);
  pinMode(output5, OUTPUT);
 
  // Set outputs to LOW
  digitalWrite(output1, LOW);
  digitalWrite(output2, LOW);
  digitalWrite(output3, LOW);
  digitalWrite(output4, LOW);
  digitalWrite(output5, LOW);
  
  // Connect to Wi-Fi network with SSID and password
  Serial.print("Connecting to ");
  Serial.println(ssid);
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  // Print local IP address and start web server
  Serial.println("");
  Serial.println("WiFi connected.");
  Serial.println("IP address: ");
  Serial.println(WiFi.localIP());
  server.begin();
}

void loop(){
  WiFiClient client = server.available();   // Listen for incoming clients

  if (client) {                             // If a new client connects,
    Serial.println("New Client.");          // print a message out in the serial port
    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) {
            // HTTP headers always start with a response code (e.g. HTTP/1.1 200 OK)
            // and a content-type so the client knows what's coming, then a blank line:
            client.println("HTTP/1.1 200 OK");
            client.println("Content-type:text/html");
            client.println("Connection: close");
            client.println();
            
            // turns the GPIOs on and off
            if (header.indexOf("GET /1/on") >= 0) {         //LOAD1
              Serial.println("LOAD1 on");
              output1State = "on";
              digitalWrite(output1, HIGH);
            } else if (header.indexOf("GET /1/off") >= 0) {
              Serial.println("LOAD1 off");
              output1State = "off";
              digitalWrite(output1, LOW);
            } else if (header.indexOf("GET /2/on") >= 0) {  //LOAD2
              Serial.println("LOAD2 on");
              output2State = "on";
              digitalWrite(output2, HIGH);
            } else if (header.indexOf("GET /2/off") >= 0) {
              Serial.println("LOAD2 off");
              output2State = "off";
              digitalWrite(output2, LOW);
            } else if (header.indexOf("GET /3/on") >= 0) {  //LOAD3
              Serial.println("LOAD3 on");
              output3State = "on";
              digitalWrite(output3, HIGH);
            } else if (header.indexOf("GET /3/off") >= 0) {
              Serial.println("LOAD3 off");
              output3State = "off";
              digitalWrite(output3, LOW);
            } else if (header.indexOf("GET /4/on") >= 0) {   //LOAD4
              Serial.println("LOAD4 on");
              output4State = "on";
              digitalWrite(output4, HIGH);
            } else if (header.indexOf("GET /4/off") >= 0) {
              Serial.println("LOAD4 off");
              output4State = "off";
              digitalWrite(output4, LOW);
            } else if (header.indexOf("GET /5/on") >= 0) {   //LOAD5
              Serial.println("LOAD5 on");
              output5State = "on";
              digitalWrite(output5, HIGH);
            } else if (header.indexOf("GET /5/off") >= 0) {
              Serial.println("LOAD5 off");
              output5State = "off";
              digitalWrite(output5, LOW);
            }

            
            // Display the HTML web page
            client.println("");
            client.println("");
            client.println("");
            client.println("");
            
            // Web Page Heading
            client.println("

HOME AUTOMATION BASIC

"
);
// Display current state, and ON/OFF buttons for OUTPUT1 client.println("

LOAD1 - State " + output1State + "

"
);
// If the output1State is off, it displays the ON button if (output1State=="off") { client.println("

"
);
} else { client.println("

"
);
} // Display current state, and ON/OFF buttons for OUTPUT2 client.println("

LOAD2 - State " + output2State + "

"
);
// If the output2State is off, it displays the ON button if (output2State=="off") { client.println("

"
);
} else { client.println("

"
);
} // Display current state, and ON/OFF buttons for OUTPUT3 client.println("

LOAD3 - State " + output3State + "

"
);
// If the output3State is off, it displays the ON button if (output3State=="off") { client.println("

"
);
} else { client.println("

"
);
} // Display current state, and ON/OFF buttons for OUTPUT4 client.println("

LOAD4 - State " + output4State + "

"
);
// If the output4State is off, it displays the ON button if (output4State=="off") { client.println("

"
);
} else { client.println("

"
);
} // Display current state, and ON/OFF buttons for OUTPUT5 client.println("

LOAD5 - State " + output4State + "

"
);
// If the output5State is off, it displays the ON button if (output5State=="off") { client.println("

"
);
} else { client.println("

"
);
} client.println(""); // The HTTP response ends with another blank line client.println(); // Break out of the while loop break; } else { // if you got a newline, then clear currentLine currentLine = ""; } } else if (c != '\r') { // if you got anything else but a carriage return character, currentLine += c; // add it to the end of the currentLine } } } // Clear the header variable header = ""; // Close the connection client.stop(); Serial.println("Client disconnected."); Serial.println(""); } }

這是我在此設置中使用的代碼,它是一個簡單的基于 WEB 服務器的草圖,可讓我們使用 WEB APP 控制五個 GPIO。

這個 Sketch 融合了經(jīng)典的嵌入式 C 語言和帶有一點 CSS 的 HTML。

我們通過以下幾行在此草圖中設置了 HTML 頁面。

// Display the HTML web page
            client.println("html><html>");
            client.println("<head><meta name=\"viewport" content=\"width=device-width, initial-scale=1\">");
            client.println("<link rel=\"icon" href=\"data:,">");
            client.println("<style>html { font-family: Helvetica; display: inline-block; margin: 0px auto; text-align: center;}");
            client.println(".button { background-color: #6a195b; border: none; color: white; padding: 16px 40px;");
            client.println("text-decoration: none; font-size: 30px; margin: 2px; cursor: pointer;}");
            client.println(".button2 {background-color: #a82890;}style>head>");
            
            // Web Page Heading
            client.println("<body><h1>HOME AUTOMATION BASICh1>");

這個草圖比較容易理解,我們有 5 個輸出,它們在草圖開始時聲明并設置為 LOW 狀態(tài)。

const int output1 = 16; //D0
const int output2 = 5;  //D1
const int output3 = 4;  //D2
const int output4 = 0;  //D3
const int output5 = 2;  //D4
digitalWrite(output1, LOW);
  digitalWrite(output2, LOW);
  digitalWrite(output3, LOW);
  digitalWrite(output4, LOW);
  digitalWrite(output5, LOW);

當按下 HTML 按鈕時,每個 GPIO 都由下面的行觸發(fā)。

// turns the GPIOs on and off
            if (header.indexOf("GET /1/on") >= 0) {         //LOAD1
              Serial.println("LOAD1 on");
              output1State = "on";
              digitalWrite(output1, HIGH);
            } else if (header.indexOf("GET /1/off") >= 0) {
              Serial.println("LOAD1 off");
              output1State = "off";
              digitalWrite(output1, LOW);

請注意,此設置僅適用于 ESP8266 和您在同一網(wǎng)絡上瀏覽 APP 的設備。(本地網(wǎng)絡運營)

結果

?
?
?
?
?
1 / 2
?

?

?

這是結果,如您所見,該系統(tǒng)正在運行。

每當我們通過 WEB APP 切換繼電器時,每個繼電器模塊頂部都有一個 LED 指示燈會打開和關閉。

交流負載測試

在開始進行此設置之前,請確保佩戴適當?shù)慕^緣橡膠手套,并在插入交流電源后盡量不要觸摸交流側。

  • 我們按照上述接線方案將交流燈泡座與繼電器的公共和 NC 連接器以及交流電源接線連接起來。
  • 接下來,我們打開 WEB APP 并切換連接到交流電源的負載 1。

總結與改進

?
?
?
?
?
1 / 2
?

此設置有效,現(xiàn)在我們可以將其添加到我們家中的 MCB 盒中,以控制特定區(qū)域或任何控制至少 6 個光輸出的照明開關附近。

它的工作方式也很簡單,繼電器就像物理開關,我們可以將它們與任何光源或輸出串聯(lián)添加。通過將 RELAY 的狀態(tài)更改為 HIGH 或 LOW,它可以斷開或連接電路并控制與其連接的負載。

此設置使用帶有外部 5V 電源的 NodeMCU 板。

理想情況下,板載 240V AC 至 5V 1A DC 轉(zhuǎn)換器以及通過單線輕松連接的負載輸出。NodeMCU 可以替換為基于最小 ESP12F 的設置,該設置將在相同的拓撲中實現(xiàn)自己的繼電器模塊板。這就是我將在這個項目的第 2 版中做的事情。

這就是今天的內(nèi)容,如果您在設置此項目時遇到任何問題,請發(fā)表評論。

特別感謝 PCBWAY 提供了我在這個項目中使用的組件,檢查它們以獲得各種 PCB 或 PCBA 相關的服務以降低成本。

謝謝,我很快就會帶著一個新項目回來。


下載該資料的人也在下載 下載該資料的人還在閱讀
更多 >

評論

查看更多

下載排行

本周

  1. 1山景DSP芯片AP8248A2數(shù)據(jù)手冊
  2. 1.06 MB  |  532次下載  |  免費
  3. 2RK3399完整板原理圖(支持平板,盒子VR)
  4. 3.28 MB  |  339次下載  |  免費
  5. 3TC358743XBG評估板參考手冊
  6. 1.36 MB  |  330次下載  |  免費
  7. 4DFM軟件使用教程
  8. 0.84 MB  |  295次下載  |  免費
  9. 5元宇宙深度解析—未來的未來-風口還是泡沫
  10. 6.40 MB  |  227次下載  |  免費
  11. 6迪文DGUS開發(fā)指南
  12. 31.67 MB  |  194次下載  |  免費
  13. 7元宇宙底層硬件系列報告
  14. 13.42 MB  |  182次下載  |  免費
  15. 8FP5207XR-G1中文應用手冊
  16. 1.09 MB  |  178次下載  |  免費

本月

  1. 1OrCAD10.5下載OrCAD10.5中文版軟件
  2. 0.00 MB  |  234315次下載  |  免費
  3. 2555集成電路應用800例(新編版)
  4. 0.00 MB  |  33566次下載  |  免費
  5. 3接口電路圖大全
  6. 未知  |  30323次下載  |  免費
  7. 4開關電源設計實例指南
  8. 未知  |  21549次下載  |  免費
  9. 5電氣工程師手冊免費下載(新編第二版pdf電子書)
  10. 0.00 MB  |  15349次下載  |  免費
  11. 6數(shù)字電路基礎pdf(下載)
  12. 未知  |  13750次下載  |  免費
  13. 7電子制作實例集錦 下載
  14. 未知  |  8113次下載  |  免費
  15. 8《LED驅(qū)動電路設計》 溫德爾著
  16. 0.00 MB  |  6656次下載  |  免費

總榜

  1. 1matlab軟件下載入口
  2. 未知  |  935054次下載  |  免費
  3. 2protel99se軟件下載(可英文版轉(zhuǎn)中文版)
  4. 78.1 MB  |  537798次下載  |  免費
  5. 3MATLAB 7.1 下載 (含軟件介紹)
  6. 未知  |  420027次下載  |  免費
  7. 4OrCAD10.5下載OrCAD10.5中文版軟件
  8. 0.00 MB  |  234315次下載  |  免費
  9. 5Altium DXP2002下載入口
  10. 未知  |  233046次下載  |  免費
  11. 6電路仿真軟件multisim 10.0免費下載
  12. 340992  |  191187次下載  |  免費
  13. 7十天學會AVR單片機與C語言視頻教程 下載
  14. 158M  |  183279次下載  |  免費
  15. 8proe5.0野火版下載(中文版免費下載)
  16. 未知  |  138040次下載  |  免費