ESP32 Control AC Web Server

ESP32 Relay Module
استفاده از رله با ESP32 یک راه عالی برای کنترل لوازم خانگی AC از راه دور است. این آموزش نحوه کنترل ماژول رله با ESP32 را توضیح می دهد. ما به نحوه کار یک ماژول رله، نحوه اتصال رله به ESP32 و ساخت یک وب سرور برای کنترل یک رله از راه دور (یا هر تعداد رله که می خواهید) نگاهی خواهیم انداخت.
کنترل یک ماژول رله با ESP32 (وب سرور)
معرفی رله ها
رله کلیدی است که با برق کار می کند و مانند هر کلید دیگری می توان آن را روشن یا خاموش کرد و اجازه داد جریان عبور کند یا خیر. می توان آن را با ولتاژهای پایین کنترل کرد، مانند 3.3 ولت ارائه شده توسط ESP32 GPIO و به ما امکان می دهد ولتاژهای بالا مانند 12 ولت، 24 ولت یا ولتاژ شبکه (230 ولت در اروپا و 120 ولت در ایالات متحده) را کنترل کنیم.
ماژول های رله 1، 2، 4، 8، 16 کانال
ماژول های رله مختلف با تعداد کانال های متفاوت وجود دارد. شما می توانید ماژول های رله را با یک، دو، چهار، هشت و حتی شانزده کانال پیدا کنید. تعداد کانال ها تعداد خروجی هایی را که می توانیم کنترل کنیم را تعیین می کند.

ماژول های رله ای وجود دارند که آهنربای الکتریکی آنها با ولتاژ 5 ولت و 3.3 ولت تغذیه می شود. هر دو را می توان با ESP32 استفاده کرد – می توانید از پین VIN (که 5 ولت ارائه می دهد) یا پایه 3.3 ولت استفاده کنید.
علاوه بر این، برخی از آنها دارای کوپلر داخلی هستند که یک “لایه” حفاظتی اضافی اضافه می کند و ESP32 را از مدار رله ایزوله می کند.
Relay Pinout
بیایید نگاهی به پین اوت یک ماژول رله 2 کانالی بیندازیم. استفاده از ماژول رله با تعداد کانال های متفاوت مشابه است.

در سمت چپ، دو مجموعه از سه سوکت برای اتصال ولتاژ بالا وجود دارد و پایه های سمت راست (کم ولتاژ) به GPIO های ESP32 متصل می شوند.
Mains Voltage Connections
ماژول رله نشان داده شده در عکس قبلی دارای دو کانکتور است که هر کدام دارای سه سوکت است: معمولی (COM)، معمولی بسته (NC) و معمولی باز (NO).
COM: جریانی را که می خواهید کنترل کنید (ولتاژ اصلی) وصل کنید.
NC (به طور معمول بسته): پیکربندی معمولاً بسته زمانی استفاده می شود که می خواهید رله به طور پیش فرض بسته شود. پین های NC هستند COM متصل هستند، به این معنی که جریان جریان دارد مگر اینکه سیگنالی از ESP32 به ماژول رله ارسال کنید تا مدار باز شود و جریان جریان متوقف شود.
NO (به طور معمول باز): پیکربندی معمولی باز برعکس عمل می کند: هیچ ارتباطی بین پایه های NO و COM وجود ندارد، بنابراین مدار خراب است مگر اینکه سیگنالی از ESP32 برای بستن مدار ارسال کنید.
Control Pins

سمت ولتاژ پایین دارای مجموعه ای از چهار پایه و مجموعه ای از سه پایه است. مجموعه اول شامل VCC و GND برای روشن کردن ماژول و ورودی 1 (IN1) و ورودی 2 (IN2) به ترتیب برای کنترل رله های پایین و بالایی است.
اگر ماژول رله شما فقط یک کانال دارد، فقط یک پین IN خواهید داشت. اگر چهار کانال دارید، چهار پین IN و غیره خواهید داشت.
سیگنالی که به پین های IN ارسال می کنید، فعال بودن یا نبودن رله را مشخص می کند. رله زمانی فعال می شود که ورودی کمتر از 2 ولت باشد. این به این معنی است که شما سناریوهای زیر را خواهید داشت:
- پیکربندی به طور معمول بسته (NC):
- سیگنال بالا – جریان در حال جریان است
- سیگنال LOW – جریان جریان ندارد
- پیکربندی به طور معمول باز
- (NO):
- سیگنال بالا – جریان جریان ندارد
- سیگنال LOW – جریان در حال جریان است
شما باید از یک پیکربندی به طور معمول بسته استفاده کنید، زمانی که جریان باید در بیشتر مواقع جریان داشته باشد، و فقط میخواهید گاهی اوقات آن را متوقف کنید.
انتخاب منبع تغذیه

مجموعه دوم پین ها از پایه های GND، VCC و JD-VCC تشکیل شده است. پین JD-VCC آهنربای الکتریکی رله را تغذیه می کند. توجه داشته باشید که ماژول دارای یک کلاهک جامپر است که پین های VCC و JD-VCC را به هم متصل می کند. رنگی که در اینجا نشان داده شده زرد است، اما رنگ شما ممکن است رنگ دیگری داشته باشد.
با درپوش جامپر، پین های VCC و JD-VCC به هم متصل می شوند. این بدان معناست که آهنربای الکتریکی رله مستقیماً از پایه برق ESP32 تغذیه می شود، بنابراین ماژول رله و مدارهای ESP32 از نظر فیزیکی از یکدیگر جدا نیستند.
بدون درپوش جامپر، باید یک منبع تغذیه مستقل برای تغذیه آهنربای الکتریکی رله از طریق پین JD-VCC تهیه کنید. این پیکربندی به صورت فیزیکی رله ها را از ESP32 با اپتوکوپلر داخلی ماژول جدا می کند، که از آسیب دیدن ESP32 در صورت بروز میخ های الکتریکی جلوگیری می کند.
سیم کشی یک ماژول رله به ESP32
ماژول رله را همانطور که در نمودار زیر نشان داده شده است به ESP32 وصل کنید. این نمودار سیم کشی یک ماژول رله 2 کاناله را نشان می دهد، سیم کشی تعداد متفاوتی از کانال ها مشابه است.
هشدار: در این مثال، ما با ولتاژ شبکه سر و کار داریم. استفاده نادرست می تواند منجر به صدمات جدی شود. اگر با ولتاژ شبکه آشنا نیستید از کسی بخواهید که به شما کمک کند. هنگام برنامه ریزی ESP یا سیم کشی مدار خود مطمئن شوید که همه چیز از ولتاژ برق جدا شده است.
همچنین میتوانید از منبع برق ۱۲ ولتی برای کنترل وسایل برقی ۱۲ ولتی استفاده کنید.

در این مثال، ما یک لامپ را کنترل می کنیم. ما فقط می خواهیم گاهی اوقات لامپ را روشن کنیم، بنابراین بهتر است از یک پیکربندی معمولی باز استفاده کنیم.
ما پین IN1 را به GPIO 26 وصل می کنیم، می توانید از هر GPIO مناسب دیگری استفاده کنید. راهنمای مرجع ESP32 GPIO را ببینید.
کنترل یک ماژول رله با ESP32 – Arduino Sketch
کد کنترل رله با ESP32 به سادگی کنترل یک LED یا هر خروجی دیگری است. در این مثال، از آنجایی که ما از یک پیکربندی معمولی باز استفاده میکنیم، باید یک سیگنال LOW برای عبور جریان و یک سیگنال HIGH برای توقف جریان ارسال کنیم.

کد زیر لامپ شما را به مدت 10 ثانیه روشن می کند و 10 ثانیه دیگر آن را خاموش می کند.
const int relay = 26;
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);
}
کد چگونه کار می کند
پایه ای را که پایه رله IN به آن وصل است را تعریف کنید.
const int relay = 26;
در setup() رله را به عنوان خروجی تعریف کنید.
pinMode(relay, OUTPUT);
در حلقه ()، یک سیگنال LOW ارسال کنید تا جریان جریان پیدا کند و لامپ روشن شود.
digitalWrite(relay, LOW);
اگر از یک پیکربندی به طور معمول بسته استفاده می کنید، یک سیگنال HIGH برای روشن شدن لامپ ارسال کنید. سپس، 5 ثانیه صبر کنید.
delay(5000);
با ارسال یک سیگنال HIGH به پایه رله، جریان جریان را متوقف کنید. اگر از یک پیکربندی به طور معمول بسته استفاده می کنید، یک سیگنال LOW برای متوقف کردن جریان فعلی ارسال کنید.
digitalWrite(relay, HIGH);
چندین رله را با وب سرور ESP32 کنترل کنید

در این بخش، ما یک نمونه وب سرور ایجاد کرده ایم که به شما امکان می دهد هر تعداد رله را که می خواهید از طریق وب سرور کنترل کنید، خواه به طور معمول باز شوند یا به طور معمول بسته شوند. شما فقط باید چند خط کد را تغییر دهید تا تعداد رله هایی را که می خواهید کنترل کنید و تخصیص پین را مشخص کنید.
برای ساخت این وب سرور، از کتابخانه ESPAsyncWebServer استفاده می کنیم.
پس از نصب کتابخانه های مورد نیاز، کد زیر را در آردوینو IDE خود کپی کنید.
// Import required libraries
#include "WiFi.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] = {2, 26, 27, 25, 33};
// 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(
ESP Web Server
%BUTTONPLACEHOLDER%
)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+= "Relay #" + String(i) + " - GPIO " + relayGPIOs[i-1] + "
";
}
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++){
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 ESP32 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 /update?relay=&state=
server.on("/update", HTTP_GET, [] (AsyncWebServerRequest *request) {
String inputMessage;
String inputParam;
String inputMessage2;
String inputParam2;
// GET input1 value on /update?relay=
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);
request->send(200, "text/plain", "OK");
});
// Start server
server.begin();
}
void loop() {
}
برای دیدن باقی آموزشهای ماژول ESP32 میتوانید رو لینک بزنید.
امیدوارم این آموزش برای شما مفید بوده باشد.



اولین دیدگاه را ثبت کنید