در این آموزش با استفاده از برد ESP8266 قصد کنترل ۴ وسیله برقی بصورت همزمان به کمک ماژول های رله را داریم، به این صورت که با راهاندازی یک وب سرور با اینترنت موجود در خانه یا محل کار قادر به کنترل رله ها و برقراری ارتباط با برد وایفای یعنی ESP8266 باشیم. فرض کنید قصد کنترل چند وسیله برقی را دارید خب ماژولی که مناسب این مورد است قطعا ماژول رله است اما به چه روشی قصد دارید خود ماژول رله را کنترل کنید در این آموزش قصد داریم یکی از بهترین روش ها برای این مورد را به شما آموزش دهیم که از هر نقطه در خانه یا محل کار قادر به کنترل وسایل برقی خود باشید. در ادامه این آموزش با مرجع تخصصی آردوینو به زبان فارسی، دیجی اسپارک همراه باشید.
برد ESP8266
تراشه های ESP8266 از موارد محبوب در زمینه اینترنت اشیا هستند که نسبت به دیگر نمونه ها کیفیت بهتر و همچنین قیمت پایین تری نیز دارند، هسته مرکزی این ماژول ESP8266 EX می باشد که در واقع زیر این شیلد فلزی قرار گرفته است، در ضمن این شیلد فلزی به منظور کاهش نویز و همچنین محافظت از قطعات SMD حساس این ماژول قرار داده شده است. این ماژول ها در سری های مختلفی تولید میشوند از جمله esp01 و esp12، در واقع تفاوتی که مدل ها با یکدیگر دارند تعداد GPIO ها و همچنین حافظه آن ها است البته معمولا از نظر ظاهری نیز تفاوت هایی که با یکدیگر دارند که قابل تشخیص است. این ماژول ها از شبکه WIFI داخلی پشتیبانی میکنند، این میکرو کنترلر ها اولین بار در سال ۲۰۱۴ به بازار عرضه شدند. ESP8266 دارای ۱۳ GPIO و همچنین یک ورودی آنالوگ (A0) است.
وب سرور ۴ وسیله برقی
وب سرور ها برنامه هایی هستند که مسئولیت آن ها قبول کردن درخواست های Http است که از سمت کاربران ارسال می شود، وب سرور ها در پاسخ اطلاعاتی را ارسال می کنند که ما معمولا به نام صفحات Html میشناسیم. خب حالا فرض کنیم که در مرورگر https://digispark.ir را سرچ کردیم، اتفاقی که میافتد به این شکل است که مرورگر شما یک درخواست به دامنهای با نام digispark.ir ارسال میکند. در حالت عادی زمانی که شما آدرس سایتی را در مرورگر جست و جو میکنید از حروف انگلیس استفاده میکنید یعنی کلماتی قابل فهم برای انسان اما در واقع برای ورود به یک سایت باید از طریق ip آن اقدام کنید، اینجاست که مفهومی به نام DNS وارد کار میشود، پس در واقع زمانی که شما URL سایتی را جستجو می کنید مرورگر از طریق سرویس DNS، آی پی مربوط را پیدا میکند و درخواستی ارسال خواهد کرد.
توضیح تکمیلی
در این پروژه با استفاده از تراشه ESP8266 که توسط برد nodemcu راهاندازی میشود، یک وب سرور با ظاهر قابل قبول راهاندازی کردیم که دارای چهار کلید است که هر کدام قابلیت وضعیت پین های مشخصی از برد ESP8266 را دارد البته بوسیله اتصالات اینترنت لوکال، که به ما این امکان را میدهد که در محل کار یا خانه به کنترل وسایل برقی خود بصورت وایرلس بپردازیم.
وسایل مورد نیاز
شماتیک و اتصالات
در این آموزش از چهار ماژول راله استفاده کردهایم که البته میتوانید از یک ماژول رله چهار رله استفاده کنید که نیاز به تغذیه تک به تک ماژول ها نباشد و با یک خط پاور ماژول تغذیه شود و تنها پایه های ورودی به هر GPIO متصل شود. اتصالات هر ماژول را با استفاده جدول و شماتیک زیر برقرار کنید. در این پروژه از پین D1, D2, D3, D4 برای فعال و غیر فعال کردن ماژول های رله استفاده میکنیم.
-
شماتیک اتصالات پروژه کنترل ۴ وسیله برقی همزمان با وبسرور ESP8266
کد و راهاندازی
در بخش بعدی از راهاندازی نوبت به کد های این پروژه میرسد، کد های این پروژه از دو بخش کلی تشکیل بخش اول راهاندازی وبسرور و ساخت بخش ظاهری آن برای تعامل با کاربر و در بخش تعریف فانکشن های مورد نظر برای برقراری ارتباط بین وب سرور و NODEMCU برای کنترل GPIO های مدنظر. در این قسمت بخش های مهمی از این کد را بررسی خواهیم کرد. در بخش اوب نام و رمز شبکه وایفای مدنظر را برای اتصال برد معرفی میکنیم.
1 2 |
const char* ssid = "C1F3R"; // نام وای فای مورد نظر const char* password = "314159265"; // پسوورد وای فای |
در ادامه GPIO های مد نظر برای کنترل را مشخص خواهیم کرد که می توانید با توجه به نیاز آن ها را تغییر دهید. توجه داشته باشد ترتیب پین های GPIO با نام پین های NODEMCU متفاوت است پس قبل از تغییر دادن این پین ها PINOUT های برد را چک کنید.
1 2 3 4 |
const int relay1 = 5; // D1 const int relay2 = 4; // D2 const int relay3 = 0; // D3 const int relay4 = 2; // D4 |
در این سه خط با استفاده از SSID و پسوورد وایفای اقدام به اتصال به شبکه خواهیم کرد.
1 2 3 |
WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); |
این چند خط مربوط به موارد موجود در صفحه وب است که میتوانیم از این طریق ظاهر آنها و همچنین کل صفحه را تغییر دهیم.
1 2 3 4 5 6 7 8 9 10 |
client.println("<!DOCTYPE html><html>"); client.println("<head><meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">"); client.println("<style>html, body {background-color: #566573; font-family: Helvetica; display: block; color: #DD13DA; margin: 0px auto; text-align: center;}"); client.println(".button { background-color: #DD13DA; border: none; color: black; padding: 12px 24px;"); client.println("text-decoration: none; font-size: 20px; margin: 2px; cursor: pointer;}"); client.println(".button2 {background-color: black; border: none; color: #DD13DA; padding: 12px 24px;}"); client.println(".textbox {width: 60px; border: 1px #333; padding: 16px 20px 0px 24px; background-image: linear-gradient(180deg, #fff, #ddd 40%, #ccc);}"); client.println(".mytext {font-size: 16px; font-weight:bold; font-family:Arial ; text-align: justify;}"); client.println("#container {width: 100%; height: 100%; margin-left: 5px; margin-top: 20px; padding: 10px; display: -webkit-flex; -webkit-justify-content: center; display: flex; justify-content: center;} "); |
کد کامل پروژه کنترل ۴ وسیله برقی همزمان با وبسرور ESP8266
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 |
#include <ESP8266WiFi.h> const char* ssid = "C1F3R"; // نام وای فای مورد نظر const char* password = "314159265"; // پسوورد وای فای // تنظیم پورت وب سرور WiFiServer server(80); // متغیر برای ذخیره درخواست های HTTP String header; String relay1State = "off"; String relay2State = "off"; String relay3State = "off"; String relay4State = "off"; // پین های مورد استفاده برای کنترل رله const int relay1 = 5; // D1 const int relay2 = 4; // D2 const int relay3 = 0; // D3 const int relay4 = 2; // D4 void setup() { Serial.begin(115200); pinMode(relay1, OUTPUT); // حالات پین های مربوط را انتخاب می کنیم pinMode(relay2, OUTPUT); pinMode(relay3, OUTPUT); pinMode(relay4, OUTPUT); digitalWrite(relay1, HIGH); // رله های را بطور پیفرض بر روی روشن قرار می دهیم digitalWrite(relay2, HIGH); digitalWrite(relay3, HIGH); digitalWrite(relay4, HIGH); Serial.print("Connecting to "); Serial.println(ssid); WiFi.begin(ssid, password); // با نام و پسوورد وارد شده اقدام به اتصال میکنیم while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(""); Serial.println("WiFi connected."); Serial.println("IP address: "); Serial.println(WiFi.localIP()); // ادرس ای پی را پرینت می کنیم server.begin(); } void loop() { WiFiClient client = server.available(); // وب سروو را اجرا میکنیم if (client) { Serial.println("New Client."); String currentLine = ""; while (client.connected()) { if (client.available()) { char c = client.read(); Serial.write(c); header += c; if (c == '\n') { if (currentLine.length() == 0) { client.println("HTTP/1.1 200 OK"); client.println("Content-type:text/html"); client.println("Connection: close"); client.println(); //با توجه به درخواست های دریافت شده پین فعال میشود if (header.indexOf("GET /5/on") >= 0) { Serial.println("GPIO 5 on"); relay1State = "on"; digitalWrite(relay1, LOW); } else if (header.indexOf("GET /5/off") >= 0) { Serial.println("GPIO 5 off"); relay1State = "off"; digitalWrite(relay1, HIGH); } else if (header.indexOf("GET /4/on") >= 0) { Serial.println("GPIO 4 on"); relay2State = "on"; digitalWrite(relay2, LOW); } else if (header.indexOf("GET /4/off") >= 0) { Serial.println("GPIO 4 off"); relay2State = "off"; digitalWrite(relay2, HIGH); } else if (header.indexOf("GET /0/on") >= 0) { Serial.println("GPIO 0 on"); relay3State = "on"; digitalWrite(relay3, LOW); } else if (header.indexOf("GET /0/off") >= 0) { Serial.println("GPIO 0 off"); relay3State = "off"; digitalWrite(relay3, HIGH); } else if (header.indexOf("GET /2/on") >= 0) { Serial.println("GPIO 2 on"); relay4State = "on"; digitalWrite(relay4, LOW); } else if (header.indexOf("GET /2/off") >= 0) { Serial.println("GPIO 2 off"); relay4State = "off"; digitalWrite(relay4, HIGH); } // صفحه HTML client.println("<!DOCTYPE html><html>"); client.println("<head><meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">"); // میتوانید مقادیر را با توجه به نیاز خود شخصی سازی کنید client.println("<style>html, body {background-color: #566573; font-family: Helvetica; display: block; color: #DD13DA; margin: 0px auto; text-align: center;}"); client.println(".button { background-color: #DD13DA; border: none; color: black; padding: 12px 24px;"); client.println("text-decoration: none; font-size: 20px; margin: 2px; cursor: pointer;}"); client.println(".button2 {background-color: black; border: none; color: #DD13DA; padding: 12px 24px;}"); client.println(".textbox {width: 60px; border: 1px #333; padding: 16px 20px 0px 24px; background-image: linear-gradient(180deg, #fff, #ddd 40%, #ccc);}"); client.println(".mytext {font-size: 16px; font-weight:bold; font-family:Arial ; text-align: justify;}"); client.println("#container {width: 100%; height: 100%; margin-left: 5px; margin-top: 20px; padding: 10px; display: -webkit-flex; -webkit-justify-content: center; display: flex; justify-content: center;} "); client.println("</style></head>"); client.println("<body><h1></h1>"); // المان های داخل صفحه وب تعریف می شوند client.println("<div id=\"container\">"); client.println("<p><div class=\"textbox mytext\">Relay 1 </div> "); if (relay1State == "off") { client.println("<a href=\"/5/on\"><button class=\"button\">OFF</button></a></p>"); } else { client.println("<a href=\"/5/off\"><button class=\"button button2\">ON</button></a></p>"); } client.println("</div>"); client.println("<div id=\"container\">"); client.println("<p><div class=\"textbox mytext\">Relay 2 </div> "); if (relay2State == "off") { client.println("<a href=\"/4/on\"><button class=\"button\">OFF</button></a></p>"); } else { client.println("<a href=\"/4/off\"><button class=\"button button2\">ON</button></a></p>"); } client.println("</div>"); client.println("<div id=\"container\">"); client.println("<p><div class=\"textbox mytext\">Relay 3 </div>"); if (relay3State == "off") { client.println("<a href=\"/0/on\"><button class=\"button\">OFF</button></a></p>"); } else { client.println("<a href=\"/0/off\"><button class=\"button button2\">ON</button></a></p>"); } client.println("</div>"); client.println("<div id=\"container\">"); client.println("<p><div class=\"textbox mytext\">Relay 4 </div>"); if (relay4State == "off") { client.println("<a href=\"/2/on\"><button class=\"button\">OFF</button></a></p>"); } else { client.println("<a href=\"/2/off\"><button class=\"button button2\">ON</button></a></p>"); } client.println("</div>"); client.println("</body></html>"); client.println(); break; } else { currentLine = ""; } } else if (c != '\r') { currentLine += c; } } } header = ""; client.stop(); Serial.println("Client disconnected."); Serial.println(""); } } |
جمع بندی
دز این پروژه تعداد چهار ماژول رله را توسط یک وبسرور که با کمک برد وایفای NODEMCU با تراشه ESP8266 راهاندازی و کنترل کردیم که شما میتوانید با تغییر دادن کد و اضافه کردن به تعداد رله ها در کد صفحه وب و فانکشن های کنترلی میتوانید تعداد ماژول های بیشتری را کنترل کنید. پس از اجرای این پروژه قادر خواهید بود با اتصال به اینترنت لوکال در خانه یا محل کار از امکانات این وب سرور راهاندازی شده استفاده کنید. همچنین میتوانیم با تغییر حالت اکسس پوینت به SoftAP از وب سرور بصورت مستقل و بدون نیاز به اینترنت استفاده کنیم.
چنانچه در مراحل راه اندازی و انجام این پروژه با مشکل مواجه شدید، بدون هیچ نگرانی در انتهای همین پست، به صورت ثبت نظر سوالتان را مطرح کنید. من در سریعترین زمان ممکن پاسخ رفع مشکل شما را خواهم داد. همچنین اگر ایرادی در کدها و یا مراحل اجرایی وجود دارند میتوانید از همین طریق اطلاع رسانی کنید.
در پایان نظرات و پیشنهادات خود را با ما درمیان بگذارید و با اشتراک گذاری این آموزش در شبکه های اجتماعی , از وبسایت دیجی اسپارک حمایت کنید.