ESP8266 Wifi Module Örnek Uygulama

Başlatan MrDarK, 01 Kasım 2014, 11:47:01

Recep METE

ESP8266  CCS C  Kodlarını  buraya yapıştırayım.Belki birilerine lazım olur.Birde kodun bulunduğu sitesi falan  kapanır.İşi sağlama alalım.


main.
#include <18F4550.h>
#DEVICE ADC=8                 
#fuses HSPLL,MCLR,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CPUDIV1,VREGEN
#use delay(clock=48000000)  
#use rs232(UART1,baud=115200,parity=N,bits=8,stream=WIFI_ESP,errors)//Khai bao su dung uart cung  
#include <usb_cdc.h>                                 
#include <usb_desc_cdc.h> 
#define ledv  PIN_C2                                 
#define ledr  PIN_C1
#define ledon output_low                                      
#define ledoff output_high                     
#define led_on output_low                                                      
#define led_off output_high                                                       
#define LCD_ENABLE_PIN PIN_D2                   
#define LCD_RS_PIN PIN_D0               
#define LCD_RW_PIN PIN_D1               
#define LCD_DATA4 PIN_D4                                           
#define LCD_DATA5 PIN_D5
#define LCD_DATA6 PIN_D6
#define LCD_DATA7 PIN_D7
#include <lcd.c>                                      
#include<wifi.c>  
#include<sonbui/mystr.c>

char *SSID_JOIN="TU HU";//"SonBui-AP";
char *PASS_JOIN="12345679";//"a12344321";   
char *DATA_SEND="GET /data/2.5/weather?id=1581130 HTTP/1.0\r\nHost: api.openweathermap.org\r\n\r\n" ;     //1581130: Hanoi-Viet nam
char *WEATHER_IP= "188.226.224.148"; //api.openweathermap.org    
void get_internet()
{    
   char *write = ">";  
   int1 OK = False;
   printf(LCD_PUTC, "\fGData Hanoi,VN\nopenweathermap.org");  
   delay_ms(1000);
   if( client_Start(0,TYPE_TCP,WEATHER_IP,80))   //kET NOI TOI SERVER DE LAY DU LIEU  
   {  
      printf(LCD_PUTC, "\fGet data"); 
      int16 length=strlen(DATA_SEND);                                                           
      DO
      {
         clear_mem();
         fprintf(WIFI_ESP, AT_SEND);                     
         fprintf(WIFI_ESP, "=%u", 0);       
         fprintf(WIFI_ESP, ",%lu",length);  
         fprintf(WIFI_ESP, CRLF); 
         for (int mem_loop = 0; mem_loop < 150; mem_loop++) { 

            wifi_buff[n] = timed_getc();
            n++;
            if (n > 150) n = 0;
            if (timeout_error) break;
         }

         char *pch = strstr(wifi_buff, write);

         IF(pch) {
            OK = TRUE;
            break;                                
         }
         delay_ms(100);
      }
      WHILE(!OK);  
      //Send http get
      clear_mem();       
      printf(LCD_PUTC, "\fSend Get"); 
      fprintf(WIFI_ESP, "%s",DATA_SEND);
      Long LONG timeout;   
      timeout = 0; 
      WHILE(!kbhit(WIFI_ESP) && (++timeout < 2000000))  //20 second 
      {
         delay_us(10); 
         
      }                                                         
      WHILE(!(fgetc(WIFI_ESP)=='{')) ;        
      printf(LCD_PUTC, "\f{"); 
      
      wifi_buff[0]='{';n=1;                               
      do {         
         wifi_buff[n] = mili_getc();           
         n++;                                           
         if (n > 512) n = 0;   
         
      }while(!timeout_error) ;
      printf(LCD_PUTC, "\fPrint Data");
      //printf(usb_cdc_putc, "\r\nWF:%s"wifi_buff);   
      char *jstart="\"main\":{";
      char *jstop=",\"wind\"";
      char *p1 = strstr(wifi_buff,jstart);
      
      if(p1)                              
      {    
         // printf(usb_cdc_putc, "\r\n\fp1:%s"p1);  
         char *p2 = strstr(p1,jstop); 
         if(p2)  
         {  
            // printf(usb_cdc_putc, "\r\n\fp2:%s"p2);
            size_t len = p2-p1;   
            char *jmain = (char*)malloc(sizeof(char)*(len+1));  
            strncpy(jmain, p1, len);                                  
            jmain[len] = '\0';  
            // printf(usb_cdc_putc, "\r\nRes:%s"jmain); 
            char *temp="\"temp\":";
            char *temp_min=",\"temp_min\":";    
            char *ap_suat=",\"pressure\":";
            char *ap_suat_end=",\"sea_level"; 
            char *do_am="\"humidity\":";    
            char *do_am_end="}";                               
            double d_nhiet_do; 
            free(res) ; 
            char *nhiet_do=extract_string(temp,temp_min,jmain);
            if(nhiet_do)                                                  
            {
               // printf(usb_cdc_putc, "\r\nNhiet do:%s"nhiet_do); 
               d_nhiet_do = atof (nhiet_do);//treo neu gia tri nhiet do sai dinh dang 
               d_nhiet_do -= 273.15; //kelvin-celsius 
               printf (LCD_PUTC, "\fT=%f"d_nhiet_do); 
            }
            free(res) ; 
            char *ap_suat_khi=extract_string(ap_suat,ap_suat_end,jmain); 
            if(ap_suat)
            { 
               //  printf(usb_cdc_putc, "\r\nAp suat:%s"ap_suat_khi); 
               printf (LCD_PUTC, "\nP=%s hpa"ap_suat_khi);   
            }                                                          
            free(res) ;                                                              
            char *do_am_khi=extract_string(do_am,do_am_end,jmain);
            if(do_am_khi)
            {
               // printf(usb_cdc_putc, "\r\nDo am khi:%s"do_am_khi);
               
               lcd_gotoxy(10,1) ;                                     
               printf (LCD_PUTC, "H=%s %%"do_am_khi);                  
            }
            free(jmain) ;
         }
      }
   }
   else
   {                                      
      printf (LCD_PUTC, "\f Can't connect to\nopenweathermap.org"); 
      delay_ms(1000);
   }                          
}
void main()                             
{  
   lcd_init ();                                                                     
   printf (LCD_PUTC, "\f MuaLinhKien.Vn\nPIC 16/18 Basic Kit"); 
   delay_ms(1000);
   printf (LCD_PUTC, "\fESP8266 Test\nmualinhkien.vn");   
   esp_init();
   setup_AP(SSID_SET,PASS_SET,5,ECN_WAP2_PSK);                                                                                               
   delay_ms(1000);  
   join_AP(SSID_JOIN,PASS_JOIN);             
   delay_ms(1000);
   client_Start(0,TYPE_TCP,WEATHER_IP,80);   //kET NOI TOI SERVER DE LAY DU LIEU   
   delay_ms(1000);
   get_ip();
   clear_mem(); 
   //!   usb_cdc_init();
   //!   usb_init();                                       
   //!   usb_task();                                       
   //!   usb_wait_for_enumeration();
   //!     while(!usb_cdc_connected());                              
   while (TRUE)                                                       
   {                                                         
      get_internet();
      for(int loop=0;loop<120;loop++)      
      {
         output_toggle(ledr);
         delay_ms(500);       
      }
      
   }
}


wifi.c  (kütühane dosyası)

/*
Dung while de doc du lieu tra ve
Dung ngat de lay du lieu bat ki
*/
#INCLUDE <stdlibm.h> 
#include <stdio.h>
#include <stdlib.h>
#include <string.h> 
#include <wifi.h>  
char wifi_buff[512];            

int16 n = 0;
INT1 timeout_error;
INT8 timeout_error_count = 0;                          
char CRLF[] = "\r\n";                                                                                                            
char *SSID_SET = "VISMART.CO";
char *PASS_SET = "12345678";                                        
char *STR_OK="\r\nOK\r\n" ;                                           
char *STR_START=":" ;                                      
char data_out[50];      
                                                  
void clear_mem(void) {                                             
   for (int16 mem_loop = 0; mem_loop < 512; mem_loop++) {
      if (wifi_buff[mem_loop] == '\0')
      break;           
      else
      wifi_buff[mem_loop] = '\0';
   }
   n = 0;             
}  
void clear_data(void) {                                             
   for (int16 mem_loop = 0; mem_loop < 50; mem_loop++) {
      if (data_out[mem_loop] == '\0')
      break;           
      else
      data_out[mem_loop] = '\0';
   }
   n = 0;             
}

char timed_getc() {

   WHILE(!kbhit(WIFI_ESP));
   IF(kbhit(WIFI_ESP))    
   RETURN(fgetc(WIFI_ESP));                     
   ELSE
   {
     
      RETURN(0);
   }
}

char *send_AT_result(char *command) {

   clear_mem();
   fprintf(WIFI_ESP, "%s", command);
   fprintf(WIFI_ESP, CRLF);   
   for (int mem_loop = 0; mem_loop < 150; mem_loop++) {

      wifi_buff[n] = timed_getc();
      n++;
      if (n > 150) n = 0;
      if (timeout_error) break;
   }
   return wifi_buff;
}                                                

void send_AT_OK(char *command) {
   int1 OK = False;
   char *oks = "OK";
   DO
   {
      clear_mem();
      fprintf(WIFI_ESP, "%s", command);
      fprintf(WIFI_ESP, CRLF);
      for (int mem_loop = 0; mem_loop < 150; mem_loop++) {

         wifi_buff[n] = timed_getc();
         n++;
         if (n > 150) n = 0;
         if (timeout_error) break;
      }

      char *pch = strstr(wifi_buff, oks);

      IF(pch) {
         OK = TRUE;
         break;
      }
      delay_ms(100);
   }
   WHILE(!OK);

                                                       
}

void esp_init() {
   int1 OK = False;
   char *oks = "OK";
   char *nc = "no change";         
do { //ATE0   
      clear_mem(); 
     fprintf(WIFI_ESP, AT_RESET);
      fprintf(WIFI_ESP, CRLF); 
   delay_ms(2000); 
      fprintf(WIFI_ESP, AT_ECHO_OFF);
      fprintf(WIFI_ESP, CRLF);
      for (int mem_loop = 0; mem_loop < 150; mem_loop++) {

         wifi_buff[n] = timed_getc();
         n++;
         if (n > 150) n = 0;
         if (timeout_error) break;
      }
      char *pch = strstr(wifi_buff, oks);

      IF(pch) {
         OK = TRUE;
         printf(LCD_PUTC, "\fATE0");
      }
      delay_ms(100);
   }
   WHILE(!OK);

   //
   do { //AT+CWMODE=3
      clear_mem();                               
      fprintf(WIFI_ESP, MODE_AT_STA);
      fprintf(WIFI_ESP, CRLF);
      for (int mem_loop = 0; mem_loop < 150; mem_loop++) {

         wifi_buff[n] = timed_getc();
         n++;
         if (n > 150) n = 0;
         if (timeout_error) break;
      }

      char *pch = strstr(wifi_buff, oks);

      IF(pch) {
         OK = TRUE;
         printf(LCD_PUTC, "\fAT+CWMODE=3");
      } else {
         char *no_change = strstr(wifi_buff, nc);

         IF(no_change) {
            OK = TRUE;
            printf(LCD_PUTC, "\fAT+CWMODE=3\nNo change");
         }

      }
      delay_ms(100);
   }
   WHILE(!OK);

}

void setup_AP(unsigned char *ssid, unsigned char *password, int chl, int enc) {
   //AT+CWSAP="ssid","password",chl,enc
   int1 OK = False;
   char *oks = "OK";
   for (int loop = 0; loop < 5; loop++) {
      clear_mem();
      fprintf(WIFI_ESP, AT_SET_AP_PARAMS);
      fprintf(WIFI_ESP, "=\"%s\"", ssid);
      fprintf(WIFI_ESP, ",\"%s\"", password);
      fprintf(WIFI_ESP, ",%u", chl);
      fprintf(WIFI_ESP, ",%u", enc);
      fprintf(WIFI_ESP, CRLF);

      for (int mem_loop = 0; mem_loop < 150; mem_loop++) {

         wifi_buff[n] = timed_getc();
         n++;
         if (n > 150) n = 0;
         if (timeout_error) break;
      }

      char *pch = strstr(wifi_buff, oks);

      IF(pch) {
         OK = TRUE;
         printf(LCD_PUTC, "\fAT+CWSAP\nloop=%u", loop);
         break;
      }
      delay_ms(100);
   }
}

void join_AP(unsigned char *ssid, unsigned char *password) //Thuc hien mot lan vi khoi dong lai se tu ket noi
{
   //AT+CWJAP="ssid","password"
   int1 OK = False;
   char *oks = "OK";
   for (int loop = 0; loop < 3; loop++) {
      timeout_error_count = 0;
      printf(LCD_PUTC, "\fCn to:%s\nLan %u", ssid, loop);
      clear_mem();
      fprintf(WIFI_ESP, AT_JOIN_AP);
      fprintf(WIFI_ESP, "=\"%s\"", ssid);
      fprintf(WIFI_ESP, ",\"%s\"", password);
      fprintf(WIFI_ESP, CRLF);
      Long LONG timeout;
      timeout = 0; 

      WHILE(!kbhit(WIFI_ESP) && (++timeout < 3000000)) //30 second         
      {       
         delay_us(10);   
         if (timeout % 3000 == 0) {
            timeout_error_count++;
            lcd_gotoxy(10, 2);
            int pos = timeout_error_count % 4;
            if (pos == 0)
            printf(LCD_PUTC, "    ");
            if (pos == 1)                 
            printf(LCD_PUTC, " .  ");
            if (pos == 2)
            printf(LCD_PUTC, "  . ");
            if (pos == 3)
            printf(LCD_PUTC, "   .");
         }               
      }
      for (int mem_loop = 0; mem_loop < 150; mem_loop++) {
         wifi_buff[n] = timed_getc();
         n++;
         if (n > 150) n = 0;
         if (timeout_error)
         break;
      }
      char *pch = strstr(wifi_buff, oks);

      IF(pch) {
         OK = TRUE;
         printf(LCD_PUTC, "\fCnt To:%s\nLoop=%u", ssid, loop);
         break;
      }
      ELSE
      {
         printf(LCD_PUTC, "\fCn To:%s\nError!", ssid);

      }
      delay_ms(100);
   }
}

void quit_AP() {
   //AT+CWQAP
   int1 OK = False;
   char *oks = "OK";
   DO
   {
      clear_mem();
      fprintf(WIFI_ESP, AT_QUIT_AP);
      fprintf(WIFI_ESP, CRLF);

      for (int mem_loop = 0; mem_loop < 150; mem_loop++) {

         wifi_buff[n] = timed_getc();
         n++;
         if (n > 150) n = 0;                      
         if (timeout_error) break;
      }

      char *pch = strstr(wifi_buff, oks);

      IF(pch) {
         OK = TRUE;
         printf(LCD_PUTC, "\fAT+CWQAP");
         break;
      }
      delay_ms(100);
   }                                 
   WHILE(!OK);
}


void get_ip()
{
   //AT+CIFSR
   int1 OK = False;
   char *oks = "OK";
   DO
   {
      clear_mem();
      fprintf(WIFI_ESP, AT_GET_IP);
      fprintf(WIFI_ESP, CRLF);

      for (int mem_loop = 0; mem_loop < 150; mem_loop++) {

         wifi_buff[n] = timed_getc();
         n++;      
         if (n > 150) n = 0;                      
         if (timeout_error) break;
      }

      char *pch = strstr(wifi_buff, oks);

      IF(pch) {
         OK = TRUE;
         printf(LCD_PUTC, "\fIP:%s",wifi_buff);
         break;
      }
      delay_ms(100);
   }                                 
   WHILE(!OK);

}
int1 client_Start(int id, int type, char *ip, unsigned int16 port)
{

   char *cmd = AT_SET_MUL_CON;
   int1 OK = False;
   char *oks = "OK";
   char *connected="ALREAY CONNECT"; //Ket noi da duoc ket noi tu truoc toi ip nay hoac ip khac voi id nay

   
   
   DO                     
   {
      char *pch = strstr(send_AT_result(cmd), oks);

      IF(pch) {
         OK = TRUE;
         printf(LCD_PUTC, "\f%s", AT_SET_MUL_CON);
         break;
      }
      delay_ms(100);
   }
   WHILE(!OK);
   //
   for (int loop = 0; loop < 5; loop++) {
      timeout_error_count = 0;
      printf(LCD_PUTC, "\f%s\nPort:%5lu    %u", ip, port, loop);
      clear_mem();                                                 
      fprintf(WIFI_ESP, AT_START_CON);
      fprintf(WIFI_ESP, "=%u", id); 
      if (type == TYPE_TCP)  
      fprintf(WIFI_ESP, ",\"TCP\"");                                     
      else                                  
      fprintf(WIFI_ESP, ",\"UDP\"");  
      fprintf(WIFI_ESP, ",\"%s\"", ip);
      fprintf(WIFI_ESP, ",%lu", port);
      fprintf(WIFI_ESP, CRLF);
      Long LONG timeout;
      timeout = 0;
      
      WHILE(!kbhit(WIFI_ESP) && (++timeout < 3000000)) //30 second         
      { 
         delay_us(10); 
         if (timeout % 3000 == 0) {
            timeout_error_count++;
            lcd_gotoxy(11, 2);                         
            int pos = timeout_error_count % 4;            
            if (pos == 0)
            printf(LCD_PUTC, "    ");
            if (pos == 1) 
            printf(LCD_PUTC, " .  ");
            if (pos == 2)                                  
            printf(LCD_PUTC, "  . ");
            if (pos == 3)
            printf(LCD_PUTC, "   .");
         }
      }
      for (int mem_loop = 0; mem_loop < 150; mem_loop++) {
         wifi_buff[n] = timed_getc();
         n++;                           
         if (n > 150) n = 0;
         if (timeout_error)
         break;
      }
      char *pch = strstr(wifi_buff, oks); //chu y con "ALREAY CONNECT"

      IF(pch) {
         OK = TRUE;  
         printf(LCD_PUTC, "\fIP:%s\nP:%5lu lan %u OK    ", ip, port, loop);
         break;                                  
      }
      ELSE
      {  
         char *link = strstr(wifi_buff, connected);    

         IF(link) {
            OK = TRUE;                                             
            printf(LCD_PUTC, "\fID CONNECTED!\nloop=%u", loop); 
            break;       
         }        
         else                       
         {
         OK = FALSE;   
         printf(LCD_PUTC, "\fIP:%s\nP:%5lu Error", ip, port);     
         }                                             

      }
      delay_ms(100); 
    
   }
     return OK;
   
}
void server_Start(unsigned int16 port)   // Truoc khi chay phai restart                                     
{

   char *cmd = AT_SET_MUL_CON;
   int1 OK = False;
   char *oks = "OK";
   char *link_builded = "link is builded";

   
   
   DO
   {
      char *pch = strstr(send_AT_result(cmd), oks); //chu y:link is builded

      IF(pch) {
         OK = TRUE;
         printf(LCD_PUTC, "\f%s", AT_SET_MUL_CON);
         break;
      }
      else
      {   
         char *pch = strstr(send_AT_result(cmd), link_builded); //chu y:link is builded

         IF(pch) {
            OK = TRUE;
            printf(LCD_PUTC, "\fLink is Builded");
            break;
         }
         
      }
      delay_ms(100);                                        
   }
   WHILE(!OK);
   //
   for (int loop = 0; loop < 5; loop++) {
      timeout_error_count = 0;
      printf(LCD_PUTC, "\fServ Port:%5lu\nLan %u", port, loop);
      clear_mem();                                                 
      //AT+CIPSERVER=1,9999      

      fprintf(WIFI_ESP, AT_SET_SERVER);
      fprintf(WIFI_ESP, "=1"); 
      fprintf(WIFI_ESP, ",%lu", port);
      fprintf(WIFI_ESP, CRLF);
      Long LONG timeout;
      timeout = 0;
      
      WHILE(!kbhit(WIFI_ESP) && (++timeout < 3000000)) //30 second         
      {
         delay_us(10);         
         if (timeout % 3000 == 0) {
            timeout_error_count++;
            lcd_gotoxy(11, 2);                         
            int pos = timeout_error_count % 4;            
            if (pos == 0)
            printf(LCD_PUTC, "    ");
            if (pos == 1) 
            printf(LCD_PUTC, " .  ");
            if (pos == 2)
            printf(LCD_PUTC, "  . ");
            if (pos == 3)
            printf(LCD_PUTC, "   .");
         }
      }
      for (int mem_loop = 0; mem_loop < 150; mem_loop++) {
         wifi_buff[n] = timed_getc();
         n++;
         if (n > 150) n = 0;        
         if (timeout_error)
         break;
      }
      char *pch = strstr(wifi_buff, oks);

      IF(pch) {
         OK = TRUE;                                                        
         printf(LCD_PUTC, "\fServ Port:%5lu\nLan %u OK", port, loop);   
         break;
      }
      ELSE
      {
         printf(LCD_PUTC, "\fServ Port:%5lu\nLan %u Error!", port, loop);   

      }
      delay_ms(100);              
   }

} 
//Cip close khi ket noi toi server phai co id
//close ket noi toi clinet(modlue khac hoac may tinh) thi ko can

void  close_connect(int id) //Tra ve ok hoac "link is not"
{                                                                                         
   // AT+CIPCLOSE=<id> 
   int1 OK = False;
   char *not_link="link is not";   //chua ket noi  
   char *oks="OK";
   for (int loop = 0; loop < 5; loop++) {                                                             
      clear_mem();
      fprintf(WIFI_ESP, AT_CLOSE_CON);
      fprintf(WIFI_ESP, "=%u", id);    
      fprintf(WIFI_ESP, CRLF);                           

      for (int mem_loop = 0; mem_loop < 150; mem_loop++) {

         wifi_buff[n] = timed_getc();
         n++;
         if (n > 150) n = 0;
         if (timeout_error) break;                          
      }                                      

      char *pch = strstr(wifi_buff, oks);    

      IF(pch) {
         OK = TRUE;                                             
         printf(LCD_PUTC, "\fCLOSE CONNECT\nloop=%u", loop);  
         break;
      }
      ELSE
      {
         char *link = strstr(wifi_buff, not_link);    

         IF(link) {
            OK = TRUE;                                             
            printf(LCD_PUTC, "\fNOT CONNECT\nloop=%u", loop); 
            break;
         }
      }                                               
   }
}
void send_data(int id, char  *data) 
{                                          
   // AT+CIPSEND= <id>,<length>
   int1 OK = False;                
   char *write = ">";
   char *send_ok="SEND OK";
   int16 length=strlen(data);
   for (int loop = 0; loop < 5; loop++) {                                                             
      clear_mem();                      
      fprintf(WIFI_ESP, AT_SEND);
      fprintf(WIFI_ESP, "=%u", id);    
      fprintf(WIFI_ESP, ",%lu",length);  
      fprintf(WIFI_ESP, CRLF);                           

      for (int mem_loop = 0; mem_loop < 150; mem_loop++) {

         wifi_buff[n] = timed_getc();
         n++;
         if (n > 150) n = 0;
         if (timeout_error) break;
      }                                      

      char *pch = strstr(wifi_buff, write);

      IF(pch) {
         OK = TRUE;                                             
         printf(LCD_PUTC, "\fSEND >\nlenght=%lu", length);
         
         
         //Gui noi dung                
         char *sent = strstr(send_AT_result(data), send_ok);

         IF(sent) {              
            OK = TRUE;
            printf(LCD_PUTC, "\fSEND OK\nlenght=%lu", length);
            break;                     
         }        
      }                                   
      else
      {
         OK = FALSE;                                             
         printf(LCD_PUTC, "\fSEND FAIL!\nloop=%u", loop);  
      }
      delay_ms(100);                                                 
   }                            
   
}


                   


//Loi khi module reset ma client ko biet no dong     



wifi.h     (kütüphane dosyası)

#define    ECN_OPEN          0      //Che do bao mat
#define    ECN_WEP           1
#define    ECN_WAP_PSK       2
#define    ECN_WAP2_PSK      3
#define    ECN_WAP_WAP2_PSK  4

#define    TYPE_TCP     1            //Che do ket noi
#define    TYPE_UDP     0                                 

#define    TRAN_OPEN    1         //Che do truyen nhan           
#define    TRAN_CLOSE   0

#define    MODE_STA     "AT+CWMODE=1"         //Che do wifi
#define    MODE_AP      "AT+CWMODE=2"                                          
#define    MODE_AT_STA  "AT+CWMODE=3"

#define WIFI_TX_BUFFER_SIZE 128      //Bo dem
#define WIFI_RX_BUFFER_SIZE 128   

//COMMAND 
#define AT_ECHO_ON                  "ATE1"  
#define AT_ECHO_OFF                 "ATE0"  
#define AT_RESET                    "AT+RST"  
#define AT_CFW                      "AT+GMR"  
#define AT_WIFI_MODE                "AT+CWMODE"
#define AT_JOIN_AP                  "AT+CWJAP" 
#define AT_GET_IP                   "AT+CIFSR" 
#define AT_LIST_AP                  "AT+CWLAP"
#define AT_QUIT_AP                  "AT+CWQAP"  
#define AT_SET_AP_PARAMS            "AT+CWSAP" 
#define AT_CHECK_JOIN_AP            "AT+CWQAP" 
#define AT_GET_CON_STATUS           "AT+CIPSTATUS"
#define AT_START_CON                "AT+CIPSTART" 
#define AT_CIP_MODE                 "AT+CIPMODE"  
#define AT_SEND                     "AT+CIPSEND"  
#define AT_CLOSE_CON                "AT+CIPCLOSE"           
#define AT_SET_MUL_CON              "AT+CIPMUX=1"
#define AT_SET_SERVER               "AT+CIPSERVER"  
#define AT_SET_SERVER_TIMEOUT       "AT+CIPSTO"  
#define AT_RECEIVED_DATA            "+IPD"







UTXD (TX) - modülü sinyal bacaklar mikro pimleri RX bağlı

URXD (RX)  - modülü sinyal bacaklar mikro pimleri RX bağlı

RST - modülün sert sıfırlama pimleri. Reset oluştuğunda sinyali düşük

GPIO0, GPIO2, CH_PD yüksek düzeyde bağlı.

VCC : 3.3V bağlanın

GND: 0V bağlayın

Biz 115200 baud hızında RS232 haberleşme yoluyla AT komutları kullanmak modülü iletişim kurmak için.






AT komut ESP8266 kümesi Bkz AT komutu ESP8266
//COMMAND 
#define AT_ECHO_ON                  "ATE1"  
#define AT_ECHO_OFF                 "ATE0"  
#define AT_RESET                    "AT+RST"  
#define AT_CFW                      "AT+GMR"  
#define AT_WIFI_MODE                "AT+CWMODE"
#define AT_JOIN_AP                  "AT+CWJAP" 
#define AT_GET_IP                   "AT+CIFSR" 
#define AT_LIST_AP                  "AT+CWLAP"
#define AT_QUIT_AP                  "AT+CWQAP"  
#define AT_SET_AP_PARAMS            "AT+CWSAP" 
#define AT_CHECK_JOIN_AP            "AT+CWQAP" 
#define AT_GET_CON_STATUS           "AT+CIPSTATUS"
#define AT_START_CON                "AT+CIPSTART" 
#define AT_CIP_MODE                 "AT+CIPMODE"  
#define AT_SEND                     "AT+CIPSEND"  
#define AT_CLOSE_CON                "AT+CIPCLOSE"           
#define AT_SET_MUL_CON              "AT+CIPMUX=1"
#define AT_SET_SERVER               "AT+CIPSERVER"  
#define AT_SET_SERVER_TIMEOUT       "AT+CIPSTO"  
#define AT_RECEIVED_DATA            "+IPD"

En sık kullanılan komutlar:

Adımlar ve notlar
+ RST AT modülü yeniden, bazı garip alınan veri, ve "hazır"
+ CWMODe = 3 AT çalışma modunu değiştirmek için 3, AP + STA, sadece (+ RST Le yapabilirsiniz Khi bu yapılır AT.) 3 En çok yönlü modunu kullanın
Router Katıl

+ CWLAP AT arama mevcut wifi nokta
+ AT CWJAP = "parola" "SSID" benim yönlendirici cıva nokta katılmak (ops, wifi şifre burada  :))
+ CWJAP AT =? başarıyla bağlı olmadığını kontrol edin, veya + CWJAP AT kullanmak?
TCP Client

+ CIPMUX = 1 AT birden bağlantıda dönüş
+ CIPSTART = 4 AT, "TCP", "192,168.1.104" 9999 uzak bir TCP sunucu 192.168.1.104 (PC) bağlanmak
+ CIPMODE = 1 AT tüy Into'yu veri iletim moduna girmek
+ = 4.5 CIPSEND AT kanal 4, 5 bayt uzunluğunda yoluyla veri göndermek bağlantılar Be hiçbir veri geçmesi Bulgular ki "bağlantısını kaldırmak" Will, (sadece alınan "seçmek", soket test sonucunda aşağıya bakınız)
TCP Server

+ CIPSERVER AT = 1,9999 port 9999 kurulum TCP sunucu, 1 kümeleme olanak demektir
+ CIFSR AT IP adresi kontrol modülü
Bu örnekte, istemci modunda çalışan modül esp8266 için ayarları openweathermap.org bağlanmak için json dize daha sonra hakkında bilgi almak için bu json dize analizi yapacak iade almak için HTTP GET gerçekleştirmek Sıcaklık, nem, hava basıncı.

Bağlantı olsun veriler: http://api.openweathermap.org/data/2.5/weather?id=1581130

1581130 Hanoi-Vietnam kimliği



YANDAKİ SİTEDEN ALINTIDIR.  "http://laptrinhpic.info/esp8266-wifi-module-hien-thi-thong-tin-thoi-tiet-len-lcd-esp8266-weather-display/"
printf(lcd_putc,"\f  Ne kadar okursan oku, bilgine, yakışır şekilde davranmıyorsan cahilsin demektir.  \n   semfero");d

Recep METE

yukarıdaki kodlarda hata var yeniden yayınlamak ihtiyacı doğdu

Code  Pic18f4550:

#include <18F4550.h>
#DEVICE ADC=8                 
#fuses HSPLL,MCLR,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CPUDIV1,VREGEN
#use delay(clock=48000000)  
#use rs232(UART1,baud=115200,parity=N,bits=8,stream=WIFI_ESP,errors)//Khai bao su dung uart cung  
#include <usb_cdc.h>                                 
#include <usb_desc_cdc.h> 
#define ledv  PIN_C2                                 
#define ledr  PIN_C1
#define ledon output_low                                      
#define ledoff output_high                     
#define led_on output_low                                                      
#define led_off output_high                                                       
#define LCD_ENABLE_PIN PIN_D2                   
#define LCD_RS_PIN PIN_D0               
#define LCD_RW_PIN PIN_D1               
#define LCD_DATA4 PIN_D4                                           
#define LCD_DATA5 PIN_D5
#define LCD_DATA6 PIN_D6
#define LCD_DATA7 PIN_D7
#include <lcd.c>                                      
#include"esp/wifi.c"   
#include"sonbui/mystr.c" 

char *SSID_JOIN="TU HU";//"SonBui-AP";
char *PASS_JOIN="12345679";//"a12344321";   
char *DATA_SEND="GET /data/2.5/weather?id=1581130 HTTP/1.0\r\nHost: api.openweathermap.org\r\n\r\n" ;     //1581130: Hanoi-Viet nam
char *WEATHER_IP= "188.226.224.148"; //api.openweathermap.org    
void get_internet()
{    
	char *write = ">";  
	int1 OK = False;
	printf(LCD_PUTC, "\fGData Hanoi,VN\nopenweathermap.org");  
	delay_ms(1000);
	if( client_Start(0,TYPE_TCP,WEATHER_IP,80))   //kET NOI TOI SERVER DE LAY DU LIEU  
	{  
		printf(LCD_PUTC, "\fGet data"); 
		int16 length=strlen(DATA_SEND);                                                           
		DO
		{
			clear_mem();
			fprintf(WIFI_ESP, AT_SEND);                     
			fprintf(WIFI_ESP, "=%u", 0);       
			fprintf(WIFI_ESP, ",%lu",length);  
			fprintf(WIFI_ESP, CRLF); 
			for (int mem_loop = 0; mem_loop < 150; mem_loop++) { 

				wifi_buff[n] = timed_getc();
				n++;
				if (n > 150) n = 0;
				if (timeout_error) break;
			}

			char *pch = strstr(wifi_buff, write);

			IF(pch) {
				OK = TRUE;
				break;                                
			}
			delay_ms(100);
		}
		WHILE(!OK);  
		//Send http get
		clear_mem();       
		printf(LCD_PUTC, "\fSend Get"); 
		fprintf(WIFI_ESP, "%s",DATA_SEND);
		Long LONG timeout;   
		timeout = 0; 
		WHILE(!kbhit(WIFI_ESP) && (++timeout < 2000000))  //20 second 
		{
			delay_us(10); 
			
		}                                                         
		WHILE(!(fgetc(WIFI_ESP)=='{')) ;        
		printf(LCD_PUTC, "\f{"); 
		
		wifi_buff[0]='{';n=1;                               
		do {         
			wifi_buff[n] = mili_getc();           
			n++;                                           
			if (n > 512) n = 0;   
			
		}while(!timeout_error) ;
		printf(LCD_PUTC, "\fPrint Data");
		//printf(usb_cdc_putc, "\r\nWF:%s"wifi_buff);   
		char *jstart="\"main\":{";
		char *jstop=",\"wind\"";
		char *p1 = strstr(wifi_buff,jstart);
		
		if(p1)                              
		{    
			// printf(usb_cdc_putc, "\r\n\fp1:%s"p1);  
			char *p2 = strstr(p1,jstop); 
			if(p2)  
			{  
				// printf(usb_cdc_putc, "\r\n\fp2:%s"p2);
				size_t len = p2-p1;   
				char *jmain = (char*)malloc(sizeof(char)*(len+1));  
				strncpy(jmain, p1, len);                                  
				jmain[len] = '\0';  
				// printf(usb_cdc_putc, "\r\nRes:%s"jmain); 
				char *temp="\"temp\":";
				char *temp_min=",\"temp_min\":";    
				char *ap_suat=",\"pressure\":";
				char *ap_suat_end=",\"sea_level"; 
				char *do_am="\"humidity\":";    
				char *do_am_end="}";                               
				double d_nhiet_do; 
				free(res) ; 
				char *nhiet_do=extract_string(temp,temp_min,jmain);
				if(nhiet_do)                                                  
				{
					// printf(usb_cdc_putc, "\r\nNhiet do:%s"nhiet_do); 
					d_nhiet_do = atof (nhiet_do);//treo neu gia tri nhiet do sai dinh dang 
					d_nhiet_do -= 273.15; //kelvin-celsius 
					printf (LCD_PUTC, "\fT=%f"d_nhiet_do); 
				}
				free(res) ; 
				char *ap_suat_khi=extract_string(ap_suat,ap_suat_end,jmain); 
				if(ap_suat)
				{ 
					//  printf(usb_cdc_putc, "\r\nAp suat:%s"ap_suat_khi); 
					printf (LCD_PUTC, "\nP=%s hpa"ap_suat_khi);   
				}                                                          
				free(res) ;                                                              
				char *do_am_khi=extract_string(do_am,do_am_end,jmain);
				if(do_am_khi)
				{
					// printf(usb_cdc_putc, "\r\nDo am khi:%s"do_am_khi);
					
					lcd_gotoxy(10,1) ;                                     
					printf (LCD_PUTC, "H=%s %%"do_am_khi);                  
				}
				free(jmain) ;
			}
		}
	}
	else
	{                                      
		printf (LCD_PUTC, "\f Can't connect to\nopenweathermap.org"); 
		delay_ms(1000);
	}                          
}
void main()                             
{  
	lcd_init ();                                                                     
	printf (LCD_PUTC, "\f MuaLinhKien.Vn\nPIC 16/18 Basic Kit"); 
	delay_ms(1000);
	printf (LCD_PUTC, "\fESP8266 Test\nmualinhkien.vn");   
	esp_init();
	setup_AP(SSID_SET,PASS_SET,5,ECN_WAP2_PSK);                                                                                               
	delay_ms(1000);  
	join_AP(SSID_JOIN,PASS_JOIN);             
	delay_ms(1000);
	client_Start(0,TYPE_TCP,WEATHER_IP,80);   //kET NOI TOI SERVER DE LAY DU LIEU   
	delay_ms(1000);
	get_ip();
	clear_mem(); 
	//!   usb_cdc_init();
	//!   usb_init();                                       
	//!   usb_task();                                       
	//!   usb_wait_for_enumeration();
	//!     while(!usb_cdc_connected());                              
	while (TRUE)                                                       
	{                                                         
		get_internet();
		for(int loop=0;loop<120;loop++)      
		{
			output_toggle(ledr);
			delay_ms(500);       
		}
		
	}
}



Wifi.c:

/*
Dung while de doc du lieu tra ve
Dung ngat de lay du lieu bat ki
*/
#INCLUDE <stdlibm.h> 
#include <stdio.h>
#include <stdlib.h>
#include <string.h> 
#include <wifi.h>  
char wifi_buff[512];            

int16 n = 0;
INT1 timeout_error;
INT8 timeout_error_count = 0;                          
char CRLF[] = "\r\n";                                                                                                            
char *SSID_SET = "VISMART.CO";
char *PASS_SET = "12345678";                                        
char *STR_OK="\r\nOK\r\n" ;                                           
char *STR_START=":" ;                                      
char data_out[50];      
                                                  
void clear_mem(void) {                                             
   for (int16 mem_loop = 0; mem_loop < 512; mem_loop++) {
      if (wifi_buff[mem_loop] == '\0')
      break;           
      else
      wifi_buff[mem_loop] = '\0';
   }
   n = 0;             
}  
void clear_data(void) {                                             
   for (int16 mem_loop = 0; mem_loop < 50; mem_loop++) {
      if (data_out[mem_loop] == '\0')
      break;           
      else
      data_out[mem_loop] = '\0';
   }
   n = 0;             
}

char timed_getc() {

   WHILE(!kbhit(WIFI_ESP));
   IF(kbhit(WIFI_ESP))    
   RETURN(fgetc(WIFI_ESP));                     
   ELSE
   {
     
      RETURN(0);
   }
}

char *send_AT_result(char *command) {

   clear_mem();
   fprintf(WIFI_ESP, "%s", command);
   fprintf(WIFI_ESP, CRLF);   
   for (int mem_loop = 0; mem_loop < 150; mem_loop++) {

      wifi_buff[n] = timed_getc();
      n++;
      if (n > 150) n = 0;
      if (timeout_error) break;
   }
   return wifi_buff;
}                                                

void send_AT_OK(char *command) {
   int1 OK = False;
   char *oks = "OK";
   DO
   {
      clear_mem();
      fprintf(WIFI_ESP, "%s", command);
      fprintf(WIFI_ESP, CRLF);
      for (int mem_loop = 0; mem_loop < 150; mem_loop++) {

         wifi_buff[n] = timed_getc();
         n++;
         if (n > 150) n = 0;
         if (timeout_error) break;
      }

      char *pch = strstr(wifi_buff, oks);

      IF(pch) {
         OK = TRUE;
         break;
      }
      delay_ms(100);
   }
   WHILE(!OK);

                                                       
}

void esp_init() {
   int1 OK = False;
   char *oks = "OK";
   char *nc = "no change";         
do { //ATE0   
      clear_mem(); 
     fprintf(WIFI_ESP, AT_RESET);
      fprintf(WIFI_ESP, CRLF); 
   delay_ms(2000); 
      fprintf(WIFI_ESP, AT_ECHO_OFF);
      fprintf(WIFI_ESP, CRLF);
      for (int mem_loop = 0; mem_loop < 150; mem_loop++) {

         wifi_buff[n] = timed_getc();
         n++;
         if (n > 150) n = 0;
         if (timeout_error) break;
      }
      char *pch = strstr(wifi_buff, oks);

      IF(pch) {
         OK = TRUE;
         printf(LCD_PUTC, "\fATE0");
      }
      delay_ms(100);
   }
   WHILE(!OK);

   //
   do { //AT+CWMODE=3
      clear_mem();                               
      fprintf(WIFI_ESP, MODE_AT_STA);
      fprintf(WIFI_ESP, CRLF);
      for (int mem_loop = 0; mem_loop < 150; mem_loop++) {

         wifi_buff[n] = timed_getc();
         n++;
         if (n > 150) n = 0;
         if (timeout_error) break;
      }

      char *pch = strstr(wifi_buff, oks);

      IF(pch) {
         OK = TRUE;
         printf(LCD_PUTC, "\fAT+CWMODE=3");
      } else {
         char *no_change = strstr(wifi_buff, nc);

         IF(no_change) {
            OK = TRUE;
            printf(LCD_PUTC, "\fAT+CWMODE=3\nNo change");
         }

      }
      delay_ms(100);
   }
   WHILE(!OK);

}

void setup_AP(unsigned char *ssid, unsigned char *password, int chl, int enc) {
   //AT+CWSAP="ssid","password",chl,enc
   int1 OK = False;
   char *oks = "OK";
   for (int loop = 0; loop < 5; loop++) {
      clear_mem();
      fprintf(WIFI_ESP, AT_SET_AP_PARAMS);
      fprintf(WIFI_ESP, "=\"%s\"", ssid);
      fprintf(WIFI_ESP, ",\"%s\"", password);
      fprintf(WIFI_ESP, ",%u", chl);
      fprintf(WIFI_ESP, ",%u", enc);
      fprintf(WIFI_ESP, CRLF);

      for (int mem_loop = 0; mem_loop < 150; mem_loop++) {

         wifi_buff[n] = timed_getc();
         n++;
         if (n > 150) n = 0;
         if (timeout_error) break;
      }

      char *pch = strstr(wifi_buff, oks);

      IF(pch) {
         OK = TRUE;
         printf(LCD_PUTC, "\fAT+CWSAP\nloop=%u", loop);
         break;
      }
      delay_ms(100);
   }
}

void join_AP(unsigned char *ssid, unsigned char *password) //Thuc hien mot lan vi khoi dong lai se tu ket noi
{
   //AT+CWJAP="ssid","password"
   int1 OK = False;
   char *oks = "OK";
   for (int loop = 0; loop < 3; loop++) {
      timeout_error_count = 0;
      printf(LCD_PUTC, "\fCn to:%s\nLan %u", ssid, loop);
      clear_mem();
      fprintf(WIFI_ESP, AT_JOIN_AP);
      fprintf(WIFI_ESP, "=\"%s\"", ssid);
      fprintf(WIFI_ESP, ",\"%s\"", password);
      fprintf(WIFI_ESP, CRLF);
      Long LONG timeout;
      timeout = 0; 

      WHILE(!kbhit(WIFI_ESP) && (++timeout < 3000000)) //30 second         
      {       
         delay_us(10);   
         if (timeout % 3000 == 0) {
            timeout_error_count++;
            lcd_gotoxy(10, 2);
            int pos = timeout_error_count % 4;
            if (pos == 0)
            printf(LCD_PUTC, "    ");
            if (pos == 1)                 
            printf(LCD_PUTC, " .  ");
            if (pos == 2)
            printf(LCD_PUTC, "  . ");
            if (pos == 3)
            printf(LCD_PUTC, "   .");
         }               
      }
      for (int mem_loop = 0; mem_loop < 150; mem_loop++) {
         wifi_buff[n] = timed_getc();
         n++;
         if (n > 150) n = 0;
         if (timeout_error)
         break;
      }
      char *pch = strstr(wifi_buff, oks);

      IF(pch) {
         OK = TRUE;
         printf(LCD_PUTC, "\fCnt To:%s\nLoop=%u", ssid, loop);
         break;
      }
      ELSE
      {
         printf(LCD_PUTC, "\fCn To:%s\nError!", ssid);

      }
      delay_ms(100);
   }
}

void quit_AP() {
   //AT+CWQAP
   int1 OK = False;
   char *oks = "OK";
   DO
   {
      clear_mem();
      fprintf(WIFI_ESP, AT_QUIT_AP);
      fprintf(WIFI_ESP, CRLF);

      for (int mem_loop = 0; mem_loop < 150; mem_loop++) {

         wifi_buff[n] = timed_getc();
         n++;
         if (n > 150) n = 0;                      
         if (timeout_error) break;
      }

      char *pch = strstr(wifi_buff, oks);

      IF(pch) {
         OK = TRUE;
         printf(LCD_PUTC, "\fAT+CWQAP");
         break;
      }
      delay_ms(100);
   }                                 
   WHILE(!OK);
}


void get_ip()
{
   //AT+CIFSR
   int1 OK = False;
   char *oks = "OK";
   DO
   {
      clear_mem();
      fprintf(WIFI_ESP, AT_GET_IP);
      fprintf(WIFI_ESP, CRLF);

      for (int mem_loop = 0; mem_loop < 150; mem_loop++) {

         wifi_buff[n] = timed_getc();
         n++;      
         if (n > 150) n = 0;                      
         if (timeout_error) break;
      }

      char *pch = strstr(wifi_buff, oks);

      IF(pch) {
         OK = TRUE;
         printf(LCD_PUTC, "\fIP:%s",wifi_buff);
         break;
      }
      delay_ms(100);
   }                                 
   WHILE(!OK);

}
int1 client_Start(int id, int type, char *ip, unsigned int16 port)
{

   char *cmd = AT_SET_MUL_CON;
   int1 OK = False;
   char *oks = "OK";
   char *connected="ALREAY CONNECT"; //Ket noi da duoc ket noi tu truoc toi ip nay hoac ip khac voi id nay

   
   
   DO                     
   {
      char *pch = strstr(send_AT_result(cmd), oks);

      IF(pch) {
         OK = TRUE;
         printf(LCD_PUTC, "\f%s", AT_SET_MUL_CON);
         break;
      }
      delay_ms(100);
   }
   WHILE(!OK);
   //
   for (int loop = 0; loop < 5; loop++) {
      timeout_error_count = 0;
      printf(LCD_PUTC, "\f%s\nPort:%5lu    %u", ip, port, loop);
      clear_mem();                                                 
      fprintf(WIFI_ESP, AT_START_CON);
      fprintf(WIFI_ESP, "=%u", id); 
      if (type == TYPE_TCP)  
      fprintf(WIFI_ESP, ",\"TCP\"");                                     
      else                                  
      fprintf(WIFI_ESP, ",\"UDP\"");  
      fprintf(WIFI_ESP, ",\"%s\"", ip);
      fprintf(WIFI_ESP, ",%lu", port);
      fprintf(WIFI_ESP, CRLF);
      Long LONG timeout;
      timeout = 0;
      
      WHILE(!kbhit(WIFI_ESP) && (++timeout < 3000000)) //30 second         
      { 
         delay_us(10); 
         if (timeout % 3000 == 0) {
            timeout_error_count++;
            lcd_gotoxy(11, 2);                         
            int pos = timeout_error_count % 4;            
            if (pos == 0)
            printf(LCD_PUTC, "    ");
            if (pos == 1) 
            printf(LCD_PUTC, " .  ");
            if (pos == 2)                                  
            printf(LCD_PUTC, "  . ");
            if (pos == 3)
            printf(LCD_PUTC, "   .");
         }
      }
      for (int mem_loop = 0; mem_loop < 150; mem_loop++) {
         wifi_buff[n] = timed_getc();
         n++;                           
         if (n > 150) n = 0;
         if (timeout_error)
         break;
      }
      char *pch = strstr(wifi_buff, oks); //chu y con "ALREAY CONNECT"

      IF(pch) {
         OK = TRUE;  
         printf(LCD_PUTC, "\fIP:%s\nP:%5lu lan %u OK    ", ip, port, loop);
         break;                                  
      }
      ELSE
      {  
         char *link = strstr(wifi_buff, connected);    

         IF(link) {
            OK = TRUE;                                             
            printf(LCD_PUTC, "\fID CONNECTED!\nloop=%u", loop); 
            break;       
         }        
         else                       
         {
         OK = FALSE;   
         printf(LCD_PUTC, "\fIP:%s\nP:%5lu Error", ip, port);     
         }                                             

      }
      delay_ms(100); 
    
   }
     return OK;
   
}
void server_Start(unsigned int16 port)   // Truoc khi chay phai restart                                     
{

   char *cmd = AT_SET_MUL_CON;
   int1 OK = False;
   char *oks = "OK";
   char *link_builded = "link is builded";

   
   
   DO
   {
      char *pch = strstr(send_AT_result(cmd), oks); //chu y:link is builded

      IF(pch) {
         OK = TRUE;
         printf(LCD_PUTC, "\f%s", AT_SET_MUL_CON);
         break;
      }
      else
      {   
         char *pch = strstr(send_AT_result(cmd), link_builded); //chu y:link is builded

         IF(pch) {
            OK = TRUE;
            printf(LCD_PUTC, "\fLink is Builded");
            break;
         }
         
      }
      delay_ms(100);                                        
   }
   WHILE(!OK);
   //
   for (int loop = 0; loop < 5; loop++) {
      timeout_error_count = 0;
      printf(LCD_PUTC, "\fServ Port:%5lu\nLan %u", port, loop);
      clear_mem();                                                 
      //AT+CIPSERVER=1,9999      

      fprintf(WIFI_ESP, AT_SET_SERVER);
      fprintf(WIFI_ESP, "=1"); 
      fprintf(WIFI_ESP, ",%lu", port);
      fprintf(WIFI_ESP, CRLF);
      Long LONG timeout;
      timeout = 0;
      
      WHILE(!kbhit(WIFI_ESP) && (++timeout < 3000000)) //30 second         
      {
         delay_us(10);         
         if (timeout % 3000 == 0) {
            timeout_error_count++;
            lcd_gotoxy(11, 2);                         
            int pos = timeout_error_count % 4;            
            if (pos == 0)
            printf(LCD_PUTC, "    ");
            if (pos == 1) 
            printf(LCD_PUTC, " .  ");
            if (pos == 2)
            printf(LCD_PUTC, "  . ");
            if (pos == 3)
            printf(LCD_PUTC, "   .");
         }
      }
      for (int mem_loop = 0; mem_loop < 150; mem_loop++) {
         wifi_buff[n] = timed_getc();
         n++;
         if (n > 150) n = 0;        
         if (timeout_error)
         break;
      }
      char *pch = strstr(wifi_buff, oks);

      IF(pch) {
         OK = TRUE;                                                        
         printf(LCD_PUTC, "\fServ Port:%5lu\nLan %u OK", port, loop);   
         break;
      }
      ELSE
      {
         printf(LCD_PUTC, "\fServ Port:%5lu\nLan %u Error!", port, loop);   

      }
      delay_ms(100);              
   }

} 
//Cip close khi ket noi toi server phai co id
//close ket noi toi clinet(modlue khac hoac may tinh) thi ko can

void  close_connect(int id) //Tra ve ok hoac "link is not"
{                                                                                         
   // AT+CIPCLOSE=<id> 
   int1 OK = False;
   char *not_link="link is not";   //chua ket noi  
   char *oks="OK";
   for (int loop = 0; loop < 5; loop++) {                                                             
      clear_mem();
      fprintf(WIFI_ESP, AT_CLOSE_CON);
      fprintf(WIFI_ESP, "=%u", id);    
      fprintf(WIFI_ESP, CRLF);                           

      for (int mem_loop = 0; mem_loop < 150; mem_loop++) {

         wifi_buff[n] = timed_getc();
         n++;
         if (n > 150) n = 0;
         if (timeout_error) break;                          
      }                                      

      char *pch = strstr(wifi_buff, oks);    

      IF(pch) {
         OK = TRUE;                                             
         printf(LCD_PUTC, "\fCLOSE CONNECT\nloop=%u", loop);  
         break;
      }
      ELSE
      {
         char *link = strstr(wifi_buff, not_link);    

         IF(link) {
            OK = TRUE;                                             
            printf(LCD_PUTC, "\fNOT CONNECT\nloop=%u", loop); 
            break;
         }
      }                                               
   }
}
void send_data(int id, char  *data) 
{                                          
   // AT+CIPSEND= <id>,<length>
   int1 OK = False;                
   char *write = ">";
   char *send_ok="SEND OK";
   int16 length=strlen(data);
   for (int loop = 0; loop < 5; loop++) {                                                             
      clear_mem();                      
      fprintf(WIFI_ESP, AT_SEND);
      fprintf(WIFI_ESP, "=%u", id);    
      fprintf(WIFI_ESP, ",%lu",length);  
      fprintf(WIFI_ESP, CRLF);                           

      for (int mem_loop = 0; mem_loop < 150; mem_loop++) {

         wifi_buff[n] = timed_getc();
         n++;
         if (n > 150) n = 0;
         if (timeout_error) break;
      }                                      

      char *pch = strstr(wifi_buff, write);

      IF(pch) {
         OK = TRUE;                                             
         printf(LCD_PUTC, "\fSEND >\nlenght=%lu", length);
         
         
         //Gui noi dung                
         char *sent = strstr(send_AT_result(data), send_ok);

         IF(sent) {              
            OK = TRUE;
            printf(LCD_PUTC, "\fSEND OK\nlenght=%lu", length);
            break;                     
         }        
      }                                   
      else
      {
         OK = FALSE;                                             
         printf(LCD_PUTC, "\fSEND FAIL!\nloop=%u", loop);  
      }
      delay_ms(100);                                                 
   }                            
   
}


                   


//Loi khi module reset ma client ko biet no dong     





Wifi.h:

#define    ECN_OPEN          0      //Che do bao mat
#define    ECN_WEP           1
#define    ECN_WAP_PSK       2
#define    ECN_WAP2_PSK      3
#define    ECN_WAP_WAP2_PSK  4

#define    TYPE_TCP     1            //Che do ket noi
#define    TYPE_UDP     0                                 

#define    TRAN_OPEN    1         //Che do truyen nhan           
#define    TRAN_CLOSE   0

#define    MODE_STA     "AT+CWMODE=1"         //Che do wifi
#define    MODE_AP      "AT+CWMODE=2"                                          
#define    MODE_AT_STA  "AT+CWMODE=3"

#define WIFI_TX_BUFFER_SIZE 128      //Bo dem
#define WIFI_RX_BUFFER_SIZE 128   

//COMMAND 
#define AT_ECHO_ON                  "ATE1"  
#define AT_ECHO_OFF                 "ATE0"  
#define AT_RESET                    "AT+RST"  
#define AT_CFW                      "AT+GMR"  
#define AT_WIFI_MODE                "AT+CWMODE"
#define AT_JOIN_AP                  "AT+CWJAP" 
#define AT_GET_IP                   "AT+CIFSR" 
#define AT_LIST_AP                  "AT+CWLAP"
#define AT_QUIT_AP                  "AT+CWQAP"  
#define AT_SET_AP_PARAMS            "AT+CWSAP" 
#define AT_CHECK_JOIN_AP            "AT+CWQAP" 
#define AT_GET_CON_STATUS           "AT+CIPSTATUS"
#define AT_START_CON                "AT+CIPSTART" 
#define AT_CIP_MODE                 "AT+CIPMODE"  
#define AT_SEND                     "AT+CIPSEND"  
#define AT_CLOSE_CON                "AT+CIPCLOSE"           
#define AT_SET_MUL_CON              "AT+CIPMUX=1"
#define AT_SET_SERVER               "AT+CIPSERVER"  
#define AT_SET_SERVER_TIMEOUT       "AT+CIPSTO"  
#define AT_RECEIVED_DATA            "+IPD"





115200 baud hızında RS232 haberleşme yoluyla AT komutları kullanarak modülle iletişim kurmak için:

//COMMAND 
#define AT_ECHO_ON                  "ATE1"  
#define AT_ECHO_OFF                 "ATE0"  
#define AT_RESET                    "AT+RST"  
#define AT_CFW                      "AT+GMR"  
#define AT_WIFI_MODE                "AT+CWMODE"
#define AT_JOIN_AP                  "AT+CWJAP" 
#define AT_GET_IP                   "AT+CIFSR" 
#define AT_LIST_AP                  "AT+CWLAP"
#define AT_QUIT_AP                  "AT+CWQAP"  
#define AT_SET_AP_PARAMS            "AT+CWSAP" 
#define AT_CHECK_JOIN_AP            "AT+CWQAP" 
#define AT_GET_CON_STATUS           "AT+CIPSTATUS"
#define AT_START_CON                "AT+CIPSTART" 
#define AT_CIP_MODE                 "AT+CIPMODE"  
#define AT_SEND                     "AT+CIPSEND"  
#define AT_CLOSE_CON                "AT+CIPCLOSE"           
#define AT_SET_MUL_CON              "AT+CIPMUX=1"
#define AT_SET_SERVER               "AT+CIPSERVER"  
#define AT_SET_SERVER_TIMEOUT       "AT+CIPSTO"  
#define AT_RECEIVED_DATA            "+IPD"



[imghttp://laptrinhpic.info/wp-content/uploads/2014/10/esp8266_pinout-300x124.png]http://[/img]


http://youtu.be/FD3tVrwhxxw
printf(lcd_putc,"\f  Ne kadar okursan oku, bilgine, yakışır şekilde davranmıyorsan cahilsin demektir.  \n   semfero");d

Gökhan BEKEN

#32
@Recep METE  nın dediği gibi bağlantı yaptığım halde modül cevap vermiyor. GPIO0 pinini boşta bırakıp çalıştırırsam seri porttan karışık bir şekilde sürekli veri geliyor.
Güncelleme yaptığım için baudrate 115200'de. Ne olur ne olmaz diye 9600'de de denedim yine cevap yok.
Cihaz AT komutlarıma cevap vermiyor (cr+lf eklediğim halde)
Ürünü burdan sipariş etmiştim: http://www.dx.com/p/esp8266-wi-fi-wireless-serial-port-data-transceiver-module-blue-black-369015#.VOZVxC5Jf20

Eksik birşey mi yapıyorum acaba?

mesaj birleştirme:: 20 Şubat 2015, 02:33:04

Tekrar güncelleyim dedim, güncelleme bitince, güncelleme programını kapatıp terminalden baktım, sürekli bu veriler geliyor:



mesaj birleştirme:: 20 Şubat 2015, 02:48:02

Tekrar güncelledim, 115200'de cevap vermedi ama 9600'de aşağıdaki görüntüyü alıyorum. GPIO 0 pini boşta olursa bu dediğim oluyor, vcc'de yine cevap yok.

Özel mesaj okumuyorum, lütfen göndermeyin.

Gökhan BEKEN

Güncel...
Sorunum hakkında bilgisi olan var mı?
Özel mesaj okumuyorum, lütfen göndermeyin.

Cemre.

Alıntı yapılan: Gökhan BEKEN - 21 Şubat 2015, 22:25:47
Güncel...
Sorunum hakkında bilgisi olan var mı?

Hocam tümünü okuyacak zamanım olmadı ancak ben de benzer bir problemle karşılaştım ve nodemcu-firmware diye bir güncelleme yaptım. AT komutları kullanmak yerine Lua dilinde yazıyorsunuz kodunuzu ve modüle gömüyorsunuz. Enerjilendirdiğinizde o yapması gerekeni yapıyor. Bir araştırın derim. Ben de tam olarak çözebilmiş değilim ancak daha anlaşılır ve işlevsel olduğunu söyleyebilirim. Belki bu şekilde çözebilirsiniz sorunu.

esp8266.com'da LUA-Firmware forumundan bulabilirsiniz gerekli bilgiyi. Ayrıca http://benlo.com/esp8266/

Gökhan BEKEN

Teşekkür ederim, şurda: http://taylorcoffelt.com/article/1
terminalden güncellemeyi de anlatmışlar, yaptım ama güncelleme bitince yine sürekli veriler geliyor.
Bendeki modülden şüpheleniyorum bir de direnc.net'tekinden alıp denemeyi düşünüyorum.
Özel mesaj okumuyorum, lütfen göndermeyin.

Cemre.

#36
Hocam hangi sürüme güncelliyorsunuz?

Benim güncelleme yaptığım program ve güncellemede sorun çıkartmayan fw.ler bunlar.

0.9.5 şuan en güncel sanırım,

0.9.2.2
AT+GMR

0018000902

OK


Sonucunu  veriyor, nodemcu olan ise lua-firmware diye bahsedilen güncelleme.

Güncellemeyi de programı açıp gönderdiğim dosyadaki resimde görüldüğü gibi yapabilirsiniz. Sağdaki sekme önemli 0x00000 olması gerekiyor. Diğer tüm sekmeler kapalı olacak. Bunu yaptıktan sonra birinci sekmeden comport seçip flash diyeceksiniz. Tabi ki bunları yaparken gpio0 pini GND'ye bağlı olacak. Onun dışında herhangi bir bağlantı yapmadım. Sorunsuz çalışıyor bende.

Ek olarak, 9.2.2 sürümde MAC sorgulama amaçlı komutlarına ERROR dönüyor, onun dışında openweathermap'den veri çekmeyi sorunsuz yaptı vsvs.

9.5.0'da MAC sorgulamada sıkıntı yok ancak o da openweathermap'de sıkıntı çıkardı. İletişim için @FxDev hocamın yazdığı programı kullandım sade ve hızlı olduğunu düşündüğüm için. En azından test aşamasında bayağı işe yarıyor.

Ona da buradan teşekkürler.

http://www.dosya.tc/server39/JDSaQs/esp8266guncelleme.rar.html

Gökhan BEKEN

Hocam teşekkür ederim ama o program da işe yaramadı. Modülün bozuk olduğuna kanaat getirdim.
Bu arada modülü aldığımda versiyonu 0.9.2.4 idi. Sonra çince güncelleştirme programı ile dosya göstermeden tekrar güncelleme yaptığımda AT+GMR gönderdiğimde "0018000902" cevabını dönderiyordu.
Çince program ile dosya göstererek güncelleştirme yaptığımda sürekli saçma veriler dönderiyordu.

Ancak sizin program ile güncelleştir yaptığımda, sürekli veri döndermiyor ama AT komutlarıma da cevap vermiyor.
Özel mesaj okumuyorum, lütfen göndermeyin.

Cemre.

Hocam bağlantılarınızı doğru yapıyorsunuz değil mi?

VCC ve CH_PD 3.3V'a bağlı olacak, GND GND'ye, diğerlerini boş bırakabilirsiniz veya GPIO0'ı 3.3V'a bağlayabilirsiniz, bunun dışında hiç bir bağlantı yapmadan CH_PD pinini sürekli çıkarıp takma işlemi uygulayınca önce saçma sapan veriler geliyor daha sonra bir anda modül reset atmışsınız gibi cevap döndürüyor. Bu tarz birşeyler yapıp modüle bir kez ulaşınca geri kalan tüm işlemler sorunsuz oluyor. Eğer modülü enerjilendirirken reset veya ch_pd pini gnd'de değilse bir daha böyle birşeye ihtiyacınız kalmıyor. Ancak bu dediğim tüm modüller için geçerli mi bilemiyorum veya kim bununla uğraşmak ister onu da bilemiyorum  :D

volkanunal

Merhabalar esp8266 stm32f429 kitim ile basit bir web server yapmaya çalışıyorum  , kit üzerinden at komutlarına cevap alabiliyorum , ağa bağlı ve ip almış durumda , at komutlarını stm üzerinden gönderiyorum , anca html komutlarını göndererek ip üzerinden erişim sağlayamadım  , site bağlanmayı reddetti diyor , ve error döndürüyor.Daha önce deneyen var mıdır acaba?

MT

Hocam öncelikle bunun için temel ayarları yaptıktan sonra AT+CIPMUX= Multiple olarak ayarlanacak daha sonra uygun ip port değeri ile browser üzerinden bağlandığınızda gelen sorguya cevap AT+CIPSEND=ID( kaçıncı sekmeden sorgu var ise ID yerine o yazılır) cevap olarak gönderilir kısa bir süre beklenir hemen cevap verdiğimde error vermişti bende ve HTML komutları gönderilir. Kısa bir süre derken max süre aşımını AT+CIPSTO=2000 ms olarak ayarlamak  yeterli 500ms-1000ms gibi beklemeden sonra html kodunu gönderdiğimde bir sorun yaşamadım.   Umarım sorunuzu doğru anlayıp cevaplamışımdır.

volkanunal

hocam cipmux , cwmode ayarları yapılı zaten , elinizde örnek mevcut mu acaba ?

volkanunal

daha önce arduino üzerinde çalıştırabildim zaten

volkanunal

bir süre çalıştı , daha sonra tekrar gitti , espnin stabil çalışmadığına tanık oldum daha önce ama bu şekilde değildi

seyityildirim

Merhaba arkadaşlar,

Öncelikle çok faydalı bir konu olmuş. Emeği geçenlere teşekkürler... Benim sorum şu;

Örnek olması açısından https://learn.adafruit.com/diy-boost-calc/the-calculator bu sitedeki gibi kullanıcıdan değer bekleniyor.

Esp8266 kullanarak bu sitede bulunan kutucuklara değer girebilir miyim ? Konudaki ilk örnekte picproje sitesine bağlanılıyor. Ama daha sonra nasıl hareket ediliyor bir bilgim yok. Mesela bu modül ile picproje de konu açıp bu soruyu sorabilir miyim?