خانه هوشمند با ماژول Nodemcu | کنترل تجهیزات برقی از طریق WIFI
عنوان مقاله:
آموزش کنترل روشنایی با NodeMCU ESP8266 از طریق WiFi (بدون نیاز به اپلیکیشن)
مقدمه
اگر دوست دارید وسایل برقی خانه را تنها با مرورگر گوشی کنترل کنید، این پروژه یکی از سادهترین و کاربردیترین پروژههای اینترنت اشیا (IoT) است. در این آموزش با استفاده از برد NodeMCU ESP8266 یک وبسرور کوچک راهاندازی میکنیم که از طریق آن میتوان یک رله را روشن و خاموش کرد. مزیت این روش این است که بدون نصب هیچ اپلیکیشن اضافی، تنها با وارد کردن آدرس IP در مرورگر، کنترل وسیله در اختیار شما خواهد بود.
پروژه چه کاری انجام میدهد؟
در این پروژه، NodeMCU به شبکه WiFi متصل میشود و یک صفحه وب ایجاد میکند. با باز کردن این صفحه در مرورگر گوشی یا لپتاپ، تنها با لمس یک دکمه میتوانید وضعیت رله را تغییر دهید. این پروژه پایهای برای ساخت انواع سیستمهای خانه هوشمند مانند کنترل روشنایی، کنترل فن، آبیاری هوشمند و بسیاری از پروژههای دیگر است.
قطعات موردنیاز
ماژول رله تک کانال 5 ولت
منبع تغذیه مناسب
سیم جامپر
مودم یا شبکه WiFi
لامپ یا LED جهت تست
نحوه عملکرد پروژه
پس از روشن شدن برد، NodeMCU به شبکه WiFi متصل میشود و یک آدرس IP دریافت میکند. این آدرس در Serial Monitor نمایش داده میشود. با وارد کردن این IP در مرورگر، صفحه کنترل باز میشود. هر بار که دکمه صفحه را لمس کنید، درخواست جدیدی به برد ارسال شده و رله روشن یا خاموش میشود. تمام این فرآیند از طریق پروتکل HTTP انجام میشود و نیازی به نصب برنامه جانبی نیست.
اتصالات مدار
اتصالات این پروژه بسیار ساده است. پایه ورودی رله به یکی از پایههای دیجیتال NodeMCU (برای مثال D1) متصل میشود. همچنین تغذیه رله و برد باید بهدرستی تأمین شود. در صورت استفاده از ماژول رله Active LOW ممکن است لازم باشد منطق روشن و خاموش بودن در کد تغییر داده شود.
کد برنامه را ذر نرم افزار آردوینو آپلود کنید:
#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>
const char* ssid = "NAME";
const char* password = "PASSWORD ";
ESP8266WebServer server(80);
// ---------- تنظیم پایه رله ----------
#define RELAY D1
// اگر رله برعکس کار میکند این دو مقدار را عوض کن
#define RELAY_ON HIGH
#define RELAY_OFF LOW
bool relayState = false;
// ---------- تغییر وضعیت رله ----------
void toggleRelay() {
relayState = !relayState;
digitalWrite(RELAY, relayState ? RELAY_ON : RELAY_OFF);
server.send(200, "text/plain", relayState ? "1" : "0");
}
// ---------- صفحه وب ----------
void handleRoot() {
String html = R"rawliteral(
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>Quantum Smart Switch</title>
<style>
*{
margin:0;
padding:0;
box-sizing:border-box;
}
body{
background:#050505;
display:flex;
justify-content:center;
align-items:center;
height:100vh;
font-family:Arial;
overflow:hidden;
}
.container{
text-align:center;
}
.title{
color:white;
font-size:34px;
margin-bottom:45px;
letter-spacing:2px;
font-weight:bold;
}
.switch{
width:220px;
height:220px;
border-radius:50%;
border:none;
outline:none;
cursor:pointer;
font-size:34px;
font-weight:bold;
color:white;
transition:.35s;
}
.on{
background:#00c853;
box-shadow:
0 0 20px #00c853,
0 0 50px #00c853,
0 0 100px #00c853;
}
.off{
background:#d50000;
box-shadow:
0 0 20px #d50000,
0 0 50px #d50000,
0 0 100px #d50000;
}
.switch:active{
transform:scale(0.92);
}
.info{
color:#aaa;
font-size:18px;
margin-top:40px;
}
</style>
</head>
<body>
<div class="container">
<div class="title">
SMART LIGHT
</div>
<button id="btn" class="switch off">
OFF
</button>
<div class="info">
ESP8266 WiFi Control
</div>
</div>
<script>
const button = document.getElementById("btn");
button.onclick = function(){
fetch("/toggle")
.then(response => response.text())
.then(state => {
if(state == "1"){
button.classList.remove("off");
button.classList.add("on");
button.innerHTML = "ON";
}
else{
button.classList.remove("on");
button.classList.add("off");
button.innerHTML = "OFF";
}
});
};
</script>
</body>
</html>
)rawliteral";
// قرار دادن وضعیت واقعی رله هنگام باز شدن صفحه
html.replace("class=\"switch off\"", relayState ? "class=\"switch on\"" : "class=\"switch off\"");
html.replace(">OFF<", relayState ? ">ON<" : ">OFF<");
server.send(200,"text/html",html);
}
void setup() {
Serial.begin(115200);
pinMode(RELAY, OUTPUT);
// شروع کار: رله خاموش
digitalWrite(RELAY, RELAY_OFF);
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
Serial.print("Connecting");
while(WiFi.status() != WL_CONNECTED){
delay(500);
Serial.print(".");
}
Serial.println();
Serial.println("WiFi Connected");
Serial.print("IP Address: ");
Serial.println(WiFi.localIP());
// مسیر صفحه اصلی
server.on("/", handleRoot);
// مسیر تغییر وضعیت
server.on("/toggle", toggleRelay);
server.begin();
Serial.println("Web Server Started");
}
void loop() {
server.handleClient();
}
در این بخش میتوانید کد کامل پروژه را قرار دهید و توضیح دهید که:
اطلاعات WiFi را تغییر دهید.
در صورت نیاز پایه رله را تغییر دهید.
کد را روی NodeMCU آپلود کنید.
نتیجه اجرای پروژه
پس از اجرای موفق پروژه، با وارد کردن IP نمایشدادهشده در مرورگر، صفحه کنترل باز میشود و تنها با یک دکمه میتوان وضعیت رله را تغییر داد. این پروژه پایهای عالی برای شروع یادگیری اینترنت اشیا و توسعه سیستمهای هوشمند است.
جمعبندی
در این آموزش یاد گرفتید چگونه با استفاده از NodeMCU ESP8266 و یک ماژول رله، یک سیستم کنترل روشنایی تحت وب بسازید. با توسعه این پروژه میتوانید تعداد رلهها را افزایش دهید، از سنسورهای مختلف استفاده کنید یا آن را به سرویسهای ابری و اپلیکیشنهای خانه هوشمند متصل کنید.
دیدگاه خود را بنویسید