آموزش گام به گام ساخت مدار کنترل وسایل با WIFI 


من در این آموزش میخوام نحوه کنترل ، روشن و خاموش کردن یک LED ( یا هر دستگاه دیگه ای ) توسط ماژول  وای فای ESP8266 و برد Arduino رو به شما آموزش بدم . 


دقیقا چکار قرار انجام بدیم ؟!!


الان میگم ، ما با یه موبایل میخوایم توسط شبکه وای فای داخلی یک LED یا با کمی تغییر یک دستگاه رو کنترل کنیم  کنیم . 


برای اینکار از یک ماژول ESP8266 که با ارتیاط سریال به برد آردوینو وصل هست استفاده میکنیم . برد آردوینو از طریق  ESP8266 به شبکه وای فای متصل میشه تا دیتا رو از کلاینت ( در این جا موبایل ) دریافت و یا به کلایت ارسال کنه .


نقشه مدار :


شکل زیر نقشه مدار کنترل LED توسط وای فای به وسیله برد آردینو و ماژول ESP8266 نشون میده .


کنترل led توسط آردینو



قطعات مورد نیاز :


  1. برد Arduino UNO
  2. ماژول ESP-01S دارای هسته وایفای ESP8266 

  3. LED
  4. مقاومت 330 اهم 1/4 وات
  5. مقاومت 1 کیلو اهم 1/4 وات
  6. مقاومت 2.2 کیلو اهم 1/4 وات
  7. کلید فشاری
  8. سیم های اتصال 
  9. مینی بردبرد
اینم شکل GPIO های ESP-01S

ESP8266

طراحی مدار

من از ارتباط سریال نرم افزاری برد آردینو استفاده کردم . برای این ارتباط سریالی از پایه 2 و3 برد آردینو به عنوان RX و TX استفاده کردم . پایه 2 به TX و پایه 3  توسط مقاومت 1 کیلو به RX ماژول ESP8266 متصل شوند . 
یه LED هم به GPIO 11 آردوینو متصل کردیم . 

تغذیه ماژول ESP8266 هم از خروجی ولتاژ 3.3 ولت برد آردینو گرفته شده .
کلید فشارد هم بین پایه RESET ماژول  وای فای و GND مدار قرار میگیره .

کدهای برنامه آردینو :

#include <SoftwareSerial.h>
SoftwareSerial esp8266(2,3); //Pin 2 & 3 of Arduino as RX and TX. Connect TX and RX of ESP8266 respectively.
#define DEBUG true
#define led_pin 11 //LED is connected to Pin 11 of Arduino


void setup()
  {
    pinMode(led_pin, OUTPUT);
    digitalWrite(led_pin, LOW);
    Serial.begin(9600);
    esp8266.begin(115200); //Baud rate for communicating with ESP8266. Your's might be different.
    esp8266Serial("AT+RST\r\n", 5000, DEBUG); // Reset the ESP8266
    esp8266Serial("AT+CWMODE=1\r\n", 5000, DEBUG); //Set station mode Operation
    esp8266Serial("AT+CWJAP=\"SSID\",\"Password\"\r\n", 5000, DEBUG);//Enter your WiFi network's SSID and Password.
                                   
    while(!esp8266.find("OK")) 
    {
      }
    esp8266Serial("AT+CIFSR\r\n", 5000, DEBUG);//You will get the IP Address of the ESP8266 from this command. 
    esp8266Serial("AT+CIPMUX=1\r\n", 5000, DEBUG);
    esp8266Serial("AT+CIPSERVER=1,80\r\n", 5000, DEBUG);
  }

void loop()
  {
    if (esp8266.available())
      {
        if (esp8266.find("+IPD,"))
          {
            String msg;
            esp8266.find("?");
            msg = esp8266.readStringUntil(' ');
            String command1 = msg.substring(0, 3);
            String command2 = msg.substring(4);
                        
            if (DEBUG) 
              {
                Serial.println(command1);//Must print "led"
                Serial.println(command2);//Must print "ON" or "OFF"
              }
            delay(100);

              if (command2 == "ON") 
                    {
                      digitalWrite(led_pin, HIGH);
                    }
                   else 
                     {
                       digitalWrite(led_pin, LOW);
                     }
          }
      }
  }
   
String esp8266Serial(String command, const int timeout, boolean debug)
  {
    String response = "";
    esp8266.print(command);
    long int time = millis();
    while ( (time + timeout) > millis())
      {
        while (esp8266.available())
          {
            char c = esp8266.read();
            response += c;
          }
      }
    if (debug)
      {
        Serial.print(response);
      }
    return response;
  }
 

کدهای HTML برای فرستادن فرمان به ماژول WIFI و مدار :

کدهای زیر رو در یک فایل با پسوند html ذخیره کنید .

<!DOCTYPE html >
<html>
<head>
<title>WiFi controlled LED</title>
<script src="jquery.js"></script>

</head>
<body>
<h2> <i> WiFi Controlled LED using Arduino and ESP8266 </i> </h2>
<h4> <i> Enter the IP address of ESP8266 </i> </h4>
<div style="margin: 0; width:400px; height:30px;">
<FORM NAME="form" ACTION="" METHOD="GET">
ESP8266 IP Address:
<INPUT TYPE="text" NAME="inputbox" VALUE="" />
</FORM>
</div>
<h3> Click to toggle LED! </h3>
<input type="button" NAME="butname" value="Turn ON LED" />
<p>STATUS: LED is OFF!</p>
</body>
<script>
$.ajaxSetup({timeout:1000});
btn = document.querySelector('input[name="butname"]');
txt = document.querySelector('p');
btn.addEventListener('click', led1);

function led1()
{
	var val1 = 'OFF';
	if (btn.value === 'Turn OFF LED') 
	{
	btn.value = 'Turn ON LED';
	val1 = 'OFF';
	txt.textContent = 'STATUS: LED is OFF!';
	} 
	else 
	{
    	btn.value = 'Turn OFF LED';
	val1 = 'ON';
    	txt.textContent = 'STATUS: LED is ON!';
	}
	TextVar = form.inputbox.value;
	ArduinoVar = "http://" + TextVar + ":80/";
	$.get( ArduinoVar, {led: val1})	;
	{Connection: close};
}
</script>
</html>
در کد های html بالا از کتابخانه  
“jQuery.js” استفاده شده . این کتابخانه رو از لینک زیر دانلود کنید و به همان مسیری و محلی که فایل html قرار داره اتقال بدید . 


خب حالا فایل html رو با یک Browser باز کنید . باید صفحه شما مثل عکس زیر باشه :

کنترل led با وای فای

حالا کد آردینو را روی برد آردینو آپلود کنید . وقتی کد آپلود شد سریال مانیتور Arduino IDE رو باز کنید تا مراحل ارتباط با ماژول WIFI ESP8266 رو ببینید .



ممکنه بعضی قسمت ها به صورت درهم و نامفهم نشون داده بشه ، اما نگران نباشید همه چیر درسته :)

اگر در اطلاعات نشون داده شده در سریال مانیتور IP ماژول رو پیدا نکردید از نرم افزار Advanced IP Scanner استفاده کنید .


حالا وب پیجی که ساختیم رو باز کنید و IP که نشون میده رو توی کادر خالی وارد کنید .
بعد از اینکار میتونید روی دکمه  turn ON و OFF the LED کلیک کنید یا ضربه بزنید . 

نتیجه گیری :

یک پروژه ساده با نام WiFi Controlled LED با استفاده از ESP8266 و Arduino در اینجا طراحی شد ، 
که در آن LED متصل به Arduino توسط WiFi (در همان شبکه) کنترل می شود.
اگر به جای LED و مقاومت 330 مدار زیر یعنی یک رله با درایور ترانزیستور جایگزین کنید ، میتونید به جای LED هر دستگاه یا وسیله ای رو کنترل کنید .

درایور رله
هر دستگاهی که توی یک شبکه  WIFI باشه و این Web Page  رو باز کنه و اجرا کنه میکنه کنترل رو انجام بده :)