رباتیک و هوافضا

ارسال دیتا بوسیله آردینو و وای فای به صفحه وب

ارسال دیتا بوسیله آردینو و وای فای به صفحه وب

به نام خدا

ارسال دیتا بوسیله آردینو و وای فای به صفحه وب

ارسال دیتا بوسیله آردینو و وای فای به صفحه وب

 

در این آموزش قصد داریم دیتایی را بوسیله آردینو و وای فای به صفحه وب بفرستیم. برای این کار ما به آدرس IP یک سرور محلی یا جهانی نیازمندیم. در اینجا برای راحتی کار از سرور محلی استفاده می کنیم.

قطعات مورد نیاز ارسال دیتا بوسیله آردینو و وای فای به صفحه وب :

  • آردینو UNO
  • ماژول وای فای ESP8266
  • کابل USB
  • سیم برد بورد
  • لپ تاب یا کامپیوتر
  • منبع تغذیه

 

ماژول وای فای مدل ESP8266:

ارسال دیتا بوسیله آردینو و وای فای به صفحه وب

اتصالات مدار :

در شکل زیر دیاگرام مدار را مشاهده می کنید. قطعات اصلی مورد نیاز ما آردینو و ماژول وای فای ESP8266 است. پایه های VCC و CH_PD مستقیما به پایه ۳٫۳ ولت آردینو و GND به پایه زمین آردینو متصل می شود. پایه های Tx و Rx ماژول وای فای ESP8266 مستقیما به پایه های ۲ و ۳ آردینو متصل میشود. کتابخانه software serial برای برقراری ارتباط سریال با ماژول وای فای است. پایه های ۰ و ۱ پایه های پیش فرض ارتباط سریال آردینو می باشد. با استفاده از کتابخانه software serial میتوان این پایه ها را تغییر داد همانگونه که ما تغییر در این پروژه تغییر داده ایم. میتوانیم برای دیدن اطلاعاتی که بین ESP8266 و آردینو منتقل می شود از serial monitor نرم افزار Arduino IDE استفاده کنیم.

ارسال دیتا بوسیله آردینو و وای فای به صفحه وب

 

طرز کار پروژه ارسال دیتا بوسیله آردینو و وای فای به صفحه وب:

اول از همه باید ماژول وای فای را به روتر وای فای متصل کرد تا بتوان به شبکه متصل شد. بعد از اآن تنظیمات مربوط به سرور محلی را انجام میدهیم. سپس دیتا را ارسال می کنیم و در نهایت اتصال را قطع می کنیم. این پروسه و دستوراتش در زیر بیان شده است.

۱ – در ابتدا ماژول را با فرستادن دستور در سریال مانیتور AT command تست می کنیم. پس از ارسال این دستور باید پیغامی با محتوای ok دریافت کنیم.

۲ – سپس باید حالت وای فای را با دستور AT+CWMODE=mode_id انتخاب کنیم.در اینجا از modeid=3 استفاده شده است.حالت های مختلف ماژول را در زیر می بینیم.

بیشتر بخوانید...  پروژه ی ساخت شاخص باتری با استفاده از آردوینو

۱ = (station mode (client

۲ = (AP mode (host

۳ = AP + Station mode

۳ – حال باید اتصال ماژول وای فای را که متصل به شبکه قبلی است با دستور AT+CWQAP قطع کنیم. این ماژول به طور خودکار به وای فایی که قبلا وصل شده، متصل می شود برای همین منظور باید این کار را انجام دهیم.

۴ – سپس ماژول را با دستور AT+RST ریست می کنیم. اینکار الزامی نیست.

۵ – در این مرحله ماژول را به وای فای روتر با دستور زیر متصل کنیم.

AT+CWJAP=”اسم وای فای”,”رمز وای فای”

۶ – سپس بوسیله کد زیر آدرس IP را دریافت می کنیم.

AT+CIFSR

۷ – حالت مالتی پلکس را بوسیله کد AT+CIPMUX=1 فعال می کنیم.(۱ برای اتصال چندگانه و ۰ برای اتصال تکی)

۸ –  حال ماژول را بوسیله کد  ,AT+CIPSERVER=1 به عنوان سرور تنظیم می کنیم .با ۱ یا ۰ کردن این دستور سرور ساخته یا پاک می شود.

۹ – دستورات زیر را وارد می کنیم تا کاربر بتواند دیتای خود را به سرور محلی ساخته شده بفرستد.

اندازه دیتا حداکثر ۲ کیلو بایت, AT+CIPSEND = ID

۱۰ – سپس دیتایی که می خواهیم به این صورت وارد می کنیم.

;(“Serial.println(“avatrobo.ir

۱۱ – درنهایت اتصال را با کد زیر قطع میکنیم.

AT+CIPCLOSE=0

دیتا به سرور فرستاده شده و کافی ست در مرورگر آدرس IP را وارد کنیم تا دیتایی که فرستاده ایم را مشاهده کنیم

 

مراحل برنامه نویسی :

کتابخانه serial library را اضافه می کنیم و پایه هی ۲ و ۳ را بعنوان پایه ارتباط سریال تعریف میکنیم.

#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';

برای انجام کار هایی که لازم داریم چند تابع معرفی می کنیم.

تابع ( )setup برای ارتباط بین ماژول و آردینو به وسیله UART و تعیین baud rate روی ۹۶۰۰٫

void setup() 
{
   Serial.begin(9600);
   client.begin(9600);
   wifi_init();
   Serial.println("System Ready..");
}

تابع ( )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);
      ...... .....
      ..... .....

تابع ( )connect_wifi برای ارسال دستورات دیتا به ماژول و خواندن اطلاعاتی که از ماژول دریافت می شود.

void connect_wifi(String cmd, int t)
{
  int temp=0,i=0;
  while(1)
  {
    Serial.println(cmd);
    ...... .....
    ..... .....

تابع ( )sendwebdata برای ارسال دیتا به سرور محلی یا صفحه وب.

void sendwebdata(String webPage)
{
    int ii=0;
     while(1)
     {
      unsigned int l=webPage.length();
      Serial.print("AT+CIPSEND=0,");
      client.print("AT+CIPSEND=0,");
      ...... .....
      ..... .....

تابع ( )void send برای ارسال دیتا به تابع ( )sendwebdata.

void Send()
{
      webpage = "<h1>Welcome to Circuit Digest</h1><body bgcolor=f0f0f0>";
      sendwebdata(webpage);
      webpage=name;
      webpage+=dat;
      ...... .....
      ..... .....

تابع ( )get_ip برای دریافتIP سرور مورد نظر.

بیشتر بخوانید...  کنترل موتور DC با استفاده از برد آردوینو

تابع ( )void loop برای ارسال درخواست تازه کردن(refresh) صفحه تا مشخص شود که سرور متصل است یا نه. هر وقت که کاربر صفحه را تازه سازی کند یا درخواست روی صفحه بیاید دیتا به طور خودکار به IP ارسال می شود.

void loop() 
{
  k=0;
  Serial.println("Please Refresh your Page");
  while(k<1000)
  .... .....
  .... .....

دانلود کدهای پروژه ارسال دیتا بوسیله آردینو و وای فای به صفحه وب:

دانلود
#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>Circuit Digest</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=\"1st floor\",\"muda1884\"",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(9600);
   client.begin(9600);
   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 Circuit Digest</h1><body bgcolor=f0f0f0>";
      sendwebdata(webpage);
      webpage=name;
      webpage+=dat;
      sendwebdata(webpage);
      delay(1000);
     webpage = "<a href="http://avatrobo.ir/";
     webpage+="\">Click Here for More projects</a>";
     sendwebdata(webpage);
     client.println("AT+CIPCLOSE=0"); 
}

 

 

دیدگاه‌ها (2)

*
*

    سعید مهمان اردیبهشت 10, 1399 پاسخ

    سلام میشه یه لینک رو با ماژول esp8266 باز کرد؟

      Admin مدیر کل آبان 16, 1399 پاسخ

      سلام بله میشه