اتصال WIFI للأردوينو باستخدام ESP-01
ماهو ESP-01 ؟
ESP-01 هي وحدة تحكم مبنية على المتحكم ESP8266 و تتميز بخاصية الاتصال اللاسلكي مع دعم كامل لبروتوكول TCP/IP مما يجعلها مناسبة لتطبيقات إنترنت الأشياء. صغر حجم الوحدة بالإضافة لسعرها المنخفض يجعلها مثالية لتوصيل الأردوينو بالشبكة. لربط الأردوينو بالشبكة سنقوم بتوصيل وحدة ESP-01 بالشبكة ومن ثم نقوم بتوصيل الوحدة بالأردوينو عبر منافذ التواصل التسلسلي.


برمجة ESP-01 باستخدام الأردوينو
لوحدة ESP-01 طورين عمل الأول طور البرمجة والثاني طور التشغيل. ليتم برمجة ESP-01 يجب أن تعمل بطور البرمجة من خلال التوصيل بالشكل التالي :
الأردوينو | ESP-01 |
---|---|
3.3V | 3.3V |
GND | GND |
3.3V | CH_EN |
GND | IO0 |
TX | TX |
RX | RX |

تهيئة بيئة العمل لبرمجة ESP-01
بعد الإنتهاء من التوصيل حان الوقت لتجهيز بيئة العمل لبرمجة ESP-01. في محرر أكواد اردوينو قم بفتح التفضيلات من القائمة العلوية File > Preference
و إضافة الرابط التالي http://arduino.esp8266.com/stable/package_esp8266com_index.json
في خانة Additional Boards Manager URLs
بعد ذلك يجب تثبيت الملفات المخصصة لدعم وحدات ولوحات تطوير ESP عن طريق القائمة العلوي Tools > Board: >Board Manager.
بعد ذلك قم باختيار نوع اللوحة والمنفذ من خلال القائمة العلوية Tools.



برمجة ESP-01
الآن يتم برمجة الوحدة للاتصال بشبكة الانترنت المحلية وعرض صفحة ويب تحتوي زرين مختلفة وعند الضغط على كل زر يتم ارسال قيم مختلفة للوح الأردوينو. لاحقا نستخدم هذه الأزرار لتشغيل وأطفاء مصباح ليد متصل بالأردوينو. لاحظ أنه يجب عليك ادخال اسم الشبكة التي تريد الاتصال بها بالاضافة للرقم السري للشبكة بدلا من ssid و password. سيتم ارسال “1” عند ضغط المستخدم على خيار تشغيل LED و “2” عند ضغط المستخدم على خيار إطفاء LED. بعد الانتهاء من اضافة البرنامج يمكنك رفعه على ESP-01 وقد تلاحظ استمرار الشكل الموضح في الأسفل في الظهور خلال عملية الرفع.

كل ما عليك فعله هو الضغط على زر RST في لوحة الأردوينو وسيبدأ الرفع بشكل مباشر بالشكل التالي.

إذا مازالت المشكلة مستمرة تأكد من التوصيل ومن ثم قم بعمل reset لESP-01 (يمكنك ذلك من خلال توصيل reset بGND ثواني معدودة ومن ثم اعادة فصله ). بعد ذلك قم بالمحاولة من جديد.
#include "ESP8266WiFi.h"
const char* ssid = "Handasa3";
const char* password = "11223366sS@";
WiFiServer server(80);
void setup() {
Serial.begin(115200);
delay(10);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);}
server.begin();
Serial.println(WiFi.localIP());}
void loop() {
WiFiClient client = server.available();
if (!client) {return;}
while (!client.available()) {delay(1);}
String request = client.readStringUntil('\r');
client.flush();
if (request.indexOf('/RED_ON') != -1) { Serial.println('1');}
else if (request.indexOf('/RED_OFF') != -1) { Serial.println('2');}
delay(1);
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println("");
client.println("");
client.println("");
client.println("");
client.println("LED control ");
client.println("");
client.println("");
client.println("");
client.println("");
client.println("");
client.println("");
client.println("");
client.println("");
client.println("");
client.println("");}
الأردوينو
الآن يتم برمجة الأردوينو لاستقبال البيانات المرسلة من ESP-01 و التحكم بوضع مصباح الليد على أساس هذه البيانات. أولا يجب توصيل ESP-01 بالأردوينو والتاكد انها انها تعمل في طور التشغيل (قم بالتوصيل بالشكل التالي ثم اعد تشغيل الأردوينو لجعل ESP-01 تعمل في طور التشغيل)
الأردوينو | ESP-01 |
---|---|
3.3V | 3.3V |
GND | GND |
3.3V | CH_EN |
3 | RX |
2 | TX |
لاحظ استخدام مكتبة SoftwareSerial.h لنتكمن من استقبال وارسال البيانات عبر المنافذ (2 ، 3) بدلا من (0 ، 1) حيث نتجب هكذا تداخل بيانات ESP و Serial monitor. بعد ذلك نعرض للمستخدم عنوان IP لصفحة التحكم بعد الحصول عليه من ESP-01. في حال ارسل ESP-01 قيمة 1 يتم تشغيل مصباح الليد وفي حال قام بارسال القيمة 2 يتم اطفاءه.
بعد رفع البرنامج على الأردوينو قم بفتح شاشاة السيريال وعمل reset لESP-01(يمكنك ذلك من خلال توصيل reset و GND ومن ثم اعادة فصله ) وستلاحظ ظهور عنوان IP على الشاشة بعد عدة ثواني.


#include
SoftwareSerial mySerial(2, 3); // RX, TX
int LED = 12 ;
void setup() {
Serial.begin(9600);
mySerial.begin(115200);
pinMode(LED,OUTPUT);
while (mySerial.available()==0) {}
mySerial.readString();
while (mySerial.available()==0){}
Serial.print("IP Address : ");
String x = mySerial.readString();
Serial.print(x);}
void loop() {
if(mySerial.available()>0){
char y = mySerial.read();
if(y == '1'){digitalWrite(LED,HIGH);}
if(y == '2'){digitalWrite(LED,LOW);}}}
أخيرا بالدخول على IP الظاهر على الشاشة يمكنك التحكم بالليد عن طريق الصفحة التالية
