کنترل دو LED از طریق وب
در این آموزش قصد داریم دو عدد LED رو از طریق محیط وب و برد NodeMCU کنترل کنیم . این آموزش یک مرحله از آموزش قبلی که یک LED رو خاموش و روشن میکردیم بالاتر هستش و محیطش یکم گرافیکی تر هستش. راستی شما میتونین بجای LED از رله هم استفاده کنین فرقی نمیکنه. یادتون باشه وقتی برد به وایفای وصل شد باید ای پی برد رو پیدا کنید اگه به هات اسپات گوشی برد رو وصل میکنید از قسمت دستگاه های وصل شده دستگاه esp ای پیش رو میتونید ببینید. اگه یادتون باشه داخل آموزش قبلی گفتیم که برای خاموش و روشن کردن LED دو تا صفحه ایجاد شده که اگه ما به طور مثال به صفحه رذوشن شدن LED بریم LED روشن میشه و برعکس گفتیم برای اینکه کارمون راحت تر بشه یه صفحه ایجاد میکنیم و کلید هایی میزاریم که وقتی کلیک شدن به اون صفحه های مربوطه مراجعه بشه. اینجا هم ما دو تا کلید گذاشتیم که هربار که میزنیم یدون از کلید هارو به یکی از صفحه ها مرجعه میکنه . پس هرکلید دو صفحه داره یکی برای خاموش کردن و یکی برای روشن کردن پس در نتیجه ما چهار تا صفحه داریم دو تا برای خاموش و روشن LED اول و دوتا برای خاموش و روشن LED دوم.
شماتیک و اتصالات:
پایه مثبت یا بلند تر LED اول = پایه D7 برد NodeMCU پایه منفی یا کوتاه تر LED اول = پایه GND برد NodeMCU پایه مثبت یا بلند تر LED دوم = پایه D6 برد NodeMCU پایه منفی یا کوتاه تر LED دوم = پایه GND برد NodeMCU
کدنویسی:
با توجه به اینکه داخل آموزش قبلی با جزییات کد آشنا شدید اینجا یه توضیح کلی درباره کد میدم. داخل این کد دو تا کتابخونه اول فرا میخونیم و بعد نام وایفای و رمز عبور رو مینویسیم و پورت سرور رو روی ۸۰ تنظیم میکنیم و دو تا متغیر برای معرفی پایه و دو تا متغیر برای معرفی حالت پایه مینویسیم. داخل void setup هم صفحات رو ایجاد میکنیم و سرعت آپلود رو تنظیم میکنیم و حالت پایه ها رو مشخص میکنیم. داخل void loop هم تنظیمات کلاینت رو انجام میدیم و شرط مینویسیم که با توجه به مقدار متغیر حالت پایه مقدار دیجیتال پایه هم عوض بشه. بعد برای هر صفحه تابع معرفی میکنیم و توش تنظیمات مربوط به صفحه رو انجام میدیم و در نهایت کد های مربوط به html و وب رو مینویسیم.
۱ ۲ ۳ ۴ ۵ ۶ ۷ ۸ ۹ ۱۰ ۱۱ ۱۲ ۱۳ ۱۴ ۱۵ ۱۶ ۱۷ ۱۸ ۱۹ ۲۰ ۲۱ ۲۲ ۲۳ ۲۴ ۲۵ ۲۶ ۲۷ ۲۸ ۲۹ ۳۰ ۳۱ ۳۲ ۳۳ ۳۴ ۳۵ ۳۶ ۳۷ ۳۸ ۳۹ ۴۰ ۴۱ ۴۲ ۴۳ ۴۴ ۴۵ ۴۶ ۴۷ ۴۸ ۴۹ ۵۰ ۵۱ ۵۲ ۵۳ ۵۴ ۵۵ ۵۶ ۵۷ ۵۸ ۵۹ ۶۰ ۶۱ ۶۲ ۶۳ ۶۴ ۶۵ ۶۶ ۶۷ ۶۸ ۶۹ ۷۰ ۷۱ ۷۲ ۷۳ ۷۴ ۷۵ ۷۶ ۷۷ ۷۸ ۷۹ ۸۰ ۸۱ ۸۲ ۸۳ ۸۴ ۸۵ ۸۶ ۸۷ ۸۸ ۸۹ ۹۰ ۹۱ ۹۲ ۹۳ ۹۴ ۹۵ ۹۶ ۹۷ ۹۸ ۹۹ ۱۰۰ ۱۰۱ ۱۰۲ ۱۰۳ ۱۰۴ |
#include <ESP8266WiFi.h> #include <ESP8266WebServer.h> const char* ssid = "YourNetworkName"; // Enter SSID here const char* password = "YourPassword"; //Enter Password here ESP8266WebServer server(۸۰); uint8_t LED1pin = D7; bool LED1status = LOW; uint8_t LED2pin = D6; bool LED2status = LOW; void setup() { Serial.begin(۱۱۵۲۰۰); delay(۱۰۰); pinMode(LED1pin, OUTPUT); pinMode(LED2pin, OUTPUT); WiFi.begin(ssid, password); server.on("/", handle_OnConnect); server.on("/led1on", handle_led1on); server.on("/led1off", handle_led1off); server.on("/led2on", handle_led2on); server.on("/led2off", handle_led2off); server.onNotFound(handle_NotFound); server.begin(); } void loop() { server.handleClient(); if(LED1status) {digitalWrite(LED1pin, HIGH);} else {digitalWrite(LED1pin, LOW);} if(LED2status) {digitalWrite(LED2pin, HIGH);} else {digitalWrite(LED2pin, LOW);} } void handle_OnConnect() { LED1status = LOW; LED2status = LOW; server.send(۲۰۰, "text/html", SendHTML(LED1status,LED2status)); } void handle_led1on() { LED1status = HIGH; server.send(۲۰۰, "text/html", SendHTML(true,LED2status)); } void handle_led1off() { LED1status = LOW; server.send(۲۰۰, "text/html", SendHTML(false,LED2status)); } void handle_led2on() { LED2status = HIGH; server.send(۲۰۰, "text/html", SendHTML(LED1status,true)); } void handle_led2off() { LED2status = LOW; server.send(۲۰۰, "text/html", SendHTML(LED1status,false)); } void handle_NotFound(){ server.send(۴۰۴, "text/plain", "Not found"); } String SendHTML(uint8_t led1stat,uint8_t led2stat){ String ptr = "<!DOCTYPE html> <html>\n"; ptr +="<head><meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, user-scalable=no\">\n"; ptr +="<title>LED Control</title>\n"; ptr +="<style>html { font-family: Helvetica; display: inline-block; margin: 0px auto; text-align: center;}\n"; ptr +="body{margin-top: ۵۰px;} h1 {color: #۴۴۴۴۴۴;margin: ۵۰px auto ۳۰px;} h3 {color: #۴۴۴۴۴۴;margin-bottom: ۵۰px;}\n"; ptr +=".button {display: block;width: ۸۰px;background-color: #۱abc9c;border: none;color: white;padding: ۱۳px ۳۰px;text-decoration: none;font-size: ۲۵px;margin: 0px auto ۳۵px;cursor: pointer;border-radius: ۴px;}\n"; ptr +=".button-on {background-color: #۱abc9c;}\n"; ptr +=".button-on:active {background-color: #۱۶a085;}\n"; ptr +=".button-off {background-color: #۳۴۴۹۵e;}\n"; ptr +=".button-off:active {background-color: #۲c3e50;}\n"; ptr +="p {font-size: ۱۴px;color: #۸۸۸;margin-bottom: ۱۰px;}\n"; ptr +="</style>\n"; ptr +="</head>\n"; ptr +="<body>\n"; ptr +="<h1>4ADA LED Control</h1>\n"; ptr +="<h3>Controling 2LED with 4ADA Web page</h3>\n"; if(led1stat) {ptr +="<p>LED1 Status: ON</p><a class=\"button button-off\" href=\"/led1off\">OFF</a>\n";} else {ptr +="<p>LED1 Status: OFF</p><a class=\"button button-on\" href=\"/led1on\">ON</a>\n";} if(led2stat) {ptr +="<p>LED2 Status: ON</p><a class=\"button button-off\" href=\"/led2off\">OFF</a>\n";} else {ptr +="<p>LED2 Status: OFF</p><a class=\"button button-on\" href=\"/led2on\">ON</a>\n";} ptr +="</body>\n"; ptr +="</html>\n"; return ptr; } |
با سلام و خدا قوت
من کد رو استفاده کردم و جواب گرفتم عالی بود
حالا اگر بخواهیم تعداد led هارا افزایش دهیم چه تغییری در کد باید ایجاد کرد؟
ممنون میشم راهنماییم کنید
بسیار هم عالی. فقط کافیه توی کدنویس آردوینو LED های بیشتر روی پایه های Node MCU ایجاد کنید
همچنین دکمه های بیشتر هم روی وب با HTML بنویسید
درواقع فقط تکرار کدهای قبله