قسم الميكروكنترولر والروبوت ودوائر الاتصال بالحاسب الالي قسم المتحكمات الـ microcontroller و المعالجات microprocessor و التحكم الرقمي بالكمبيوتر CNC والانظمة الآلية والروبوت Robots

   

الصورة الرمزية حسن هادي محمود
حسن هادي محمود
:: عضو ذهبي ::
تاريخ التسجيل: Sep 2012
الدولة: العراق /البصره
المشاركات: 2,673
نشاط [ حسن هادي محمود ]
قوة السمعة:
قديم 12-09-2015, 06:21 PM المشاركة 41   
افتراضي تشغيل ESP8266 كسيرفر



السلام عليكم
في ملف مرفق كود ومكتبه لتشغيل esp8266 كسيرفر اي يتم وضع كود HTML في مايكروكنترولر ويصبح سيرفر يمكنك دخول عليه من اي متصفح (( من كومبيوتر او ايباد او اي جهاز ))


http://www.mediafire.com/download/f2...266_server.rar


كود الرئيسي
كود:
#include "Library_ESP8266_2.h"

sbit led_connected at LATE0_bit;
sbit led_connected_dir at TRISE0_bit;
// Lcd module connections
sbit LCD_RS_Direction at TRISB4_bit;
sbit LCD_EN_Direction at TRISB5_bit;
sbit LCD_D4_Direction at TRISB0_bit;
sbit LCD_D5_Direction at TRISB1_bit;
sbit LCD_D6_Direction at TRISB2_bit;
sbit LCD_D7_Direction at TRISB3_bit;

sbit LCD_RS at LATB4_bit;
sbit LCD_EN at LATB5_bit;
sbit LCD_D4 at LATB0_bit;
sbit LCD_D5 at LATB1_bit;
sbit LCD_D6 at LATB2_bit;
sbit LCD_D7 at LATB3_bit;
// End Lcd module connections


//************** ESP8266 parameter*********//
sbit RST_ESP8266 at LATC0_bit;
sbit RST_ESP8266_dir at TRISC0_bit;
// Change following information to match your network settings
unsigned char *SSID_STA = "your name network";
unsigned char *password_STA = "your password network";
unsigned char *port = "1234";
unsigned char *SSID_AP = "ESP8266";
unsigned char *password_AP = "ESP12345";
unsigned char *IP_address="192.168.1.11";// choice IP acording IP for your router
                                       // if you change this ip please change ip in array indexPage1[] mean this "url=http://192.168.1.11\">\ "
const char chanel = 6;
const char enc = 4;
char ESP_id =0;
const char esp8266_rec_max=16;// this array store GET /?+data then 6 for GET /? and 10 for max.data //
unsigned char esp8266_received_data[esp8266_rec_max+1];
//****************************************************//

// default html page
//
const char    indexPage1[] =
"HTTP/1.1 200 OK\nContent-type: text/html\n\n <meta http-equiv=\"refresh\" content=\"10;url=http://192.168.1.11\">\
<html>\
<head>\
<title>Sheimy Micro Systems</title>\
</head>\
<body bgcolor=\"#CCFF00\">\
<h2 align=\"center\"><font size=\"6\" color=\"#0066FF\">Sheimy Micro Systems Min-Webserver Using PIC18F45k22</font></h2>\
<form action=\"\" method=\"get\" name=\"sheimy\"> \
<table width=\"200\" border=\"2\" align=\"center\" cellpadding=\"2\" cellspacing=\"3\">\
<tr >\
<td colspan=3 bgcolor=#000000><marquee behavior=alternate direction=left scrollamount=5><font color=#00FF33>Sheimy Home Automation Controller Based Ethernet</font></marquee></td>\
</tr>\
<tr>\
<td width=\"200\">Device 1</td>\
";

char indexPage2[]=
"<td bgcolor=#CCFF00><center><input name=\"dev1\" width=\"200\" type=\"submit\" value=\"d1on\"/></center></td>\
<td bgcolor=#FF0000><center><input name=\"dev1\" width=\"200\" type=\"submit\" value=\"d1off\"/></center></td>\
</tr> \<tr> \<td width=\"200\">Device 2</td>\<td bgcolor=#CCFF00><center><input name=\"dev2\" width=\"200\" type=\"submit\" value=\"d2on\"/></center></td>\
<td bgcolor=#FF0000><center><input name=\"dev2\" width=\"200\" type=\"submit\" value=\"d2off\"/></center></td>\</tr>\
<tr><td width=\"200\">Volt </td><td colspan=2>    mV</td></tr>\
</table>\
</form> \
<h2 align=\"center\"><a href=\"http://sheimymicro.freehostia.com/\" rel="nofollow" target=\"_new\"><font size=\"6\" color=\"#0066FF\">Sheimy Micro Systems Website</font></a></h2> \
<h2 align=\"center\"><font color=#FF9900>By Eng Ahmed Sheimy</font></h2>\
</body> \
</html>";
  //768

// network parameters
long t;
char x,y;
char volt[6];


void ESP8266_UserTCP()

 {
     //GET /?dev2=d2off
   if(!memcmp(esp8266_received_data+11, "d1on", 4))        // do we have ON command
    PORTD.F0 = 1;                // set PORTD bit0
   else
    if(!memcmp(esp8266_received_data+11, "d1off", 5))        // do we have OFF command
      PORTD.F0 = 0;        // clear PORTD bit0
  if(!memcmp(esp8266_received_data+11, "d2on", 4))        // do we have ON command
    PORTD.F1 = 1;                // set PORTD bit0
  else
    if(!memcmp(esp8266_received_data+11, "d2off", 5))        // do we have OFF command
      PORTD.F1 = 0;        // clear PORTD bit0
    memcpy(indexPage2+495,volt, 4);
if (PORTD.F0)
    {
     memcpy(indexPage2+13, "#00FF00", 6);        // highlight (red) ON
     memcpy(indexPage2+114, "#FF0000", 6);        // clear OFF
    }
  else
    {
     memcpy(indexPage2+13, "#FF0000", 6);        // clear ON
     memcpy(indexPage2+114, "#00FF00", 6);        // highlight (yellow) OFF
    }
if (PORTD.F1)
    {
     memcpy(indexPage2+256, "#00FF00", 6);        // highlight (yellow) ON
     memcpy(indexPage2+357, "#FF0000", 6);        // clear OFF
    }
  else
    {
     memcpy(indexPage2+256, "#FF0000", 6);        // clear ON
     memcpy(indexPage2+357, "#00FF00", 6);        //
    }

  Send_ESP8266_data(indexPage1,indexPage2,1309); // 1309 = length for indexPage1 + lenght for indexPage2

}
//=====================================================================================

//==================================main entry===========================================
void main()
{
  ANSELA=0;
  ANSELB=0;
  ANSELC=0;
  ANSELD=0;
  ANSELE=0;
  SLRCON=0;
  ANSELA=1; // AN0
  trisd.f0=0; trisd.f1=0;
  portd.f0=0;portd.f1=0;
  TRISA0_bit=1;
  Lcd_Init();
  lcd_cmd(1);
  lcd_cmd(_LCD_CURSOR_OFF);
  lcd_out(1,1,"Wait Please..");

  led_connected=0;
  led_connected_dir=0;

    UART1_Init(115200);
  Delay_ms(300);
 // Setup interrupts
  RC1IE_bit = 1;          // Enable Rx1 intterupts
  PEIE_bit = 1;           // Enable peripheral interrupts
  GIE_bit  = 1;           // Enable global interrupts
//
  configuration_esp8266();
  led_connected=1;
  lcd_out(1,1,"   CONNECTED   ");
  delay_ms(1000);
  lcd_cmd(1);;


  while(1)
  {                                 // endless loop
    if(esp_DataReady_received)
       {
        esp_DataReady_received=0;
        lcd_out(1,1,"ID=");
        lcd_chr(1,4,esp8266_id+48);
        lcd_out(2,1,"DATA:");
        for (y=0;y<esp_i-6;y++)lcd_chr(2,y+6,esp8266_received_data[y+6]);

         ESP8266_UserTCP();
        }

    t=ADC_Read(0);
    t=t*3300/1024;
    volt[0]=t/1000+48;
    volt[1]=t/100%10 +48;
    volt[2]=t/10%10 +48;
    volt[3]=t%10 +48;
    volt[4]=0;
    lcd_out(1,6,"VOLT=");
    lcd_out(1,11,volt);
    delay_ms(250);
  }
}


// state machine
// Reading the data from UART in the interuppt routine
void interrupt()
{
 if (RCIF_bit == 1)
   {                           // Do we have uart rx interrupt request?
    esp8266_read_message();
   }

 }

//====================================End OF Program======================================
//==================================All Thanks To Allah===================================

كود مكتبه

كود:
extern sfr  sbit RST_ESP8266 ;
extern sfr  sbit RST_ESP8266_dir;
// Set of basic AT commands
const char   AT[]        = "AT"; // startupTest AT startup
const char ATE0[]        = "ATE0";//Disable echo
const char AT_RST[]      = "AT+RST";//Restart module
const char AT_CWMODE[]   = "AT+CWMODE=3";//WIFI mode (station/softAP/station+softAP) now choice station+softAP
const char AT_CIPMUX[]   = "AT+CIPMUX=1";//Set multiple connections mode
const char AT_CIFSR[]    = "AT+CIFSR";//Get local IP address
const char AT_CWJAP[]    = "AT+CWJAP=";// Connect to AP.
const char AT_CWSAP[]    = "AT+CWSAP=";//Set parameters under AP mode
const char AT_CIPSEND[]  = "AT+CIPSEND=";//Send data
const char AT_CIPSERVER[]="AT+CIPSERVER=1,80";//create server and using port 80.
const char AT_CIPCLOSE[] ="AT+CIPCLOSE=";//disconnection .
extern char ESP_ID ;
extern unsigned char *SSID_STA ;
extern unsigned char *password_STA ;
extern unsigned char *port ;
extern unsigned char *SSID_AP;
extern unsigned char *password_AP ;
extern const char chanel ;
extern const char enc ;
extern unsigned char *IP_address;
extern const char esp8266_rec_max;
extern unsigned char esp8266_received_data[];
//
// Responses to parse
const char ESP_OK                       = 1;
const char ESP_Ready_To_Receive_Message = 2;
const char ESP_ERROR                    = 3;
const char ESP_READY                    = 4;
const char ESP_FAIL                     = 5;
const char ESP_SEND_OK                  = 6;



// State machine control variables
char esp_state = 0;
char esp_response_rcvd = 0;
short esp_responseID = -1, esp_response = -1, esp_rsp;
unsigned char  esp_i , esp_DataReady_received=0 , esp8266_len=0,esp8266_id=0  ;


//*********************/
void new_line()
{
 UART_Wr_Ptr(0x0D);
 UART_Wr_Ptr(0x0A);
}
 //***********************//
 void wait_3sec()
 {
  delay_ms(3000);
 }
 
 //********************
  //
 void wait_1sec()
 {
  delay_ms(1000);
 }
 //****************
// Send command or data to the esp8266  Module - (const)
void esp8266_Send(const char *s)
{
// Send command or data string
   while(*s) {
    UART_Wr_Ptr(*s++);
   }
// Terminatation by CR+LF

}

// Send command or data to the esp8266  Module - (RAM)
void esp8266_Send_Ram(char *s1)   //
{
// Send command or data string
   while(*s1) {
    UART_Wr_Ptr(*s1++);
   }
// Terminatation by CR
   //UART_Wr_Ptr(0x0D);
   //UART_Wr_Ptr(0x0D);
}

// Get esp8266  response, if there is any
short Get_response()
{
    if (esp_response_rcvd)
      {
      esp_response_rcvd = 0;
      return esp_responseID;
     }
    else  return -1;
}

// Wait for esp8266 response (infinite loop)
void Wait_response(char rspns)
{
 char test = 1;

  while (test)
    {
     test = Get_response();
     if ((test == rspns) || (test == ESP_ERROR))
     test = 0;
     else
     test = 1;

    }
}


//*****************************************************************//
// Send Status data
void Send_ESP8266_data(const char *ESP8266_Msg_const ,char *ESP8266_Msg_ram,unsigned int len_esp_data  )
{
  esp8266_Send(AT_CIPSEND); // send commands "AT+CIPSEND="
  UART_Wr_Ptr(ESP_ID+48);// send ID.
  UART_Wr_Ptr(',');

   // send lenght data
  if(len_esp_data <=9)UART_Wr_Ptr(len_esp_data+48);
  else if(len_esp_data >= 10 && len_esp_data <=99 )
       {
        UART_Wr_Ptr(len_esp_data/10 +48);
        UART_Wr_Ptr(len_esp_data%10 +48);
       }
  else if(len_esp_data >=100 && len_esp_data <=999 )
       {
        UART_Wr_Ptr(len_esp_data/100 +48);
        UART_Wr_Ptr(len_esp_data/10%10 +48);
        UART_Wr_Ptr(len_esp_data%10 +48);
       }
  else if(len_esp_data >=1000 && len_esp_data <=9999 )
       {
        UART_Wr_Ptr(len_esp_data/1000 +48);
        UART_Wr_Ptr((len_esp_data/100)%10 +48);
        UART_Wr_Ptr((len_esp_data/10)%10 +48);
        UART_Wr_Ptr(len_esp_data%10 +48);
       }

  new_line(); //CR+LF .

  Wait_response(ESP_OK); // Wait for appropriate ready signal
  Delay_ms(20);
  esp8266_Send(ESP8266_Msg_const);               // Send data content
  esp8266_Send_Ram(ESP8266_Msg_ram);               // Send data content

  new_line(); //CR+LF .
  Wait_response(ESP_OK);             // Wait SEND OK as confirmation that the message was sent
    wait_1sec();
    esp8266_Send(AT_CIPCLOSE); // Send "AT+CIPCLOSE="
    UART_Wr_Ptr(ESP_ID+48);// send ID.
    new_line();




}
//**************************************************************//
void configuration_ESP8266()
{
 RST_ESP8266=0;
 RST_ESP8266_dir=0;
 wait_1sec();
 RST_ESP8266=1;
// Negotiate baud rate
  while(1)
  {
    esp8266_Send(AT);                 // Send "AT" string until ESP8266 sets up its baud rade
    new_line();
    wait_1sec();                    // and gets it correctly
    if (Get_response() == ESP_OK) break;    // If esp8266 says "OK" on our baud rate we program can continue
  }
 //****************************************************//
 esp8266_Send(ATE0);        // Disable command echo
 new_line();
 Wait_response(ESP_OK);
 //****************************************************//
  while(1)
  {
    esp8266_Send(AT_RST);                 // Send "RST" reset module
    new_line();
    wait_1sec();                   // and gets it correctly
    if (Get_response() == ESP_READY) break;    // If esp8266 says "ready" on our baud rate we program can continue
  }
 //****************************************************//
  do
  {
    esp8266_Send(AT_CWMODE);                // set wifi mode 1-station  2- access point 3- station+access point
    new_line();
    wait_1sec();                    // and gets it correctly

  }while(Get_response() != ESP_OK);// If esp8266  says "OK" on our baud rate we program can continue
//****************************************************//
    while(1)
  {
    esp8266_Send(AT_CIPMUX);                 // Set multiple connections mode
    new_line();
    wait_1sec();                    // and gets it correctly
    if (Get_response() == ESP_OK) break;    // If esp8266 says "OK" on our baud rate we program can continue
  }
 //****************************************************//

   do {      // connected with your network
     //AT+CWJAP="SSID","pasword" <CR><LF>
     esp8266_Send(AT_CWJAP);
     UART_Wr_Ptr('"');
     esp8266_Send_Ram(SSID_STA);
     UART_Wr_Ptr('"');
     UART_Wr_Ptr(',');
     UART_Wr_Ptr('"');
     esp8266_Send_Ram(password_STA);
     UART_Wr_Ptr('"');
     new_line();
     wait_3sec();
  } while(Get_Response() != ESP_OK);
 //****************************************************//
  do { // set parameter for access point
     //AT+CWSAP="SSID","pasword" , port,port,mode, <CR><LF>
     esp8266_Send(AT_CWSAP);
     UART_Wr_Ptr('"');
     esp8266_Send_Ram(SSID_AP);
     UART_Wr_Ptr('"');
     UART_Wr_Ptr(',');
     UART_Wr_Ptr('"');
     esp8266_Send_Ram(password_AP);
     UART_Wr_Ptr('"');
     UART_Wr_Ptr(',');
     UART_Wr_Ptr(chanel+48);
     UART_Wr_Ptr(',');
     UART_Wr_Ptr(enc+48);
     new_line();
     wait_3sec();
  } while(Get_Response() != ESP_OK);
  
 //****************************************************//

  do {
     //connected with ip addrss and used UDP protocol
     esp8266_Send(AT_CIPSERVER);
     new_line();
     wait_3sec();
  } while(Get_Response() != ESP_OK);
 //****************************************************//
}

// state machine
// Reading the data from UART in the interuppt routine
void esp8266_read_message()
{
    char esp_tmp;

    esp_tmp = UART_Rd_Ptr();                        // Get received byte

    // Process reception through state machine
// words "OK" ,"ready","REEOR","FAIL","+IPD" ,"CLOSED"
    switch (esp_state)
    {
      case 0: {
                esp_response = -1;                   // Clear response
                if (esp_tmp == 'O') //  // We have 'O', it could be "OK"
                  esp_state = 1;   // Expecting 'K'

                else if (esp_tmp == 'E') // // We have 'E', it could be "ERROR"
                  esp_state = 10;   // Expecting 'R'

                else if (esp_tmp == 'r') // // We have 'r', it could be "ready"
                  esp_state = 20;  // Expecting 'e'

                else if(esp_tmp == 'F') //// We have 'F', it could be "FAIL"
                  esp_state = 30;  // Expecting 'A'


               else if (esp_tmp == '+') // // We have '+', it could be "+IPD"
                  esp_state = 100;  // Expecting 'I'
                break;
              }

      case 1: {
                if (esp_tmp == 'K') // We have 'K', it could be "OK"
                {
                  esp_response = ESP_OK;// We have "OK" response
                  esp_state = 2;// Expecting CR+LF
                }
                else
                  esp_state = 0;  // reset operation
                break;
              }

      case 10: {
                if (esp_tmp == 'R') // We have 'R', it could be "ERROR"
                  esp_state = 11;
                else
                  esp_state = 0;
                break;
               }

      case 11: {
                if (esp_tmp == 'R') // We have 'R', it could be "ERROR"
                  esp_state = 12;
                else
                  esp_state = 0;
                break;
              }

      case 12: {
                if (esp_tmp == 'O') // We have 'O', it could be "ERROR"
                  esp_state = 13;
                else
                  esp_state = 0;
                break;
              }

      case 13: {
                if (esp_tmp == 'R') // We have 'R', it could be "ERROR"
                {
                  esp_response = ESP_ERROR;             // ERROR
                  esp_state = 2;
                }
                else
                  esp_state = 0;
                break;
               }

      case 20: {
                if (esp_tmp == 'e') // We have 'e', it could be "ready"
                  esp_state = 21;
                else
                  esp_state = 0;
                break;
              }

      case 21: {
                if (esp_tmp == 'a')// We have 'a', it could be "ready"
                  esp_state = 22;
                else
                  esp_state = 0;
                break;
               }

      case 22: {
                if (esp_tmp == 'd')// We have 'd', it could be "ready"
                  esp_state = 23;
                else
                  esp_state = 0;
                break;
               }


      case 23: {
                if (esp_tmp == 'y') // We have 'y', it could be "ready"
                  {
                  esp_response = ESP_READY;              // READY
                  esp_state = 2;
                 }
                else
                  esp_state = 0;
                break;
               }



      case 30: {
                if (esp_tmp == 'A') // // We have 'A', it could be "FAIL"
                  esp_state = 31;
                else
                  esp_state = 0;
                break;
               }

      case 31: {
                if (esp_tmp == 'I')
                  esp_state = 32;
                else
                  esp_state = 0;
                break;
              }

      case 32: {
                if (esp_tmp == 'L') // We have 'L', it could be "FAIL"
                {
                  esp_response = ESP_FAIL;              // FAIL
                  esp_state = 2;
                }
                else
                  esp_state = 0;
                break;
              }

      case 100 : {   // We have 'I', it could be "+IPD"

                  if(esp_tmp == 'I')esp_state = 101;

                  else esp_state = 0;
                  break;
                }

      case 101 : {  // We have 'P', it could be "+IPD"
                  if(esp_tmp == 'P')esp_state = 102;

                  else esp_state = 0;
                  break;
                }
      case 102 : {  // We have 'D', it could be "+IPD"
                  if(esp_tmp == 'D')esp_state = 103;

                  else esp_state = 0;
                  break;
                }
      case 103 : {  // wait to read id the first
                  if(esp_tmp == ',' )
                   {
                    esp_state=104;
                   }

                  else esp_state=0;
                  break;
                }
      case 104 : {  // read id .
                   if(esp_tmp>='0' && esp_tmp<='5')
                    {
                     esp8266_id=esp_tmp-'0';
                     esp_state=105;
                    }
                  else esp_state=0;
                  break;
                }

       case 105 : {
                  if(esp_tmp !=':' )
                   {
                    esp_state=105;

                   }

                  else
                    {

                     esp_i=0;
                     esp8266_received_data[0]=0; // reset esp8266_received_data for store new data
                     esp_DataReady_received=0;  // reset flag for compelete received data
                     esp_state=106;

                    }
                  break;
                }

      case 106 : {

                  if(esp_tmp !='H'  ) // wait until read 'H' from word "HTTP"
                   {

                    esp_i++;
                    if(esp_i>esp8266_rec_max)
                       {
                        esp_i=esp8266_rec_max;
                       }
                    else  esp8266_received_data[esp_i-1] = esp_tmp;
                   }

                  else
                      {  // compelete received data
                       esp_DataReady_received=1;
                       esp8266_received_data[esp_i ]=0;// reset pointer for esp8266_received_data this very importment
                       esp_state=0;
                      }
                   break;
                 }
      case 2: {


                if (esp_tmp == 13)esp_state = 3;

                else  esp_state = 0;

                break;
              }

      case 3: {
                if (esp_tmp == 10)
                {
                  esp_response_rcvd = 1;
                  esp_responseID = esp_response;
                 esp_state = 0;
                }
               else esp_state = 0;

                break;
             }

      default: {
                esp_state = 0;
                break;
              }
    }
 }


/******************************************************************************/


التعديل الأخير تم بواسطة : حسن هادي محمود بتاريخ 12-09-2015 الساعة 08:07 PM
اعلانات

الصورة الرمزية حسن هادي محمود
حسن هادي محمود
:: عضو ذهبي ::
تاريخ التسجيل: Sep 2012
الدولة: العراق /البصره
المشاركات: 2,673
نشاط [ حسن هادي محمود ]
قوة السمعة:
قديم 12-09-2015, 08:37 PM المشاركة 42   
افتراضي الشرح مشروع و مكتبه


هذه معطيات مكتبه
كود:
//************** ESP8266 parameter*********//
sbit RST_ESP8266 at LATC0_bit;
sbit RST_ESP8266_dir at TRISC0_bit;
// Change following information to match your network settings
unsigned char *SSID_STA = "your name network";
unsigned char *password_STA = "your password network";
unsigned char *port = "1234";
unsigned char *SSID_AP = "ESP8266";
unsigned char *password_AP = "ESP12345";
unsigned char *IP_address="192.168.1.11";// choice IP acording IP for your router
                                       // if you change this ip please change ip in array indexPage1[] mean this "url=http://192.168.1.11\">\ "
const char chanel = 6;
const char enc = 4;
char ESP_id =0;
const char esp8266_rec_max=16;// this array store GET /?+data then 6 for GET /? and 10 for max.data //
unsigned char esp8266_received_data[esp8266_rec_max+1];
//****************************************************//
تعريف طرف ريسيت
كود:
sbit RST_ESP8266 at LATC0_bit;
sbit RST_ESP8266_dir at TRISC0_bit;
هنا تضع معلومات راوتر الخاص بك
كود:
unsigned char *SSID_STA = "your name network";
unsigned char *password_STA = "your password network";
تختار البورت الي من خلاله يتم تبادل البيانات
كود:
unsigned char *port = "1234";
هنا تعريف access point للموديل حيث تضع اسم مع الباسورد لا تقل عن 8
ولاتزيد عن 64

كود:
unsigned char *SSID_AP = "ESP8266";
unsigned char *password_AP = "ESP12345";
اما هنا تضع الايبي موديل اي station
كود:
unsigned char *IP_address="192.168.1.11";/
هنا تعريفات مثل رقم قناه (( يمكن تغيره )) و التشفير
كود:
const char chanel = 6;
const char enc = 4;
char ESP_id =0;
هنا تعريف مصفوفه الاستقبال البيانات
كود:
const char esp8266_rec_max=16;// this array store GET /?+data then 6 for GET /? and 10 for max.data //
unsigned char esp8266_received_data[esp8266_rec_max+1];
ملاحظه اول سته عناصر يتم خزن فيها كلمه
كود:
GET /?
==========================================
متغير esp_DataReady_received هو في حاله اكمال استلام البيانات عنده
esp_DataReady_received=1 وفي حاله عدم استلام البيانات esp_DataReady_received=0

طبعا في حاله استلام البيانات اي esp_DataReady_received=1 فان البيانات تكون مخزونه في مصفوفه
esp8266_received_data

طبعا مفروض نفحص هل اول سته عناصر هي
كود:
GET /?
فأذا كان كذلك اظن هو نوع GET والبيانات المستلمه صحيحه

يعني نختبر بهذه الطريقه
كود:
if(!memcmp(esp8266_received_data, "GET /?", 6))
     {
       // put her code
     }
===========================================
اما الارسال فيكون عبر هذه الداله
Send_ESP8266_data

هذه تأخد مصفوفتين الاولى نوع const والثانيه مخزونه في رام و تحتاج عدد كلي للمصفوفتين
لاحظ كود مثال
كود:
Send_ESP8266_data(indexPage1,indexPage2,1309); // 1309 = length for indexPage1 + lenght for indexPage2
سؤال كيف نحسب طول كلي للبيانات
الجواب ببساطه اكتب اسم مصفوفه بكومبايلر يعني ضمن كود ثم أضغط Ctrl+space عندها سوف تظهر لك شاشه بيها اسم داله وبين قوسين عدد البايتات

مثلا في مثالنا اعلاه لو كتبنا في كومبايلر كلمه index ثم ضغطنا Ctrl+space عندها ستظهر مصفوفتين
كود:
indexPage1[641[
indexPage2[767]

اعلانات اضافية ( قم بتسجيل الدخول لاخفائها )

الصورة الرمزية حسن هادي محمود
حسن هادي محمود
:: عضو ذهبي ::
تاريخ التسجيل: Sep 2012
الدولة: العراق /البصره
المشاركات: 2,673
نشاط [ حسن هادي محمود ]
قوة السمعة:
قديم 12-09-2015, 09:33 PM المشاركة 43   
افتراضي الشرح مشروع


هنا ببساطه بعد نضع الايبي في متصفح طبعا لازم نخلي LED للدلاله على اكمال عمليه التهيئه بنجاح

كود:
configuration_esp8266();
  led_connected=1;
طبعا ايضا نحتاج للتعريفات التاليه لغرض تهيئه
كود:
 // Setup interrupts
  RC1IE_bit = 1;          // Enable Rx1 intterupts
  PEIE_bit = 1;           // Enable peripheral interrupts
  GIE_bit  = 1;           // Enable global interrupts
طبعا يرجى مراجعه مشاركه 35 لانه نفس الشرح تقريبا


طبعا بالبدايه راح راح تقوم مكتبه بتخاطب مع موديل لغرض عمل تهيئه
حيث ترسل بالبدايه
1-AT
2- ATE0
3-AT+RST
4-AT+CWMODE
5-AT+CIPMUX
6- ربط مع راوتر عن طريق AT+CWJAP
7- جعل موديل كمحطه الارسال عن طريق AT+CWSAP

8- خطوه الي تختلف عن مشاركه 35 هي ارسال الامر AT+CIPSERVER=1,80
============================================
الان لما نضع الايبي بالمتصفح ومن ثم نضغط enter عندها راح يبدأ المتصفح بأرسال البيانات ويتم خزنها في مصفوفه esp8266_received_data طبعا يتم القراءاه البيانات بهذا الشكل

كود:
+IPD,id,len:GET /?data HTTP
طبعا هنا اخزن البيانات GET /?data حيث كما قلنا انه اول سته عناصر من مصفوفه esp8266_received_data

طبعا بعدما يقرأ البيانات متصفح ينتظر الرد من سيرفر او مايكرو
هنا طبعا يأتي دور داله
كود:
void ESP8266_UserTCP()
طبعا بهذه الداله يتم تنفيذ الاوامر المرسله من متصفح

كود:
if(!memcmp(esp8266_received_data+11, "d1on", 4))        // do we have ON command
    PORTD.F0 = 1;                // set PORTD bit0
   else
    if(!memcmp(esp8266_received_data+11, "d1off", 5))        // do we have OFF command
      PORTD.F0 = 0;        // clear PORTD bit0
  if(!memcmp(esp8266_received_data+11, "d2on", 4))        // do we have ON command
    PORTD.F1 = 1;                // set PORTD bit0
  else
    if(!memcmp(esp8266_received_data+11, "d2off", 5))        // do we have OFF command
      PORTD.F1 = 0;        // clear PORTD bit0
طبعا الاكواد اعلاه لتشغيل واطفاء ليدات او ريليات موجوده عند portd.f0, port.f1

طبعا هنا تم تنفيذ اوامر مرسله من قبل متصفح ولكن لابد من الرد
لذا نجمع البيانات ومن ثم نقوم بأرسالها

===========================
كود:
memcpy(indexPage2+495,volt, 4);
if (PORTD.F0)
    {
     memcpy(indexPage2+13, "#00FF00", 6);        // highlight (red) ON
     memcpy(indexPage2+114, "#FF0000", 6);        // clear OFF
    }
  else
    {
     memcpy(indexPage2+13, "#FF0000", 6);        // clear ON
     memcpy(indexPage2+114, "#00FF00", 6);        // highlight (yellow) OFF
    }
if (PORTD.F1)
    {
     memcpy(indexPage2+256, "#00FF00", 6);        // highlight (yellow) ON
     memcpy(indexPage2+357, "#FF0000", 6);        // clear OFF
    }
  else
    {
     memcpy(indexPage2+256, "#FF0000", 6);        // clear ON
     memcpy(indexPage2+357, "#00FF00", 6);        //
    }
هنا وضعنا feedback يعني في حاله port.f0=1 مثلا خلي لون اخضر واذا كان port.f0=0 هنا خلي لون احمر يعني اقصد ظهور هذه الالوان في متصفح

اي في الاكواد اعلاه وضعنا معلومات الازمه لغرض ارسالها الى متصفح

وبعد ذلك نقوم بأرسال البيانات الى متصفح

كود:
Send_ESP8266_data(indexPage1,indexPage2,1309); // 1309 = length for indexPage1 + lenght for indexPage2



التعديل الأخير تم بواسطة : حسن هادي محمود بتاريخ 12-09-2015 الساعة 10:00 PM

محمد القادري
:: مهندس متواجد ::
تاريخ التسجيل: Jan 2011
المشاركات: 101
نشاط [ محمد القادري ]
قوة السمعة:
قديم 28-06-2016, 05:00 AM المشاركة 44   
افتراضي


بارك الله فيك على المجهود الطيب

قمت بمحاولة ترجمة البرنامج فاعطاني الخطا التالي
undefined identifier UART_WR_ptr

ما وظيفة الجمل التالية ؟

extern sfr sbit RST_ESP8266 ;
extern sfr sbit RST_ESP8266_dir;

كل الشكر والاحترام


الصورة الرمزية mounir.rouabah
mounir.rouabah
:: عضو فضي ::
تاريخ التسجيل: Feb 2007
الدولة: الجـزائـــر
المشاركات: 561
نشاط [ mounir.rouabah ]
قوة السمعة:
قديم 28-06-2016, 12:43 PM المشاركة 45   
افتراضي


بارك الله فيك


الصورة الرمزية حسن هادي محمود
حسن هادي محمود
:: عضو ذهبي ::
تاريخ التسجيل: Sep 2012
الدولة: العراق /البصره
المشاركات: 2,673
نشاط [ حسن هادي محمود ]
قوة السمعة:
قديم 29-06-2016, 10:23 AM المشاركة 46   
افتراضي


بارك الله فيك على المجهود الطيب

قمت بمحاولة ترجمة البرنامج فاعطاني الخطا التالي
undefined identifier UART_WR_ptr

ما وظيفة الجمل التالية ؟

extern sfr sbit RST_ESP8266 ;
extern sfr sbit RST_ESP8266_dir;

كل الشكر والاحترام
السلام عليكم
اخي كريم بالنسبه للخطأ
undefined identifier UART_WR_ptr
معنى ذلك ان البيك لايدعم هذه مكتبه وهي تخص uart
يمكنك معرفه ذلك عن طريق كومبايلر مايكروسي حيث اكتب الامر تالي
Uart ثم اضغط CTRL+space مفروض يطلع عندك مجموعه من الاوامر وهي لغرض مساعدتك في كتابه الامر صحيح
او يمكنك كتابه UART_WR ثم CTRL+space اذا لم يظهر لك شيئ معنى ان هذا البيك لايدعم هذه مكتبه
وبالطبع انا أستخدمت
18F45k22

=========================
بالنسبه لامر
كود:
extern sfr  sbit RST_ESP8266 ;
extern sfr  sbit RST_ESP8266_dir;
هذه تعريف لاطراف اي نريد أستخدامها وهنا وضعت هذا في مكتبه لغرض تعريف هذه الاطراف من برنامج الرئيسي اي اخبرته بان هذه الاطراف اخذ تعريفها من برنامج الرئيسي حيث كتب في برنامج الرئيسي ((مشاركه 41)

كود:
sbit RST_ESP8266 at LATC0_bit; 
sbit RST_ESP8266_dir at TRISC0_bit;


محمد القادري
:: مهندس متواجد ::
تاريخ التسجيل: Jan 2011
المشاركات: 101
نشاط [ محمد القادري ]
قوة السمعة:
قديم 30-06-2016, 08:48 PM المشاركة 47   
افتراضي


بارك الله فيك اخ حسن ... عندما احضر القطعة وابدأ بالتجربة قد يكون لي استفسارات اخرى


محمد القادري
:: مهندس متواجد ::
تاريخ التسجيل: Jan 2011
المشاركات: 101
نشاط [ محمد القادري ]
قوة السمعة:
قديم 05-07-2016, 02:27 AM المشاركة 48   
افتراضي


السلام عليكم

لي سؤال اخي الفاضل حسن ..

في الفنكشن التالي

Send_ESP8266_data(indexPage1,indexPage2,1309);

لماذا يتم ارسال الصفحة في مصفوفتين احداهما constant والاخرى في الرام ؟
لماذا المصفوفتين لا تكون من النوع constant

بارك الله فيك



الساعة معتمدة بتوقيت جرينتش +3 الساعة الآن: 04:29 PM
موقع القرية الالكترونية غير مسؤول عن أي اتفاق تجاري أو تعاوني بين الأعضاء
فعلى كل شخص تحمل مسئولية نفسه إتجاه مايقوم به من بيع وشراء وإتفاق وأعطاء معلومات موقعه
التعليقات المنشورة لا تعبر عن رأي موقع القرية الالكترونية ولايتحمل الموقع أي مسؤولية قانونية حيال ذلك (ويتحمل كاتبها مسؤولية النشر)