کنترل وسایل منزل از طریق وب
در این آموزش قصد داریم با استفاده از وب سرور و برد NodeMCU یک وسیله برقی و سه تا لامپ رو خاموش و روشن کنیم . برای اینکه راحت تر بتونید این پروژه رو انجام بدید میتونید آموزش های قبلی مربوطه رو مطالعه کنید. همونطور که داخل آموزش های قبلی گفته بودم برای کنترل یه ال ای دی یا رله نیاز به ساخت دو صفحه داریم یه صفحه برای خاموش کردن و یه صفحه برای روشن کردن . اینجا ما چهارتا رله رو میخوایم خاموش و روشن کنیم پس نیاز به هشت صفجه داریم . حالا بجای اینکه ما برای کنترل هرکدوم تک تک به این صفحه ها دستی مراجعه کنیم یک صفحه درست میکنیم و توی اون هشت تا کلید میزاریم که هرکدوم رو کلیک کنیم خودش به اون صفحه مراجعه میکنه. توجه کنید وقتی ایپی مورد نظر رو توی مرورگر وارد کردید یک قسمت ورود ایجاد میشه و از شما نام کاربری و رمز عبور میخواد برای ورود به صفحه وب باید نام کاربری رو ۴adateam وارد کنید.
شماتیک و اتصالات:
پایه VCC ماژول رله چهارکانال = پایه ۳.۳ ولت برد NodeMCU پایه GND ماژول رله چهارکانال = پایه GND برد NodeMCU پایه IN1 ماژول رله چهارکانال = پایه D1 برد NodeMCU پایه IN2 ماژول رله چهارکانال = پایه D2 برد NodeMCU پایه IN3 ماژول رله چهارکانال = پایه D3 برد NodeMCU پایه IN4 ماژول رله چهارکانال = پایه D5 برد NodeMCU سیم فاز لامپ = پایه NO ماژول رله چهارکانال فاز ورودی = کلید تک پل فاز خروجی کلید تک پل = پایه COM ماژول رله چهار کانال سیم نول برق ورودی = سیم نول لامپ ها وپریز
کد نویسی:
داخل این کد اول کتابخونه رو فرا خوانی میکنیم و بعد متغیر نام وایفای و رمز وایفای رو مینویسیم و بعد پورت رو روی ۸۰ تنظیم میکنیم و متغیر هایی برای حالت رله ها و متغیر هایی برای معرفی پایه رله پریز و لامپ ها مینویسیم. داخل void setup سرعت آپلود رو روی ۱۱۵۲۰۰ تنظیم میکنیم و حالت پایه ها (ورودی یا خروجی)رو مشخص میکنیم و بعد متغیر هایی که برای نام وایفای و رمز وایفای نوشته بودیم رو فرا میخونیم همچینین سرور هم ران میکنیم یا فراخوانی میکنیم. داخل void loop تنظیمات کلاینت رو مینویسیم و بعد شرط هایی مینویسیم که اگه حالت پایه تغییر کرده دیجیتال رایت کنه و رله رو با توجه به متغیر خاموش و روشن کنه. در آخر هم کد های مربوطه به سمت html ووب رو مینویسیم.
۱ ۲ ۳ ۴ ۵ ۶ ۷ ۸ ۹ ۱۰ ۱۱ ۱۲ ۱۳ ۱۴ ۱۵ ۱۶ ۱۷ ۱۸ ۱۹ ۲۰ ۲۱ ۲۲ ۲۳ ۲۴ ۲۵ ۲۶ ۲۷ ۲۸ ۲۹ ۳۰ ۳۱ ۳۲ ۳۳ ۳۴ ۳۵ ۳۶ ۳۷ ۳۸ ۳۹ ۴۰ ۴۱ ۴۲ ۴۳ ۴۴ ۴۵ ۴۶ ۴۷ ۴۸ ۴۹ ۵۰ ۵۱ ۵۲ ۵۳ ۵۴ ۵۵ ۵۶ ۵۷ ۵۸ ۵۹ ۶۰ ۶۱ ۶۲ ۶۳ ۶۴ ۶۵ ۶۶ ۶۷ ۶۸ ۶۹ ۷۰ ۷۱ ۷۲ ۷۳ ۷۴ ۷۵ ۷۶ ۷۷ ۷۸ ۷۹ ۸۰ ۸۱ ۸۲ ۸۳ ۸۴ ۸۵ ۸۶ ۸۷ ۸۸ ۸۹ ۹۰ ۹۱ ۹۲ ۹۳ ۹۴ ۹۵ ۹۶ ۹۷ ۹۸ ۹۹ ۱۰۰ ۱۰۱ ۱۰۲ ۱۰۳ ۱۰۴ ۱۰۵ ۱۰۶ ۱۰۷ ۱۰۸ ۱۰۹ ۱۱۰ ۱۱۱ ۱۱۲ ۱۱۳ ۱۱۴ ۱۱۵ ۱۱۶ ۱۱۷ ۱۱۸ ۱۱۹ ۱۲۰ ۱۲۱ ۱۲۲ ۱۲۳ ۱۲۴ ۱۲۵ ۱۲۶ ۱۲۷ ۱۲۸ ۱۲۹ ۱۳۰ ۱۳۱ ۱۳۲ ۱۳۳ ۱۳۴ ۱۳۵ ۱۳۶ ۱۳۷ ۱۳۸ ۱۳۹ ۱۴۰ ۱۴۱ ۱۴۲ ۱۴۳ |
#include <ESP8266WiFi.h> #define ssid "wifi name" #define password "wifi password" WiFiServer server(۸۰); String header; String state1 = "Off"; String state2 = "Off"; String state3 = "Off"; String state4 = "Off"; int priz = D1; int lamp1 = D2; int lamp2 = D3; int lamp3 = D5; void setup() { Serial.begin(۱۱۵۲۰۰); pinMode(priz, OUTPUT); pinMode(lamp1, OUTPUT); pinMode(lamp2, OUTPUT); pinMode(lamp3, OUTPUT); digitalWrite(priz, LOW); digitalWrite(lamp1, LOW); digitalWrite(lamp2, LOW); digitalWrite(lamp3, LOW); WiFi.begin(ssid, password); server.begin(); delay(۱۰۰۰۰); } void loop() { WiFiClient client = server.available(); if (client) { boolean blank_line = true; while (client.connected()) { if (client.available()) { char c = client.read(); header += c; if (c == '\n' && blank_line) { if (header.indexOf("NGFkYXRlYW0") >= ۰) { // client.println("HTTP/1.1 200 OK"); client.println("Content-Type: text/html"); client.println("Connection: close"); client.println(); if (header.indexOf("GET / HTTP/1.1") >= ۰) { } else if (header.indexOf("GET /prizon HTTP/1.1") >= ۰) { state1 = "On"; digitalWrite(priz, HIGH); } else if (header.indexOf("GET /prizoff HTTP/1.1") >= ۰) { state1 = "Off"; digitalWrite(priz, LOW); } else if (header.indexOf("GET /lamp1on HTTP/1.1") >= ۰) { state2 = "On"; digitalWrite(lamp1, HIGH); } else if (header.indexOf("GET /lamp1off HTTP/1.1") >= ۰) { state2 = "Off"; digitalWrite(lamp1, LOW); } else if (header.indexOf("GET /lamp2on HTTP/1.1") >= ۰) { state3 = "On"; digitalWrite(lamp2, HIGH); } else if (header.indexOf("GET /lamp2off HTTP/1.1") >= ۰) { state3 = "Off"; digitalWrite(lamp2, LOW); } else if (header.indexOf("GET /LED4on HTTP/1.1") >= ۰) { state4 = "On"; digitalWrite(lamp3, HIGH); } else if (header.indexOf("GET /LED4off HTTP/1.1") >= ۰) { state4 = "Off"; digitalWrite(lamp3, LOW); } client.println("<!DOCTYPE HTML>"); client.println("<html>"); client.println("<head>"); client.println("<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">"); client.println("<link rel=\"stylesheet\" href=\"https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/css/bootstrap.min.css\">"); client.println("</head><div class=\"container\">"); client.println("<h1>4adateam</h1>"); client.println("<h2>WebServer</h2>"); client.println("<h3>priz: State: " + state1); client.println("<div class=\"row\">"); client.println("<div class=\"col-md-2\"><a href=\"/prizon\" class=\"btn btn-block btn-lg btn-primary\" role=\"button\">ON</a></div>"); client.println("<div class=\"col-md-2\"><a href=\"/prizoff\" class=\"btn btn-block btn-lg btn-info\" role=\"button\">OFF</a></div>"); client.println("</div>"); client.println("<h3>lamp1: State: " + state2); client.println("<div class=\"row\">"); client.println("<div class=\"col-md-2\"><a href=\"/lamp1on\" class=\"btn btn-block btn-lg btn-primary\" role=\"button\">ON</a></div>"); client.println("<div class=\"col-md-2\"><a href=\"/lamp1off\" class=\"btn btn-block btn-lg btn-info\" role=\"button\">OFF</a></div>"); client.println("</div>"); client.println("<h3>lamp2: State: " + state3); client.println("<div class=\"row\">"); client.println("<div class=\"col-md-2\"><a href=\"/lamp2on\" class=\"btn btn-block btn-lg btn-primary\" role=\"button\">ON</a></div>"); client.println("<div class=\"col-md-2\"><a href=\"/lamp2off\" class=\"btn btn-block btn-lg btn-info\" role=\"button\">OFF</a></div>"); client.println("</div>"); client.println("<h3>lamp3: State: " + state4); client.println("<div class=\"row\">"); client.println("<div class=\"col-md-2\"><a href=\"/lamp3on\" class=\"btn btn-block btn-lg btn-primary\" role=\"button\">ON</a></div>"); client.println("<div class=\"col-md-2\"><a href=\"/lamp3off\" class=\"btn btn-block btn-lg btn-info\" role=\"button\">OFF</a></div>"); client.println("</div></div></html>"); } else { client.println("HTTP/1.1 401 Unauthorized"); client.println("WWW-Authenticate: Basic realm=\"Secure\""); client.println("Content-Type: text/html"); client.println(); client.println("<html>Authentication failed</html>"); } header = ""; break; } if (c == '\n') { blank_line = true; } else if (c != '\r') { blank_line = false; } } } delay(۱); client.stop(); } } |