کنترل وسایل برقی با WIFI
اینترنت اشیا IOT امروزه یکی از مباحث بسیار داغ و پرطرفدار در بین طراحان و برنامه نویسان حوزه الکترونیک می باشد. البته این محبوبیت بی دلیل نیست. با پیشرفت روز افزون تکنولوژی در دنیا، تمایل انسان ها نیز به استفاده از فناوری های تازه بالاتر رفته، به عنوان مثال در زمان حاضر علاقه مردم به ساخت یا خرید خانه های هوشمند بسیار بیشتر شده و هر روز به جمع افرادی که سعی در هوشمند سازی خانه های خود دارند افزوده می شود. همین موضوع سبب شده تا اینترنت اشیا IOT که یکی از مهمترین نیازهای اولیه مباحث هوشمند سازی است، به یک تجارت پر سود برای کار آفرینان تبدیل شود.
در این پروژه آردوینو از مبحث آموزش آردوینو قصد داریم تا 4 رله را که به یک برد آردوینو Arduino متصل شده اند، را توسط یک موبایل به واسطه امواج WIFI از راه دور کنترل نمائیم. همچنین در این پروژه برای اینکه بتوانیم برد آردوینو را به پروتکل WIFI (وای.فای) مجهز کنیم از ماژول ESP8266 کمک گرفته ایم.
ماژول WIFI ESP8266
در مطلب قبلی (معرفی ماژول ESP8266 و دستورات AT Command) با ماژول ESP8266 به صورت کامل آشنا شدیم. ماژول WIFI مدل ESP8266 را می توانیم به دو صورت سرور (SERVER) و کلاینت (client) در پروژه های خود استفاده کنیم. در این پروژه تصمیم داریم تا ماژول ESP8266 را به صورت سرور (SERVER) راه اندازی کنیم. در این حالت موبایل کاربر جهت ارسال درخواست های کنترل وسایل برقی در وضعیت کلاینت (client) قرار می گیرد.
نقشه شماتیک پروژه کنترل وسایل برقی با موبایل از طریق WIFI
لیست قطعات مورد نیاز
برد آردوینو NANO با میکروکنترلر Atmega328 | 1 عدد |
ماژول Wifi با خروجی سریال ESP8266-03 | 1 عدد |
آی سی ULN2804A مدل DIP اورجینال | 1 عدد |
رگولاتور ولتاژ 5 ولت L7805 | 1 عدد |
رگولاتور ولتاژ 3 ولت LF33CV | 1 عدد |
دیود 1N4007 | 6 عدد |
مقاومت 1 کیلو اهم با توان 0.25 وات و تلرانس 5 درصد | 4 عدد |
مقاومت 330 اهم با توان 0.25 وات و تلرانس 1 درصد | 1 عدد |
رله 12V ولت معمولی تک کنتاکت با جریان 10 آمپر | 4 عدد |
خازن الکترولیتی 1000uf میکروفاراد 16 ولت | 2 عدد |
خازن عدسی 100nF نانوفاراد | 1 عدد |
لامپ LED قرمز سایز 5mm میلی متر مدل مات | 2 عدد |
لامپ LED سبز سایز 5mm میلی متر مدل مات | 1 عدد |
لامپ LED زرد سایز 5mm میلی متر مدل مات | 2 عدد |
ترمینال پیچی 2 پین مدل KF300 رنگ آبی | 1 عدد |
ترمینال پیچی 3 پین مدل KF300 رنگ آبی | 4 عدد |
آداپتور 12V ولت 2A آمپر مدل بین راهی ساخت ایران | 1 عدد |
نقشه PCB پروژه
شرح عملکرد پروژه
در این پروژه برای اینکه کاربر بتواند 4 عدد رله را توسط موبایل کنترل کند، باید ابتدا از طریق منوی WIFI گوشی موبایل خود به WIFI ماژول ESP8266 متصل شود. لازم به ذکر است برای اتصال به ماژول WIFI باید از نام و پسوردی که در برنامه آردوینو از قبل برای ماژول WIFI تعریف شده است، استفاده کند. این نام و پسورد WIFI در برنامه نوشته شده در نرم افزار آردوینو به صورت پیش فرض به صورت زیر است، که شما می توانید آنرا به راحتی در برنامه آردوینو که در ادامه آمده است به مقادیر دلخواه خود تغییر دهید.
نام WIFI ماژول = electronics98_ESP
پسورد WIFI ماژول = electronics98
پس از اتصال گوشی موبایل خود به ماژول WIFI لازم است اپلیکیشنی با نام WIFI Controller را بر روی تلفن هوشمند خود نصب کنید. ما از این برنامه برای ارسال فرامین کنترلی از طریق پروتکل WIFI برای برد آردوینو استفاده می کنیم. این App را می توانید از گوگل پلی دانلود کنید البته فایل نصبی آن در پیوست فایل پروژه آمده است که می توانید از انتهای همین مطلب به صورت مستقیم دانلود کنید. پس از نصب اپلیکیشن و اجرای آن با محیطی همانند تصویر زیر روبرو می شوید.
پس از اینکه برنامه را اجرا کردید، همانند تصویر بالا مقادیر زیر را در کادرهای مربوطه وارد کنید و سپس کلید Add را بزنید و به ماژول ESP8266 که در حالت سرور قرار گرفته است متصل شوید. لازم به ذکر است این مقادیر را می توانید به راحتی در برنامه آردوینو که در ادامه آمده است به مقادیر دلخواه خود تغییر دهید.
آدرس IP (آی.پی) سرور = 192.168.4.1
شماره پورت (PORT) سرور = 8888
حال جهت کنترل وسایل برقی متصل به رله ها تنها کافی است دستورات مندرج در جدولی که در ادامه آمده است را همانند تصویر زیر در کادر مربوطه وارد کنید و سپس گزینه SendHEX را لمس کنید. در صورتیکه دستور شما به درستی وارد شده باشد و توسط برد آردوینو اجرا شود، نتیجه عملکرد دستورات ارسالی در قسمت Received Data نرم افزار WIFI Controller چاپ می شود.
دستورات مورد نیاز جهت کنترل رله ها در برنامه WIFI Controller موبایل
کد دستوری روشن کردن رله اول
1 |
R1ON |
نتیجه بازگشتی دستور پس از آنکه برد آردوینو وسیله برقی اول را فعال کرد.
1 |
Relay 1 ON |
کد دستوری خاموش کردن رله اول
1 |
R1OF |
نتیجه بازگشتی دستور پس از آنکه برد آردوینو وسیله برقی اول را غیر فعال کرد.
1 |
Relay 1 OFF |
کد دستوری روشن کردن رله دوم
1 |
R2ON |
نتیجه بازگشتی دستور پس از آنکه برد آردوینو وسیله برقی دوم را فعال کرد.
1 |
Relay 2 ON |
کد دستوری خاموش کردن رله دوم
1 |
R2OF |
نتیجه بازگشتی دستور پس از آنکه برد آردوینو وسیله برقی دوم را غیر فعال کرد.
1 |
Relay 2 OFF |
کد دستوری روشن کردن رله سوم
1 |
R3ON |
نتیجه بازگشتی دستور پس از آنکه برد آردوینو وسیله برقی سوم را فعال کرد.
1 |
Relay 3 ON |
کد دستوری خاموش کردن رله سوم
1 |
R3OF |
نتیجه بازگشتی دستور پس از آنکه برد آردوینو وسیله برقی سوم را غیر فعال کرد.
1 |
Relay 3 OFF |
کد دستوری روشن کردن رله چهارم
1 |
R4ON |
نتیجه بازگشتی دستور پس از آنکه برد آردوینو وسیله برقی چهارم را فعال کرد.
1 |
Relay 4 ON |
کد دستوری خاموش کردن رله چهارم
1 |
R4OF |
نتیجه بازگشتی دستور پس از آنکه برد آردوینو وسیله برقی چهارم را غیر فعال کرد.
1 |
Relay 4 OFF |
کد دستوری روشن کردن تمامی رله ها
1 |
ON |
نتیجه بازگشتی دستور پس از آنکه برد آردوینو تمامی وسایل برقی را فعال کرد.
1 |
All relays are turned ON |
کد دستوری خاموش کردن تمامی رله ها
1 |
OFF |
نتیجه بازگشتی دستور پس از آنکه برد آردوینو تمامی وسایل برقی را غیر فعال کرد.
1 |
All relays are turned OFF |
برنامه نویسی برد Arduino در نرم افزار آردوینو
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 |
#include <SoftwareSerial.h> //*********************************************Config Uart_PIN const int PIN_RXD = 3; const int PIN_TXT = 2; SoftwareSerial WIFI(PIN_RXD, PIN_TXT); // RX, TX //*********************************************Config PIN_RLY const int PIN_RLY1 = 4; const int PIN_RLY2 = 5; const int PIN_RLY3 = 6; const int PIN_RLY4 = 7; const int PIN_LED = 13; //*********************************************Config WIFI const String IP_SERVER = "192.168.4.1"; const String wifi_name = "electronics98_ESP"; const String wifi_pass = "electronics98"; const long interval = 500; //*********************************************Create Value unsigned long previousMillis = 0; int start_search = 0; int ledState = HIGH; String input_data; String Message; //*********************************************Subprogram setup() void setup() { pinMode(PIN_RLY1, OUTPUT); pinMode(PIN_RLY2, OUTPUT); pinMode(PIN_RLY3, OUTPUT); pinMode(PIN_RLY4, OUTPUT); pinMode(PIN_LED, OUTPUT); digitalWrite(PIN_RLY1, LOW); digitalWrite(PIN_RLY2, LOW); digitalWrite(PIN_RLY3, LOW); digitalWrite(PIN_RLY4, LOW); digitalWrite(PIN_LED, HIGH); WIFI.begin(115200); set_ESP8266_server(); set_ip_wifi(); set_pass_wifi(); } //*********************************************Subprogram loop() void loop() { if (WIFI.available()) { digitalWrite(PIN_LED, HIGH); read_input_data(); } unsigned long currentMillis = millis(); if (currentMillis - previousMillis >= interval) { previousMillis = currentMillis; if (ledState == LOW) { ledState = HIGH; } else { ledState = LOW; } digitalWrite(PIN_LED, ledState); } } //*********************************************Subprogram read_input_data() void read_input_data() { input_data = WIFI.readString(); input_data.trim(); start_search = input_data.indexOf(":"); start_search++; input_data = input_data.substring(start_search); Run_command(); } //*********************************************Subprogram Run_command() void Run_command() { Message = ""; if (input_data == "R1on" || input_data == "r1on" || input_data == "R1ON" || input_data == "r1On" || input_data == "r1ON" || input_data == "r1oN") { digitalWrite(PIN_RLY1, HIGH); Message = "Relay 1 ON"; } else if (input_data == "R1of" || input_data == "r1of" || input_data == "R1OF" || input_data == "r1Of" || input_data == "r1OF" || input_data == "r1oF") { digitalWrite(PIN_RLY1, LOW); Message = "Relay 1 OFF"; } else if (input_data == "R2on" || input_data == "r2on" || input_data == "R2ON" || input_data == "r2On" || input_data == "r2ON" || input_data == "r2oN") { digitalWrite(PIN_RLY2, HIGH); Message = "Relay 2 ON"; } else if (input_data == "R2of" || input_data == "r2of" || input_data == "R2OF" || input_data == "r2Of" || input_data == "r2OF" || input_data == "r2oF") { digitalWrite(PIN_RLY2, LOW); Message = "Relay 2 OFF"; } else if (input_data == "R3on" || input_data == "r3on" || input_data == "R3ON" || input_data == "r3On" || input_data == "r3ON" || input_data == "r3oN") { digitalWrite(PIN_RLY3, HIGH); Message = "Relay 3 ON"; } else if (input_data == "R3of" || input_data == "r3of" || input_data == "R3OF" || input_data == "r3Of" || input_data == "r3OF" || input_data == "r3oF") { digitalWrite(PIN_RLY3, LOW); Message = "Relay 3 OFF"; } else if (input_data == "R4on" || input_data == "r4on" || input_data == "R4ON" || input_data == "r4On" || input_data == "r4ON" || input_data == "r4oN") { digitalWrite(PIN_RLY4, HIGH); Message = "Relay 4 ON"; } else if (input_data == "R4of" || input_data == "r4of" || input_data == "R4OF" || input_data == "r4Of" || input_data == "r4OF" || input_data == "r4oF") { digitalWrite(PIN_RLY4, LOW); Message = "Relay 4 OFF"; } else if (input_data == "on" || input_data == "ON" || input_data == "On") { digitalWrite(PIN_RLY1, HIGH); digitalWrite(PIN_RLY2, HIGH); digitalWrite(PIN_RLY3, HIGH); digitalWrite(PIN_RLY4, HIGH); Message = "All relays are turned ON"; } else if (input_data == "off" || input_data == "OFF" || input_data == "Off") { digitalWrite(PIN_RLY1, LOW); digitalWrite(PIN_RLY2, LOW); digitalWrite(PIN_RLY3, LOW); digitalWrite(PIN_RLY4, LOW); Message = "All relays are turned OFF"; } if (Message != "") { Message = Message + " | "; WIFI.print("AT+CIPSEND=0,"); WIFI.println(Message.length()); delay (1000); WIFI.println(Message); } } //*********************************************Subprogram set_ESP8266_server() void set_ESP8266_server() { WIFI.println("AT"); delay (1000); WIFI.println("AT+RST"); delay (3000); WIFI.println("AT+CIPMUX=1"); delay (2000); WIFI.println("AT+CIPSERVER=1,8888"); delay (3000); } //*********************************************Subprogram set_ip_wifi() void set_ip_wifi() { WIFI.print("AT+CIPAP=\""); WIFI.print(IP_SERVER); WIFI.println("\""); delay (2000); } //*********************************************Subprogram set_pass_wifi() void set_pass_wifi() { WIFI.print("AT+CWSAP=\""); WIFI.print(wifi_name); WIFI.print("\",\""); WIFI.print(wifi_pass); WIFI.println("\",1,3"); delay (3000); } |
سلام و خسته نباشید به شما
عید نوروز رو به شما و عوامل سایت الکترونیک 98 تبریک می گم
اگر امکانش هست فایل پروتیوس رو ارسال کنید
با سلام و احترام
ممنون از لطف و محبت شما، ما نیز شروع سال جدید را به شما تبریک عرض میکنیم و امیدواریم سال خوبی داشته باشید.
لطفا درخواست خود را از طریق ایمیل مطرح فرمایید تا در صورت در دسترس بودن فایل برایتان ارسال گردد.
اگر براتون ممکن هست من ایمیلم رو همینجا میزارم به ایمیلم بفرستید و خبر بدید ممنون لطف و محبت شما میشم
با سلام و احترام
فایل به ایمیل شما ارسال گردید.
سلام استاد خیلی لطف کردید ممنونم
سلام استاد. من این مدار رو بستم اما اسم وای فای رو پیدا نمیکنه تویه گوشیم حتی add network رو هم که میزنم بازم نمیاره اما تو اپلیکیشن ساخته شده شما میرم باز میکنه ولی اون نقطه سبز تو فیلمه شما برای من قرمزه. در کل که مدار حتی ال ای دی رویه بورد طبق توزیحات شما چشمک میزنه بعد چند ثانیه و پیش میره اما گوشیه من اسم وای فای رو پیدا نمیکنه حتی با دوتا گوشی امتحان کردم اما اونم پیدا نکرد. ممنون میشم راهنماییم کنید که مشکل من کجاست
راستی تویه توضیحات در اپلیکیشن الکترونیک ۹۸ شما گفتید ماژول وای فای esp8266-12e اما من داخل فیلم شما که دقت کردم از esp8266-12f استفاده کردید. آیا این دو با هم تفاوت دارند یا نه؟ چرا شما ۱۲ اف گزاشتین و تو توضیحات گفتید ۱۲ ای؟ ممنون میشم راهنمایی کنید آخه پروژه ترمم هست
اگر مشکل با خرید esp8266-12f حل میشه من مشکلی ندارم فقط تو رو خدا تخصصی بگین که مشکل از همین ماژول هست یا نه
با سلام و احترام
شما می توانید از هر دو ماژول esp8266-12f و esp8266-12e استفاده کنید. با توجه به گفته های شما احتمالا ارتباط Uart بین ماژول شما و برد آردوینو برقرار نیست، برای این منظور بهتر است ابتدا توسط یک مولتی متر نمامی اتصالات روی برد را به صورت کامل بررسی فرمایید. سپس در صورتیکه هنوز مشکل پابرجا بود بهتر است برای بررسی صحت عملکرد ماژول WIFI آنرا با استفاده از یک ماژول مبدل USB به TTL سریال به کامپیوتر متصل نمایید و از طریق محیط ترمینال نرم افزار آردوینو با بادریت 115200 با ماژول WIFI ارتباط برقرار کنید و کدهای موجود در زیر برنامه های زیر را به ترتیب به صورت دستی برای ماژول ارسال کنید و بررسی کنید که آیا ماژول به فرامین شما پاسخ می دهد یا خیر.
set_ESP8266_server();
set_ip_wifi();
set_pass_wifi();
سلام مجدد خیلی ممنون حتما تست میکنم
سلام
من از یه فایل دیگه برای برنامه نویسی استفاده کردم فقط نمیدونم شماره port رو از کجاش پیدا کنم
سلام ، لطفاً فایل pcb یا فایل برنامه پروتئوسشو میفرستید
سلام وقت بخیر
دلیل استفاده از برد آردینو چیه !
ماژول esp8266 خودش پردازنده هست و نیازی به یه پردازشگر دیگر نداره!