إنشاء خادم ويب باستخدام الاردوينو ووحدة ESP8266

متوسط

image_pdf

مقدمة

في هذا الدرس سنتعلم كيفية إنشاء خادم ويب باستخدام الاردوينو ووحدة ESP8266.sending-arduino-data-to-webpage

المواد والأدوات

 خادم الويب

1× اردوينو اونو

 خادم الويب

1× سلك الاردوينو

sending-arduino-data-to-webpage

حزمة أسلاك توصيل (ذكر – أنثى)

ذكر-ذكر

 حزمة أسلاك توصيل (ذكر- ذكر)

WiFi Module ESP8266

وحدة Wi-Fi

لوحة تجارب

1× لوحة تجارب حجم صغير

 

توصيل الدائرة

وصل الدائرة الكهربائية كما في الشكل المقابل:خادم الويب

تهيئة Arduino IDE

  • افتح ِArduino IDE، من قائمة File اختر Preference.

sending-arduino-data-to-webpage

  • حمّل الملف الخاص بوحدة ESP8266 ثم انقر على Ok.

https://arduino.esp8266.com/stable/package_esp8266com_index.json

sending-arduino-data-to-webpage

  • من قائمة Tools اختر Board ثم Board manger.

خادم الويب

  • اكتب في خانة البحث ESP8266 حمّل اللوحة التالية آخر إصدار.

خادم الويب

الكود البرمجي

قبل رفع الكود البرمجي للوحة الاردوينو عليك قراءة شرح الكود البرمجي.

#include<SoftwareSerial.h>

SoftwareSerial client(2,3); //RX, TX

String webpage="";

int i=0,k=0;

String readString;
int x=0;
boolean No_IP=false;
String IP="";

char temp1='0';
String name="<p>Geeks valley</p>";   //22
String dat="<p>Data Received Successfully.....</p>";     //21


void check4IP(int t1)
{
int t2=millis();
while(t2+t1>millis())
 {
while(client.available()>0)
{
if(client.find("WIFI GOT IP"))
{
No_IP=true;
}
}

}
}

void get_ip()
{
 IP="";
char ch=0;
while(1)
{
client.println("AT+CIFSR");
while(client.available()>0)
{
if(client.find("STAIP,"))
{
delay(1000);
Serial.print("IP Address:");
while(client.available()>0)
 {
ch=client.read();
  if(ch=='+')
break;
 IP+=ch;
}
}
 if(ch=='+')
break;
 }
 if(ch=='+')
break;
delay(1000);
}
Serial.print(IP);
Serial.print("Port:");
Serial.println(80);
}

void connect_wifi(String cmd, int t)
{
 int temp=0,i=0;
 while(1)
{
Serial.println(cmd);
client.println(cmd);
while(client.available())
 {
if(client.find("OK"))
i=8;
}
delay(t);
  if(i>5)
break;
i++;
}
if(i==8)
Serial.println("OK");
else
Serial.println("Error");
}
void wifi_init()
{
connect_wifi("AT",100);
connect_wifi("AT+CWMODE=3",100);
connect_wifi("AT+CWQAP",100);  
connect_wifi("AT+RST",5000);
check4IP(5000);
 if(!No_IP)
 {
Serial.println("Connecting Wifi....");
 connect_wifi("AT+CWJAP=\"Network name\",\"Network password\"",7000);         //provide your WiFi username and password here
// connect_wifi("AT+CWJAP=\"vpn address\",\"wireless network\"",7000);
}
else
{
 }
Serial.println("Wifi Connected");
get_ip();
connect_wifi("AT+CIPMUX=1",100);
connect_wifi("AT+CIPSERVER=1,80",100);
}
void sendwebdata(String webPage)
{
 int ii=0;
while(1)
{
unsigned int l=webPage.length();
Serial.print("AT+CIPSEND=0,");
client.print("AT+CIPSEND=0,");
Serial.println(l+2);
client.println(l+2);
delay(100);
Serial.println(webPage);
client.println(webPage);
while(client.available())
{
 //Serial.print(Serial.read());
 if(client.find("OK"))
 {
ii=11;
break;
}
 }
 if(ii==11)
break;
delay(100);
  }
}
void setup()
{
Serial.begin(115200);
client.begin(115200);
wifi_init();


Serial.println("System Ready..");

}
void loop()

{
k=0;
Serial.println("Please Refresh your Page");
while(k<1000)
 {
 k++;
while(client.available())
{
 if(client.find("0,CONNECT"))
{
Serial.println("Start Printing");
 Send();
 Serial.println("Done Printing");
delay(1000);
}
 }
delay(1);
}

}
void Send()
{
webpage = "<h1>Welcome to Geeks valley</h1><body bgcolor=f0f0f0>";
sendwebdata(webpage);
webpage=name;
webpage+=dat;
sendwebdata(webpage);
delay(1000);
webpage = "<a href=\"https://geeksvalley.com/tutorials/";
webpage+="\">Click Here for tutorials</a>";
sendwebdata(webpage);
client.println("AT+CIPCLOSE=0");

}

شرح الكود البرمجي

نعرف المكتبات المستخدمة في المشروع وهي مكتبة الاتصال التسلسلي.

#include<SoftwareSerial.h>

هذا السطر يوضح المنافذ المستخدمة لربط Rx وTx.

SoftwareSerial client(2,3); //RX, TX

المتغير IP يحمل عنوان الشبكة للوحة Wi-Fi.

String IP="";

المتغير name يحمل جملة Geeks valley بتنسيق لغة HTML.

والمتغير date يحمل الجملة Data Received Successfully…..

String name="<p>Geeks valley</p>";   //22
String dat="<p>Data Received Successfully.....</p>";     //21

في الدالة check4IP سيتم البحث عن عنوان الشبكة.

void check4IP(int t1)
{
int t2=millis();
while(t2+t1>millis())
 {
while(client.available()>0)
{
if(client.find("WIFI GOT IP"))
{
No_IP=true;
}
}

}
}

في الدالة get_ip سيتم طباعة عنوان الشبكة IP address.

void get_ip()
{
 IP="";
char ch=0;
while(1)
{
client.println("AT+CIFSR");
while(client.available()>0)
{
if(client.find("STAIP,"))
{
delay(1000);
Serial.print("IP Address:");
while(client.available()>0)
 {
ch=client.read();
  if(ch=='+')
break;
 IP+=ch;
}
}
 if(ch=='+')
break;
 }
 if(ch=='+')
break;
delay(1000);
}
Serial.print(IP);
Serial.print("Port:");
Serial.println(80);
}

في الدالة wifi-init سيتم البحث عن الشبكات الموجودة في النطاق، ثم سيتم اختيار الشبكة التي قمت بتعيينها في الكود البرمجي.

void wifi_init()
{
connect_wifi("AT",100);
connect_wifi("AT+CWMODE=3",100);
connect_wifi("AT+CWQAP",100);  
connect_wifi("AT+RST",5000);
check4IP(5000);
 if(!No_IP)
 {
Serial.println("Connecting Wifi....");
 connect_wifi("AT+CWJAP=\"Network name\",\"network password\"",7000);         //provide your WiFi username and password here
// connect_wifi("AT+CWJAP=\"vpn address\",\"wireless network\"",7000);
else
{
 }
Serial.println("Wifi Connected");
get_ip();
connect_wifi("AT+CIPMUX=1",100);
connect_wifi("AT+CIPSERVER=1,80",100);
}

عليك تحرير السطر التالي ووضع اسم شبكة الانترنت الخاصة بك ورمزها السري.

 connect_wifi("AT+CWJAP=\"Network name\",\"Network password\"",7000);         //provide your WiFi username and password here

في الدالة setup سيتم تهيئة شاشة الاتصال التسلسلي لطباعة التحديثات الخاصة بوحدة Wi-Fi.

عليك تغيير سرعة نقل البيانات كما في الشكل.

خادم الويب

voidsetup()
{
Serial.begin(115200);
client.begin(115200);
wifi_init();


Serial.println("System Ready..");

}

في الدالة send سيتم انشاء خادم ويب.

ستظهر الجمل بهذا الشكل:

Welcome to Geeks valley

Geeks valley

Data Received Successfully…..

Click Here for tutorials

يمكن تحرير الجمل الموجودة:

void Send()
{
webpage = "<h1>Welcome to Geeks valley</h1><body bgcolor=f0f0f0>";
sendwebdata(webpage);
webpage=name;
webpage+=dat;
sendwebdata(webpage);
delay(1000);
webpage = "<a href=\"https://geeksvalley.com/tutorials/";
webpage+="\">Click Here for tutorials</a>";
sendwebdata(webpage);
client.println("AT+CIPCLOSE=0");

}

بعد رفع الكود البرمجي افتح شاشة الاتصال التسلسي وانسخ IP address عنوان الشبكة.

sending-arduino-data-to-webpage

وضعه في المتصفح الذي تفضله، ستظهر صفحة الويب كما في الشكل.

خادم الويب

المشاكل والإصلاحات

من أبرز المشاكل التي تظهر في وحدة Wi-Fi هي عدم الاستجابة لأوامر AT، إما بسبب خطأ بتوصيل الدائرة الكهربائية أو بسبب مشاكل في الكود البرمجي أو الوحدة تحتاج إلى تحديث Firmware.

سنتعلم في هذا القسم كيفية تحديث Firmware.

1- توصيل الدائرة

وصل الدائرة الكهربائية كما في الشكل المقابل:sending-arduino-data-to-webpage

2- تحميل ESP flasher و Firmware

حمّل Flasher و Firmware.

فك الضغط عن كلا الملفين.

3- تثبيت Firmware

افتح ESP8266 Flasher.

انقر على Bin اختر ملف Ai-Thinker_ESP8266 الذي قمت بتحميله مسبقًا.

واكتب رقم المنفذ التسلسلي الذي تستخدمه.sending-arduino-data-to-webpage

اضغط زر التحكم في الدائرة الكهربائية ثم انقر على زر تحميل Download.

sending-arduino-data-to-webpage

سيبدأ التحميل مباشرة، انتظر حتى ينتهي وتظهر هذه الرسالة.

خادم الويب

4- الاختبار

ملاحظة: من الدائرة الكهربائية افصل السلك المربوط مع GPI00.

سنستخدم AT commands لاختبار اللوحة.

AT Commands عبارة عن أوامر تسمح باتصال وحدة Wi-Fi مع لوحة الاردوينو.

افتح اردوينو IDE.

ارفع الكود البرمجي التالي للوحة الاردوينو (قبل رفع الكود البرمجي للوحة افصل سلك Rest و 3v ثم أعدهم بعد رفع الكود البرمجي.).

void setup() {
// put your setup code here, to run once:
}
void loop() {
// put your main code here, to run repeatedly:
}

افتح شاشة الاتصال التسلسلي وغيّر سرعة النقل كما في الصورة.

خادم الويب

ابدأ بكتابة الأوامر التالية:

الأمر الأول: AT

يعتبر الأمر الأساسي الذي يختبر بدء تشغيل AT، إذا كان نظام AT يعمل بشكل صحيح ستظهر رسالة OK إذا لم يعمل ستظهر رسالة Error.خادم الويب

الأمر الثاني: AT+RST

هذا الأمر يعيد تشغيل وحدة ESP8266.

ستظهر رسالة ready في النهاية.

الأمر الثالث: AT+CWMODE=3

يستخدم هذا الأمر لضبط وضع WiFi للتشغيل.

ستظهر رسالة OK عند الانتهاء من الضبط.

خادم الويب

 الأمر الرابع: AT+CWLAP

سيظهر جميع شبكات الانترنت المتوفرة في النطاق.

الأمر الخامس: AT+CWJAP=”اسم الشبكة”,”كلمة المرور”

يستخدم هذا الأمر لربط وحدة Wi-Fi مع شبكة الانترنت.sending-arduino-data-to-webpage

الأمر السادس: AT+CIFSR

يوضع عنوان الشبكة IP Address.

sending-arduino-data-to-webpage

بعد اكتمال هذه الخطوات تصبح الوحدة جاهزة للاستخدام.

 

X
تم إضافة المنتج إلى السلة بنجاح