1. Trang chủ
  2. » Công Nghệ Thông Tin

ESP8266 Môđun chuyển tiếp NodeMCU Thiết bị AC điều khiển (Máy chủ Web)

16 5 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Esp8266 Mô-đun Chuyển Tiếp NodeMCU - Thiết Bị Ac Điều Khiển (Máy Chủ Web)
Trường học Trường Đại Học Công Nghệ Thông Tin
Chuyên ngành Công Nghệ Thông Tin
Thể loại Hướng dẫn
Định dạng
Số trang 16
Dung lượng 0,98 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Sử dụng rơle với ESP8266 là một cách tuyệt vời để điều khiển các thiết bị gia dụng AC từ xa. Hướng dẫn này giải thích cách điều khiển môđun chuyển tiếp bằng ESP8266 NodeMCU. Chúng ta sẽ xem xét cách môđun chuyển tiếp hoạt động, cách kết nối rơle với ESP8266 và xây dựng máy chủ web để điều khiển rơle từ xa (hoặc nhiều rơle như bạn muốn).

Trang 1

ESP8266 Mô-đun chuyển tiếp NodeMCU - Thiết bị AC

điều khiển (Máy chủ Web)

Sử dụng rơle với ESP8266 là một cách tuyệt vời để điều khiển các thiết bị gia dụng AC

từ xa Hướng dẫn này giải thích cách điều khiển mô-đun chuyển tiếp bằng ESP8266

NodeMCU Chúng ta sẽ xem xét cách mô-đun chuyển tiếp hoạt động, cách kết nối rơle

với ESP8266 và xây dựng máy chủ web để điều khiển rơle từ xa (hoặc nhiều rơle như

bạn muốn)

Tìm hiểu cách điều khiển mô-đun rơle bằng bảng ESP32: Hướng dẫn cho Mô-đun rơle

ESP32 - Điều khiển Thiết bị AC + Ví dụ về Máy chủ Web.

Giới thiệu Relays

Rơle là một công tắc hoạt động bằng điện và giống như bất kỳ công tắc nào khác, nó có thể được bật hoặc tắt, cho phép dòng điện đi qua hoặc không Nó có thể được điều khiển với điện áp thấp, như 3.3V được cung cấp bởi ESP8266 GPIO và cho phép chúng tôi

điều khiển điện áp cao như 12V, 24V hoặc điện áp nguồn (230V ở Châu Âu và 120V ở

Mỹ)

Mô-đun chuyển tiếp 1, 2, 4, 8, 16 kênh

Có các mô-đun chuyển tiếp khác nhau với số lượng kênh khác nhau Bạn có thể tìm thấy các mô-đun chuyển tiếp với một, hai, bốn, tám và thậm chí mười sáu kênh Số lượng

kênh xác định số lượng đầu ra mà chúng tôi có thể kiểm soát

Trang 2

Có các mô-đun rơle có nam châm điện có thể được cấp nguồn bởi 5V và với 3.3V Cả

hai đều có thể được sử dụng với ESP8266 - bạn có thể sử dụng chân Vin (cung cấp 5V) hoặc chân 3.3V

Ngoài ra, một số đi kèm với bộ ghép quang tích hợp bổ sung thêm một "lớp" bảo vệ,

cách ly quang học ESP8266 khỏi mạch rơle

Nhận mô-đun chuyển tiếp:

Sơ đồ chân rơle

Đối với mục đích trình diễn, chúng ta hãy xem sơ đồ chân của mô-đun rơle 2 kênh Sử

dụng mô-đun chuyển tiếp với số lượng kênh khác nhau cũng tương tự

Trang 3

Hai đầu nối (mỗi đầu nối có ba ổ cắm) ở phía bên trái của mô-đun rơle kết nối điện áp

cao và các chân ở phía bên phải (điện áp thấp) kết nối với GPIO ESP8266

Kết nối điện áp nguồn

Mô-đun rơle được hiển thị trong ảnh trước có hai đầu nối, mỗi đầu nối có ba ổ cắm:

chung (COM), thường đóng (NC) và thường mở (NO)

COM: kết nối dòng điện bạn muốn điều khiển (điện áp nguồn).

NC (Thường đóng): cấu hình thường đóng được sử dụng khi bạn muốn đóng rơle

theo mặc định NC là các chân COM được kết nối, có nghĩa là dòng điện đang chạy trừ khi bạn gửi tín hiệu từ ESP8266 đến mô-đun rơle để mở mạch và dừng dòng

điện

NO (Thường mở): cấu hình thường mở hoạt động theo cách khác: không có kết

nối giữa các chân NO và COM, do đó mạch bị hỏng trừ khi bạn gửi tín hiệu từ

ESP8266 để đóng mạch

Chân điều khiển

Trang 4

Phía điện áp thấp có một bộ bốn chân và một bộ ba chân Bộ đầu tiên bao gồm VCC và GND để cấp nguồn cho mô-đun và đầu vào 1 (IN1) và đầu vào 2 (IN2) để điều khiển rơle dưới cùng và trên cùng, tương ứng

Nếu mô-đun chuyển tiếp của bạn chỉ có một kênh, bạn sẽ chỉ có một chân IN Nếu bạn

có bốn kênh, bạn sẽ có bốn chân IN, v.v

Tín hiệu bạn gửi đến các chân IN, xác định xem rơle có hoạt động hay không Rơle được kích hoạt khi đầu vào xuống dưới khoảng 2V Điều này có nghĩa là bạn sẽ có các tình

huống sau:

Cấu hình thường đóng (NC):

Tín hiệu CAO - dòng điện đang chảy

Tín hiệu LOW – dòng điện không chạy

Cấu hình thường mở (NO):

Tín hiệu CAO – dòng điện không chạy

Tín hiệu LOW - dòng điện đang chạy

Bạn nên sử dụng cấu hình thường đóng khi dòng điện nên chạy hầu hết thời gian và bạn chỉ muốn thỉnh thoảng dừng nó

Sử dụng cấu hình thường mở khi bạn muốn thỉnh thoảng dòng điện chạy (ví dụ: thỉnh

thoảng bật đèn)

Lựa chọn nguồn điện

Trang 5

Bộ chân thứ hai bao gồm các chân GND, VCC và JD-VCC Chân JD-VCC cấp nguồn cho nam châm điện của rơle Lưu ý rằng mô-đun có nắp nhảy kết nối các chân VCC và JD-VCC; Cái được hiển thị ở đây có màu vàng, nhưng màu của bạn có thể là một màu khác Khi bật nắp nhảy, các chân VCC và JD-VCC được kết nối Điều đó có nghĩa là nam châm điện rơle được cấp nguồn trực tiếp từ chân nguồn ESP8266, do đó mô-đun rơle và mạch ESP8266 không được cách ly vật lý với nhau

Nếu không có nắp nhảy, bạn cần cung cấp một nguồn năng lượng độc lập để cấp nguồn cho nam châm điện của rơle thông qua chân JD-VCC Cấu hình đó cách ly vật lý các rơle khỏi ESP8266 với bộ ghép quang tích hợp của mô-đun, giúp ngăn ngừa thiệt hại cho

ESP8266 trong trường hợp tăng đột biến điện

ESP8266 Chân an toàn nhất để sử dụng với rơle

Một số chân ESP8266 phát ra tín hiệu 3.3V khi ESP8266 khởi động Điều này có thể có vấn đề nếu bạn có rơle hoặc các thiết bị ngoại vi khác được kết nối với các GPIO đó

Ngoài ra, một số chân phải được kéo CAO hoặc THẤP để khởi động ESP8266

Có tính đến điều này, các chân ESP8266 an toàn nhất để sử dụng với rơle là: GPIO 5,

GPIO 4, GPIO 14, GPIO 12 và GPIO 13

Để biết thêm thông tin về các GPIO ESP8266, hãy đọc: Tham chiếu sơ đồ chân

ESP8266: Bạn nên sử dụng chân GPIO nào?

Đấu dây mô-đun rơle với bảng mạch ESP8266 NodeMCU

Trang 6

Kết nối mô-đun rơle với ESP8266 như thể hiện trong sơ đồ sau Sơ đồ cho thấy hệ thống dây điện cho mô-đun rơle 2 kênh, nối dây một số kênh khác nhau là tương tự

Cảnh báo: trong ví dụ này, chúng ta đang xử lý điện áp nguồn Sử dụng sai có thể dẫn

đến thương tích nghiêm trọng Nếu bạn không quen thuộc với điện áp lưới, hãy hỏi ai đó

sẽ giúp bạn Trong khi lập trình ESP hoặc nối dây mạch của bạn, hãy đảm bảo mọi thứ

được ngắt kết nối khỏi điện áp nguồn

Ngoài ra, bạn có thể sử dụng nguồn điện 12V để điều khiển các thiết bị 12V

Trong ví dụ này, chúng ta đang điều khiển đèn Chúng tôi chỉ muốn thỉnh thoảng thắp

sáng đèn, vì vậy tốt hơn là sử dụng cấu hình mở bình thường

Chúng tôi đang kết nối chân IN1 với GPIO 5, bạn có thể sử dụng bất kỳ GPIO phù hợp

nào khác Xem Hướng dẫn Tham khảo GPIO ESP8266

Điều khiển mô-đun chuyển tiếp với ESP8266 NodeMCU - Arduino Sketch

Mã để điều khiển rơle với ESP8266 cũng đơn giản như điều khiển đèn LED hoặc bất kỳ đầu ra nào khác Trong ví dụ này, khi chúng ta đang sử dụng cấu hình thường mở, chúng

ta cần gửi tín hiệu LOW để cho dòng điện chạy và tín hiệu HIGH để dừng dòng điện

Trang 7

Đoạn mã sau sẽ sáng đèn của bạn trong 10 giây và tắt thêm 10 giây nữa

/*********

Rui Santos

Complete project details at

https://RandomNerdTutorials.com/esp8266-relay-module-ac-web-server/

The above copyright notice and this permission notice shall be included in all

copies or substantial portions of the Software

*********/

const int relay = 5;

void setup() {

Serial.begin(115200);

pinMode(relay, OUTPUT);

}

void loop() {

// Normally Open configuration, send LOW signal to let current flow

// (if you're usong Normally Closed configuration send HIGH signal)

digitalWrite(relay, LOW);

Serial.println("Current Flowing");

delay(5000);

// Normally Open configuration, send HIGH signal stop current flow

// (if you're usong Normally Closed configuration send LOW signal)

digitalWrite(relay, HIGH);

Serial.println("Current not Flowing");

delay(5000);

}

Xem mã thô

ế

Trang 8

Mã hoạt động như thế nào

Xác định chốt mà chân IN rơle được kết nối

const int relay = 5;

Trong setup(), định nghĩa relay là đầu ra

pinMode(relay, OUTPUT);

Trong loop(), gửi tín hiệu LOW để dòng điện chạy và thắp đèn

digitalWrite(relay, LOW);

Nếu bạn đang sử dụng cấu hình thường đóng, hãy gửi tín hiệu CAO để thắp đèn Sau

đó, đợi 5 giây

delay(5000);

Dừng dòng điện bằng cách gửi tín hiệu CAO đến chân rơle Nếu bạn đang sử dụng cấu hình thường đóng, hãy gửi tín hiệu THẤP để dừng dòng điện

digitalWrite(relay, HIGH);

Điều khiển nhiều rơle với Máy chủ Web ESP8266 NodeMCU

Trang 9

Trong phần này, chúng tôi đã tạo một ví dụ về máy chủ web cho phép bạn kiểm soát bao nhiêu rơle tùy thích thông qua máy chủ web cho dù chúng được định cấu hình như

thường mở hay đóng bình thường Bạn chỉ cần thay đổi một vài dòng mã để xác định số lượng rơle bạn muốn điều khiển và gán pin

Để xây dựng máy chủ web này, chúng tôi sử dụng thư viện ESPAsyncWebServer

Cài đặt thư viện ESPAsyncWebServer

Làm theo các bước tiếp theo để cài đặt thư viện ESPAsyncWebServer:

1 Bấm vào đây để tải xuống thư viện ESPAsyncWebServer Bạn sẽ có một thư mục zip trong thư mục Tải xuống của mình

2 Giải nén thư mục zip và bạn sẽ nhận được thư mục ESPAsyncWebServer-master

3 Đổi tên thư mục của bạn từ ESPAsyncWebServer-master thành

ESPAsyncWebServer

4 Di chuyển thư mục ESPAsyncWebServer vào thư mục thư viện cài đặt Arduino IDE

của bạn

Ngoài ra, trong Arduino IDE, bạn có thể vào Sketch > Include Library > Add ZIP

library và chọn thư viện bạn vừa tải xuống.

Cài đặt thư viện ESPAsyncTCP cho ESP8266

Thư viện ESPAsyncWebServer yêu cầu thư viện ESPAsyncTCP hoạt động Làm theo

các bước tiếp theo để cài đặt thư viện đó:

1 Bấm vào đây để tải xuống thư viện ESPAsyncTCP Bạn sẽ có một thư mục zip

trong thư mục Tải xuống của mình

2 Giải nén thư mục zip và bạn sẽ nhận được thư mục ESPAsyncTCP-master

3 Đổi tên thư mục của bạn từ ESPAsyncTCP-master thành ESPAsyncTCP

4 Di chuyển thư mục ESPAsyncTCP vào thư mục thư viện cài đặt Arduino IDE của

bạn

5 Cuối cùng, mở lại Arduino IDE của bạn

Ngoài ra, trong Arduino IDE, bạn có thể vào Sketch > Include Library > Add ZIP

library và chọn thư viện bạn vừa tải xuống.

Sau khi cài đặt các thư viện cần thiết, hãy sao chép mã sau vào Arduino IDE của bạn

Trang 10

/*********

Rui Santos

Complete project details at

https://RandomNerdTutorials.com/esp8266-relay-module-ac-web-server/

The above copyright notice and this permission notice shall be included in all

copies or substantial portions of the Software

*********/

// Import required libraries

#include "ESP8266WiFi.h"

#include "ESPAsyncWebServer.h"

// Set to true to define Relay as Normally Open (NO)

#define RELAY_NO true

// Set number of relays

#define NUM_RELAYS 5

// Assign each GPIO to a relay

int relayGPIOs[NUM_RELAYS] = {5, 4, 14, 12, 13};

// Replace with your network credentials

const char* ssid = "REPLACE_WITH_YOUR_SSID";

const char* password = "REPLACE_WITH_YOUR_PASSWORD";

const char* PARAM_INPUT_1 = "relay";

const char* PARAM_INPUT_2 = "state";

// Create AsyncWebServer object on port 80

AsyncWebServer server(80);

const char index_html[] PROGMEM = R"rawliteral(

<!DOCTYPE HTML><html>

<head>

<meta name="viewport" content="width=device-width, initial-scale=1">

<style>

html {font-family: Arial; display: inline-block; text-align: center;}

h2 {font-size: 3.0rem;}

p {font-size: 3.0rem;}

body {max-width: 600px; margin:0px auto; padding-bottom: 25px;}

.switch {position: relative; display: inline-block; width: 120px; height:

68px}

.switch input {display: none}

.slider {position: absolute; top: 0; left: 0; right: 0; bottom: 0; background-color: #ccc; border-radius: 34px}

.slider:before {position: absolute; content: ""; height: 52px; width: 52px;

left: 8px; bottom: 8px; background-color: #fff; -webkit-transition: 4s;

transition: 4s; border-radius: 68px}

input:checked+.slider {background-color: #2196F3}

input:checked+.slider:before {-webkit-transform: translateX(52px);

Trang 11

%BUTTONPLACEHOLDER%

<script>function toggleCheckbox(element) {

var xhr = new XMLHttpRequest();

if(element.checked){ xhr.open("GET", "/update?relay="+element.id+"&state=1",

true); }

else { xhr.open("GET", "/update?relay="+element.id+"&state=0", true); }

xhr.send();

}</script>

</body>

</html>

)rawliteral";

// Replaces placeholder with button section in your web page

String processor(const String& var){

//Serial.println(var);

if(var == "BUTTONPLACEHOLDER"){

String buttons ="";

for(int i=1; i<=NUM_RELAYS; i++){

String relayStateValue = relayState(i);

buttons+= "<h4>Relay #" + String(i) + " - GPIO " + relayGPIOs[i-1] + "</h4>

<label class=\"switch\"><input type=\"checkbox\" onchange=\"toggleCheckbox(this)\" id=\"" + String(i) + "\" "+ relayStateValue +"><span class=\"slider\"></span>

</label>";

}

return buttons;

}

return String();

}

String relayState(int numRelay){

if(RELAY_NO){

if(digitalRead(relayGPIOs[numRelay-1])){

return "";

}

else {

return "checked";

}

}

else {

if(digitalRead(relayGPIOs[numRelay-1])){

return "checked";

}

else {

return "";

}

}

return "";

}

void setup(){

// Serial port for debugging purposes

Serial.begin(115200);

// Set all relays to off when the program starts - if set to Normally Open (NO), the relay is off when you set the relay to HIGH

for(int i=1; i<=NUM_RELAYS; i++){

Trang 12

pinMode(relayGPIOs[i-1], OUTPUT);

if(RELAY_NO){

digitalWrite(relayGPIOs[i-1], HIGH);

}

else{

digitalWrite(relayGPIOs[i-1], LOW);

}

}

// Connect to Wi-Fi

WiFi.begin(ssid, password);

while (WiFi.status() != WL_CONNECTED) {

delay(1000);

Serial.println("Connecting to WiFi ");

}

// Print ESP8266 Local IP Address

Serial.println(WiFi.localIP());

// Route for root / web page

server.on("/", HTTP_GET, [](AsyncWebServerRequest *request){

request->send_P(200, "text/html", index_html, processor);

});

// Send a GET request to <ESP_IP>/update?relay=<inputMessage>&state=

<inputMessage2>

server.on("/update", HTTP_GET, [] (AsyncWebServerRequest *request) {

String inputMessage;

String inputParam;

String inputMessage2;

String inputParam2;

// GET input1 value on <ESP_IP>/update?relay=<inputMessage>

if (request->hasParam(PARAM_INPUT_1) & request->hasParam(PARAM_INPUT_2)) {

inputMessage = request->getParam(PARAM_INPUT_1)->value();

inputParam = PARAM_INPUT_1;

inputMessage2 = request->getParam(PARAM_INPUT_2)->value();

inputParam2 = PARAM_INPUT_2;

if(RELAY_NO){

Serial.print("NO ");

digitalWrite(relayGPIOs[inputMessage.toInt()-1], !inputMessage2.toInt()); }

else{

Serial.print("NC ");

digitalWrite(relayGPIOs[inputMessage.toInt()-1], inputMessage2.toInt());

}

}

else {

inputMessage = "No message sent";

inputParam = "none";

}

Serial.println(inputMessage + inputMessage2);

Trang 13

void loop() {

}

Xem mã thô

Xác định cấu hình rơle

Sửa đổi biến sau để cho biết bạn đang sử dụng rơle của mình trong cấu hình thường mở (NO) hay thường đóng (NC) Đặt biến RELAY_NO thành true cho hệ điều hành thường

mở được đặt thành false cho thường đóng

#define RELAY_NO true

Xác định số lượng rơle (kênh)

Bạn có thể xác định số lượng rơle bạn muốn kiểm soát trên biến NUM_RELAYS Đối với mục đích trình diễn, chúng tôi đặt nó thành 5

#define NUM_RELAYS 5

Xác định gán pin rơle

Trong biến mảng sau, bạn có thể xác định các GPIO ESP8266 sẽ điều khiển các rơle

int relayGPIOs[NUM_RELAYS] = {5, 4, 14, 12, 13};

Số lượng rơle được đặt trên biến NUM_RELAYS cần phải khớp với số lượng GPIO được gán trong mảng relayGPIOs

Thông tin đăng nhập mạng

Chèn thông tin đăng nhập mạng của bạn vào các biến sau

const char* ssid = "REPLACE_WITH_YOUR_SSID";

const char* password = "REPLACE_WITH_YOUR_PASSWORD";

Nối dây 8 kênh Relay đến ESP8266 NodeMCU

Đối với mục đích trình diễn, chúng tôi đang kiểm soát 5 kênh chuyển tiếp Nối bảng mạch ESP8266 NodeMCU với mô-đun chuyển tiếp như thể hiện trong sơ đồ tiếp theo

Ngày đăng: 09/04/2023, 19:17

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w