poniedziałek, 3 kwietnia 2017

[12] STM32F7 - ESP8266 cz. 2. Konfiguracja komend Wifi

Ten post będzie rozwinięciem poprzedniego dotyczącego mikrokontrolera ESP8266

Komendy Wifi


AT+CWMODE - (format: AT+CWMODE=[1..3]) - ustawienie trybu pracy Wifi. Do wyboru jest tryb klienta (1 ang. station mode), tryb dostępu (2 - ang. access point), czyli tworzona jest własne urządzenie do którego można się połączyć poprzez sieć wifi oraz połączenie obu trybów (3).

  1.         case Command_AT_CWMODE:
  2.             if(Wifi_Mode_Station == param || Wifi_Mode_Ap == param || Wifi_Mode_Ap_Station == param)
  3.             {
  4.                 sprintf(dane, "AT+CWMODE=%u", param);
  5.                 UART_SENDSTRING(ESP8266_USART, dane, CR_LF);
  6.             }
  7.         break;


AT+CWMODE_CUR - (format: AT+CWMODE_CUR=[1..3]) - nie zapisuje zmian do pamięci flash.

  1.         case Command_AT_CWMODE_CUR:
  2.             if(Wifi_Mode_Station == param || Wifi_Mode_Ap == param || Wifi_Mode_Ap_Station == param)
  3.             {
  4.                 sprintf(dane, "AT+CWMODE_CUR=%u", param);
  5.                 UART_SENDSTRING(ESP8266_USART, dane, CR_LF);
  6.             }
  7.         break;

AT+CWMODE_DEF - (format: AT+CWMODE_DEF=[1..3]) - zmiany wprowadzane do pamięci flash.

  1.         case Command_AT_CWMODE_DEF:
  2.             if(Wifi_Mode_Station == param || Wifi_Mode_Ap == param || Wifi_Mode_Ap_Station == param)
  3.             {
  4.                 sprintf(dane, "AT+CWMODE_DEF=%u", param);
  5.                 UART_SENDSTRING(ESP8266_USART, dane, CR_LF);
  6.             }
  7.         break;

AT+CWJAP - (format: AT+CWJAP="nazwa_sieci","hasło") - komenda pozwala na podłączenie urządzenia do sieci wifi. Ta funkcja jest u mnie zdefiniowana w osobnej funkcji.

  1. /*
  2.  * Function CWJAP, make connection with Wifi network
  3.  */
  4. void Wifi_Connect(char *wifi_name, char *wifi_password)
  5. {
  6.     char data[100] = {0};
  7.     sprintf(data,"AT+CWJAP=\"%s\",\"%s\"", &wifi_name[0], &wifi_password[0]);
  8.     UART_SENDSTRING(ESP8266_USART, data, CR_LF);
  9. }

AT+CWJAP_CUR - (format: AT+CWJAP_CUR="nazwa_sieci","hasło") - nie zapisuje zmian do pamięci flash.

  1. void Wifi_Connect_Cur(char *wifi_name, char *wifi_password)
  2. {
  3.     char data[100] = {0};
  4.     sprintf(data,"AT+CWJAP_CUR=\"%s\",\"%s\"", &wifi_name[0], &wifi_password[0]);
  5.     UART_SENDSTRING(ESP8266_USART, data, CR_LF);
  6. }

AT+CWJAP_DEF - (format: AT+CWJAP_DEF="nazwa_sieci","hasło") - zmiany zapisywane do pamięci flash.

  1. void Wifi_Connect_Def(char *wifi_name, char *wifi_password)
  2. {
  3.     char data[100] = {0};
  4.     sprintf(data,"AT+CWJAP_DEF=\"%s\",\"%s\"", &wifi_name[0], &wifi_password[0]);
  5.     UART_SENDSTRING(ESP8266_USART, data, CR_LF);
  6. }

AT+CWLAPOPT - (format: AT+CWLAPOPT=<sort_enable>,<mask>) - ustawienie konfiguracji dla komendy CWLAP.

Pierwszy parametr określa włączenie sortowania. Jeśli zostanie podana wartość 1 to dane będą wyświetlane zgodnie z , jeśli zostanie podane 0 to nie będę wyświetlane zgodnie z . Drugi parametr określa ile danych ma się pojawić w komendzie. Decyduje się o tym poprzez wybór odpowiedniego bitu:

  • bit 0: - Wyświetlanie 
  • bit 1: - Wyświetlanie 
  • bit 2: - Wyświetlanie 
  • bit 3: - Wyświetlanie 
  • bit 4: - Wyświetlanie 
  • bit 5: - Wyświetlanie 
  • bit 6: - Wyświetlanie 

  1.         case Command_AT_CWLAPOPT:
  2.             if(data < 128 && ((0 == param) || (1 == param)))
  3.             {
  4.                 sprintf(dane, "AT+CWLAPOPT=%u,%u", param, data);
  5.                 UART_SENDSTRING(ESP8266_USART, dane, CR_LF);
  6.             }
  7.             break;


AT+CWLAP - (format: AT+CWLAP=<ssid>, [mad], [ch]) - pozwala ono na sprawdzenie dostępnych SSID oraz MAC dla wszystkich lub wybranego kanału. Jako parametry podaje się nazwę lub dla dokładniejszego wyszukiwania adres mac oraz kanał.
  1. uint8_t AP_List(char *ssid, char *mac, uint16_t channel)
  2. {
  3.     char data[50];
  4.     if(0 == channel)
  5.     {
  6.         sprintf(data, "AT+CWLAP=\"%s\"", &ssid[0]);
  7.         UART_SENDSTRING(ESP8266_USART, data, CR_LF);
  8.         return 1;
  9.     }
  10.     else
  11.     {
  12.         sprintf(data, "AT+CWLAP=\"%s\",\"%s\",%u", &ssid[0],&mac[0],channel);
  13.         UART_SENDSTRING(ESP8266_USART, data, CR_LF);
  14.         return 1;
  15.     }
  16.     return 0;
  17. }

Wywołanie komendy bezparametrowej (AT+CWLAP) wypisze listę wszystkich dostępnych punktów dostępu do ESP8266.



  1.         case Command_AT_CWLAP:
  2.             UART_SENDSTRING(ESP8266_USART, "AT+CWLAP", CR_LF);
  3.             break;

Komenda w odpowiedzi prześle następujące dane:

  • wypisany zostanie standard szyfrowania
  • ssid albo AP
  • siła sygnału
  • adres mac
  • offset częstotliwości dla AP podawany w kHz
  • kalibracja offsetu

AT+CWQAP - (format: AT+CWQAP) - rozłączenie z AP.


  1.         //Disconnect from AP
  2.         //Response: OK
  3.         case Command_AT_CWQAP:
  4.             UART_SENDSTRING(ESP8266_USART, "AT+CWQAP", CR_LF);
  5.             break;

AT+CWSAP - (format: AT+CWSAP=ssid, pwd, chl, enc, [max conn],[ssid hidden

  • nazwa ESP, w jaki sposób będzie on widoczny podczas podłączania się do niego;
  • hasło jakie należy podać przed podłączeniem;
  • numer kanału;
  • rodzaj szyfrowania. Do wyboru Open (0), WPA_PSK (2), WPA2_PSK (3), WPA_WPA2_PSK (4);
  • maksymalna liczba urządzeń jaka może zostać podłączona do ESP, od 1 do 4.
  • nadawienie SSID w trybie brodcastu. Parametr 0 włącza tą opcje, parametr 1 wyłącza.

W dokumentacji zalecają używanie wersji CUR oraz DEF w zależności od tego na jaki okres czasu chce się ustawić odpowiednie parametry.

Wysłanie zapytania tzn. komendy AT+CWSAP? pozwala na uzyskanie w odpowiedzi takich informacji jak:

Nazwę SSID, pwd, chl, enc, max conn oraz ssid hidden. Całą ramkę odpowiedzi poprzedzi nazwa CWSAP.

AT+CWSAP_CUR - (format: AT+CWSAP_CUR=ssid,pwd,chl,enc,[max conn],[ssid hidden) - ustawienie tymczasowe, zmiany nie są wpisywane do pamięci flash.

AT+CWSAP_DEF - (format: AT+CWSAP_CUR=ssid,pwd,chl,enc,[max conn],[ssid hidden)- ustawienie stałe, zmiany wprowadzone do pamięci flash.


  1. /*
  2. * Configurate of softAP mode
  3. * Format AT+CWSAP=,,,,[],[]
  4. */
  5. uint8_t Config_SoftAP(char *ssid, char *pwd, uint8_t chl, uint8_t ecn, uint8_t max_conn ,SSID_Hidden_e ssid_hidden)
  6. {
  7.     char data[50];
  8.     if((ssid_hidden == Ssid_Hidden_None) && (max_conn == 0)) {
  9.         sprintf(data, "AT+CWSAP=\"%s\",\"%s\",%u,%u", &ssid[0], &pwd[0], chl, ecn);
  10.     }
  11.     else if(ssid_hidden == Ssid_Hidden_None) {
  12.         sprintf(data, "AT+CWSAP=\"%s\",\"%s\",%u,%u,%u", &ssid[0], &pwd[0], chl, ecn, max_conn);
  13.     }
  14.     else if((max_conn != 0) && (ssid_hidden != Ssid_Hidden_None)) {
  15.         sprintf(data, "AT+CWSAP=\"%s\",\"%s\",%u,%u,%u,%u", &ssid[0], &pwd[0], chl, ecn, max_conn, ssid_hidden);
  16.     }
  17.     else {
  18.         return Stat_Error;
  19.     }
  20.     UART_SENDSTRING(ESP8266_USART, data, CR_LF);
  21.     return Stat_OK;
  22. }
  23. uint8_t Config_SoftAP_DEF(char *ssid, char *pwd, uint8_t chl, uint8_t ecn, uint8_t max_conn ,SSID_Hidden_e ssid_hidden)
  24. {
  25.     char data[50];
  26.     if((ssid_hidden == Ssid_Hidden_None) && (max_conn == 0)) {
  27.         sprintf(data, "AT+CWSAP_DEF=\"%s\",\"%s\",%u,%u", &ssid[0], &pwd[0], chl, ecn);
  28.     }
  29.     else if(ssid_hidden == Ssid_Hidden_None) {
  30.         sprintf(data, "AT+CWSAP_DEF=\"%s\",\"%s\",%u,%u,%u", &ssid[0], &pwd[0], chl, ecn, max_conn);
  31.     }
  32.     else if((max_conn != 0) && (ssid_hidden != Ssid_Hidden_None)){
  33.         sprintf(data, "AT+CWSAP_DEF=\"%s\",\"%s\",%u,%u,%u,%u", &ssid[0], &pwd[0], chl, ecn, max_conn, ssid_hidden);
  34.     }
  35.     else {
  36.         return Stat_Error;
  37.     }
  38.     UART_SENDSTRING(ESP8266_USART, data, CR_LF);
  39.     return Stat_OK;
  40. }
  41. uint8_t Config_SoftAP_CUR(char *ssid, char *pwd, uint8_t chl, uint8_t ecn, uint8_t max_conn ,SSID_Hidden_e ssid_hidden)
  42. {
  43.     char data[50];
  44.     if((ssid_hidden == Ssid_Hidden_None) && (max_conn == 0)) {
  45.         sprintf(data, "AT+CWSAP_CUR=\"%s\",\"%s\",%u,%u", &ssid[0], &pwd[0], chl, ecn);
  46.     }
  47.     else if(ssid_hidden == Ssid_Hidden_None) {
  48.         sprintf(data, "AT+CWSAP_CUR=\"%s\",\"%s\",%u,%u,%u", &ssid[0], &pwd[0], chl, ecn, max_conn);
  49.     }
  50.     else if((max_conn != 0) && (ssid_hidden != Ssid_Hidden_None)) {
  51.         sprintf(data, "AT+CWSAP_CUR=\"%s\",\"%s\",%u,%u,%u,%u", &ssid[0], &pwd[0], chl, ecn, max_conn, ssid_hidden);
  52.     }
  53.     else {
  54.         return Stat_Error;
  55.     }
  56.     UART_SENDSTRING(ESP8266_USART, data, CR_LF);
  57.     return Stat_OK;
  58. }


AT+CWLIF - (format: AT+CWLIF) - komenda zwracająca. Służy do sprawdzenia jakie urządzenia są podłączone do ESP. W odpowiedzi zwraca ich IP oraz MAC. Może być wykorzystywana tylko gdy DHCP jest włączone. Nie można przy użyciu tej komendy pobrać statycznego IP. Nie przyjmuje ona żadnych parametrów:

  1. case Check_AT_CWLIF:
  2.     UART_SENDSTRING(ESP8266_USART, "AT+CWLIF", CR_LF);
  3. break;

AT+CWDHCP - (format: AT+CWDHCP=<mode>,<en>) - komenda służy do włączania lub wyłączania. Pierwszy parametr służy do wybrania trybu pracy. Wartość 0 oznacza tryb klienta, 1 pozwala na skonfigurowanie jako urządzenie osobne do którego można się podłączyć. Ostatnia wartość czyli 2 wykorzystuje oba te tryby. Drugi parametr włącza (1) lub wyłącza (0) DHCP.

Trzeba pamiętać, że ta komenda dotyczy innych komend odpowiedzialnych za ustawienia IP. W przypadku włączenia DHCP IP statyczne zostanie wyłączone i odwrotnie. Jak się można domyślić ustawienie będzie takie jak ostatnia wprowadzona konfiguracja.

AT+CWDHCP_CUR - (format: AT+CWDHCP_CUR=<mode>,<en>) - zapisanie wartości tymczasowej, nie zapisywana w pamięci flash.


AT+CWDHCP_DEF - (format: AT+CWDHCP_DEF=<mode>,<en>) - zapisanie wartości do pamięci flash.

  1. uint8_t Config_DHCP(uint8_t command, uint8_t mode, uint8_t en)
  2. {
  3.     char data[50] = {0};
  4.     if((0 == mode || 1 == mode || 2 == mode) && (0 == en || 1 == en))
  5.     {
  6.         if(0 == command)
  7.         {
  8.             sprintf(data, "AT+CWDHCP=%u,%u", mode, en);
  9.             UART_SENDSTRING(ESP8266_USART, data, CR_LF);
  10.             return Stat_OK;
  11.         }
  12.         else if(1 == command)
  13.         {
  14.             sprintf(data, "AT+CWDHCP_CUR=%u,%u", mode, en);
  15.             UART_SENDSTRING(ESP8266_USART, data, CR_LF);
  16.             return Stat_OK;
  17.         }
  18.         else if(2 == command)
  19.         {
  20.             sprintf(data, "AT+CWDHCP_DEF=%u,%u", mode, en);
  21.             UART_SENDSTRING(ESP8266_USART, data, CR_LF);
  22.             return Stat_OK;
  23.         }
  24.     }
  25.     return Stat_Error;
  26. }

AT+CWDHCPS_CUR - (format: AT+CWDHCPS_CUR=<lease time>,<start ip>,<end ip>)) - ustawia adres IP dla klienta z przygotowanego zakresu. Dane nie będą przechowywane w pamięci flash.

Parametry:

  • wartość 0 wyłącza te ustawiania, używany jest domyślny zakres. Wpisanie 1 włącza zdeklarowany w następnych parametrach zasięg.
  • czas przez jaki dany zakres będzie zarezerwowany. Jest on podawany w minutach w przedziale od 1 do 2880.
  • początkowy adres IP
  • końcowy adres IP
AT+CWDHCPS_DEF - (format: AT+CWDHCPS_CUR=<lease time>,<start ip>,<end ip>) - wprowadzone zmiany zostaną zapisane w pamięci flash. Pierwsza długa instrucja if sprawdza czy zostanie przeprowadzone automatyczne podłączenie do AP.

  1. /*
  2.  * Set the IP address allocated by ESP8266 soft-AP DHCP
  3.  * Format AT+CWDHCPS_CUR | AT+CWDHCPS_CUR=<enable>, <lease time>, <start IP>, <end IP>
  4.  */
  5. uint8_t Set_IP_Address_Range(uint8_t command, uint8_t enable, uint8_t lease_time, uint8_t *statr_IP, uint8_t *end_IP)
  6. {
  7.     char data[50]={0};
  8.     if(((0 == enable) || (1 == enable)) && ((lease_time>0) && (lease_time<2880)))
  9.     {
  10.         if(0 == command)
  11.         {
  12.             sprintf(data, "AT+CWDHCPS_CUR=%u,%u,\"%u.%u.%u.%u\",\"%u.%u.%u.%u\"", enable, lease_time,
  13.                     statr_IP[0], statr_IP[1], statr_IP[2], statr_IP[3], end_IP[0], end_IP[1], end_IP[2], end_IP[3]);
  14.             UART_SENDSTRING(ESP8266_USART, data, CR_LF);
  15.         }
  16.         else if(1 == command)
  17.         {
  18.             sprintf(data, "AT+CWDHCPS_DEF=%u,%u,\"%u.%u.%u.%u\",\"%u.%u.%u.%u\"", enable, lease_time,
  19.                 statr_IP[0], statr_IP[1], statr_IP[2], statr_IP[3], end_IP[0], end_IP[1], end_IP[2], end_IP[3]);
  20.             UART_SENDSTRING(ESP8266_USART, data, CR_LF);
  21.         }
  22.     }
  23.     return Stat_Error;
  24. }

  1.         //Auto connect to AP
  2.         //Response: OK
  3.         case Command_AT_CWAUTOCONN:
  4.             if(0 == param)
  5.             {
  6.                 UART_SENDSTRING(ESP8266_USART, "AT+CWAUTOCONN=0", CR_LF);
  7.             }
  8.             else if(1 == param)
  9.             {
  10.                 UART_SENDSTRING(ESP8266_USART, "AT+CWAUTOCONN=1", CR_LF);
  11.             }
  12.             break;

AT+CIPAPMAC - (format: AT+CIPAPMAC =<mac>) - ustawienie adresu MAC. Adresy urządzeń muszą się między sobą różnić. Dodatkowo pierwszy bit w pierwszym bajcie nie może być wartości 1.

AT+CIPAPMAC_CUR - (format: AT+CIPAPMAC_CUR=<mac>) - nie wprowadza zmian w pamięci flash.

AT+CIPAPMAC_DEF - (format: AT+CIPAPMAC_DEF=<mac>) - wpisuje zmiany do pamięci flash.

  1. /*
  2.  * Format AT+CIPAPMAC="MAC"
  3.  */
  4. void Set_Mac_Data(uint8_t *ESP8266_MAC, uint8_t choose)
  5. {
  6.     char data[50];
  7.     if(1 == choose)
  8.     {
  9.         sprintf(data, "AT+CIPAPMAC=\"%u:%u:%u:%u:%u:%u\"", ESP8266_MAC[0], ESP8266_MAC[1], ESP8266_MAC[2], ESP8266_MAC[3],
  10.                                                             ESP8266_MAC[4], ESP8266_MAC[5]);
  11.     }
  12. #if  Init_Cur_Commands == 1
  13.     else if(2 == choose)
  14.     {
  15.         sprintf(data, "AT+CIPAPMAC_CUR=\"%u:%u:%u:%u:%u:%u\"", ESP8266_MAC[0], ESP8266_MAC[1], ESP8266_MAC[2], ESP8266_MAC[3],
  16.                                                             ESP8266_MAC[4], ESP8266_MAC[5]);
  17.     }
  18. #endif
  19. #if  Init_Def_Commands == 1
  20.     else if(3 == choose)
  21.     {
  22.         sprintf(data, "AT+CIPAPMAC_DEF=\"%u:%u:%u:%u:%u:%u\"", ESP8266_MAC[0], ESP8266_MAC[1], ESP8266_MAC[2], ESP8266_MAC[3],
  23.                                                             ESP8266_MAC[4], ESP8266_MAC[5]);
  24.     }
  25. #endif
  26.     UART_SENDSTRING(ESP8266_USART, data, CR_LF);
  27. }

AT+CIPSTA - (format: AT+CIPSTA=<IP>,[gateway],[netmask]) - ustawienie parametrów statycznego IP, maski sieci oraz bramy domyślnej. Parametry gateway oraz netmask są opcjonalne i nie muszą zostać podane.

  1. void Set_IP_Data(uint8_t *ESP8266_IP, uint8_t *ESP8266_NetMask, uint8_t *ESP8266_Gateway, uint8_t check)
  2. {
  3.     char data[50];
  4.     if(1 == check)              //Set only IP
  5.     {
  6.         sprintf(data, "AT+CIPSTA=\"%u.%u.%u.%u\"", ESP8266_IP[0], ESP8266_IP[1], ESP8266_IP[2], ESP8266_IP[3]);
  7.     }
  8.     else if(2 == check)         //Set all param
  9.     {
  10.         sprintf(data, "AT+CIPSTA=\"%u.%u.%u.%u\",\"%u.%u.%u.%u\",\"%u.%u.%u.%u\"", ESP8266_IP[0], ESP8266_IP[1], ESP8266_IP[2], ESP8266_IP[3],
  11.                 ESP8266_NetMask[0], ESP8266_NetMask[1], ESP8266_NetMask[2], ESP8266_NetMask[3],
  12.                 ESP8266_Gateway[0], ESP8266_Gateway[1], ESP8266_Gateway[2], ESP8266_Gateway[3]);
  13.     }
  14.     UART_SENDSTRING(ESP8266_USART, data, CR_LF);
  15. }
  16. void Set_IP_Data_CUR(uint8_t *ESP8266_IP, uint8_t *ESP8266_NetMask, uint8_t *ESP8266_Gateway, uint8_t check)
  17. {
  18.     char data[50];
  19.     if(1 == check)              //Set only IP
  20.     {
  21.         sprintf(data, "AT+CIPSTA_CUR=\"%u.%u.%u.%u\"", ESP8266_IP[0], ESP8266_IP[1], ESP8266_IP[2], ESP8266_IP[3]);
  22.     }
  23.     else if(2 == check)         //Set all param
  24.     {
  25.         sprintf(data, "AT+CIPSTA_CUR=\"%u.%u.%u.%u\",\"%u.%u.%u.%u\",\"%u.%u.%u.%u\"", ESP8266_IP[0], ESP8266_IP[1], ESP8266_IP[2], ESP8266_IP[3],
  26.                 ESP8266_NetMask[0], ESP8266_NetMask[1], ESP8266_NetMask[2], ESP8266_NetMask[3],
  27.                 ESP8266_Gateway[0], ESP8266_Gateway[1], ESP8266_Gateway[2], ESP8266_Gateway[3]);
  28.     }
  29.     UART_SENDSTRING(ESP8266_USART, data, CR_LF);
  30. }
  31. void Set_IP_Data_DEF(uint8_t *ESP8266_IP, uint8_t *ESP8266_NetMask, uint8_t *ESP8266_Gateway, uint8_t check)
  32. {
  33.     char data[50];
  34.     if(1 == check)              //Set only IP
  35.     {
  36.         sprintf(data, "AT+CIPSTA_DEF=\"%u.%u.%u.%u\"", ESP8266_IP[0], ESP8266_IP[1], ESP8266_IP[2], ESP8266_IP[3]);
  37.     }
  38.     else if(2 == check)         //Set all param
  39.     {
  40.         sprintf(data, "AT+CIPSTA_DEF=\"%u.%u.%u.%u\",\"%u.%u.%u.%u\",\"%u.%u.%u.%u\"", ESP8266_IP[0], ESP8266_IP[1], ESP8266_IP[2], ESP8266_IP[3],
  41.                 ESP8266_NetMask[0], ESP8266_NetMask[1], ESP8266_NetMask[2], ESP8266_NetMask[3],
  42.                 ESP8266_Gateway[0], ESP8266_Gateway[1], ESP8266_Gateway[2], ESP8266_Gateway[3]);
  43.     }
  44.     UART_SENDSTRING(ESP8266_USART, data, CR_LF);
  45. }

Komenda AT+CIPSTA ma wpływ na ustawienia z komendy AT+CWDHCP. Jeśli DHCP jest włączone to statyczne IP nie jest przyjmowane i odwrotnie.

AT+CIPSTA_CUR - (format: AT+CIPSTA_CUR=<IP>,[gateway],[netmask]) - ustawienie danych, nie zapisywane w pamięci flash:

AT+CIPSTA_DEF - (format: AT+CIPSTA_DEF=<IP>,[gateway],[netmask])) - ustawienie danych, zapisuje zmiany w pamięci flash:


AT+CIPAP - (format: AT+CIPAP=<IP>,[<gateway>],[<netmask>]) - komenda ma taką samą składnię co funckje AT+CIPSTA. Służy natomiast do ustawiania adresu IP dla urządzenia osobnego, nie będącego w trybie klienta.


AT+CIPAP_DEF - (format: AT+CIPAP_DEF=<IP>,[<gateway>],[<netmask>]) - ustawienie z zapisem danych do pamięci flash.


  1. //===================================================================================================================================
  2. /*
  3.  * Format AT+CIPAP="IP",["GATEWAY"],["NETMASK"]
  4.  * check: 1 AT+CIPAP
  5.  *        2 AT+CIPAP
  6.  *        3 AT+CIPAP_CUR
  7.  *        4 AT+CIPAP_CUR
  8.  *        5 AT+CIPAP_DEF
  9.  *        6 AT+CIPAP_DEF
  10.  */
  11. uint8_t Set_Soft_IP_Data(uint8_t *ESP8266_IP, uint8_t *ESP8266_NetMask, uint8_t *ESP8266_Gateway, uint8_t check)
  12. {
  13.     char data[50];
  14.     if(1 == check)              //Set only IP
  15.     {
  16.         sprintf(data, "AT+CIPAP=\"%u.%u.%u.%u\"", ESP8266_IP[0], ESP8266_IP[1], ESP8266_IP[2], ESP8266_IP[3]);
  17.         UART_SENDSTRING(ESP8266_USART, data, CR_LF);
  18.         return Stat_OK;
  19.     }
  20.     else if(2 == check)         //Set all param
  21.     {
  22.         sprintf(data, "AT+CIPAP=\"%u.%u.%u.%u\",\"%u.%u.%u.%u\",\"%u.%u.%u.%u\"",
  23.                 ESP8266_IP[0],      ESP8266_IP[1],      ESP8266_IP[2],      ESP8266_IP[3],
  24.                 ESP8266_NetMask[0], ESP8266_NetMask[1], ESP8266_NetMask[2], ESP8266_NetMask[3],
  25.                 ESP8266_Gateway[0], ESP8266_Gateway[1], ESP8266_Gateway[2], ESP8266_Gateway[3]);
  26.         UART_SENDSTRING(ESP8266_USART, data, CR_LF);
  27.         return Stat_OK;
  28.     }
  29. #if  Init_Cur_Commands == 1
  30.     else if(3 == check)             //Set only IP
  31.     {
  32.         sprintf(data, "AT+CIPAP_CUR=\"%u.%u.%u.%u\"", ESP8266_IP[0], ESP8266_IP[1], ESP8266_IP[2], ESP8266_IP[3]);
  33.         UART_SENDSTRING(ESP8266_USART, data, CR_LF);
  34.         return Stat_OK;
  35.     }
  36.     else if(4 == check)         //Set all param
  37.     {
  38.         sprintf(data, "AT+CIPAP_CUR=\"%u.%u.%u.%u\",\"%u.%u.%u.%u\",\"%u.%u.%u.%u\"",
  39.                 ESP8266_IP[0],      ESP8266_IP[1],      ESP8266_IP[2],      ESP8266_IP[3],
  40.                 ESP8266_NetMask[0], ESP8266_NetMask[1], ESP8266_NetMask[2], ESP8266_NetMask[3],
  41.                 ESP8266_Gateway[0], ESP8266_Gateway[1], ESP8266_Gateway[2], ESP8266_Gateway[3]);
  42.         UART_SENDSTRING(ESP8266_USART, data, CR_LF);
  43.         return Stat_OK;
  44.     }
  45. #endif
  46. #if  Init_Def_Commands == 1
  47.     else if(5 == check)             //Set only IP
  48.     {
  49.         sprintf(data, "AT+CIPAP_DEF=\"%u.%u.%u.%u\"", ESP8266_IP[0], ESP8266_IP[1], ESP8266_IP[2], ESP8266_IP[3]);
  50.         UART_SENDSTRING(ESP8266_USART, data, CR_LF);
  51.         return Stat_OK;
  52.     }
  53.     else if(6 == check)         //Set all param
  54.     {
  55.         sprintf(data, "AT+CIPAP_DEF=\"%u.%u.%u.%u\",\"%u.%u.%u.%u\",\"%u.%u.%u.%u\"",
  56.                 ESP8266_IP[0],      ESP8266_IP[1],      ESP8266_IP[2],      ESP8266_IP[3],
  57.                 ESP8266_NetMask[0], ESP8266_NetMask[1], ESP8266_NetMask[2], ESP8266_NetMask[3],
  58.                 ESP8266_Gateway[0], ESP8266_Gateway[1], ESP8266_Gateway[2], ESP8266_Gateway[3]);
  59.         UART_SENDSTRING(ESP8266_USART, data, CR_LF);
  60.         return Stat_OK;
  61.     }
  62. #endif
  63.     return Stat_Error;
  64. }

AT+CWSTARTSMART - (format: AT+CWSTARTSMART=[1..3]) - jest to tzw. Smart Config. Jest on dopuszczalny tylko w trybie stacjonarnym. Pozwala on na ustawienie odpowiedniego protokołu dostępu do urządzenia.

Parametrem może być wartość od 1 do 3 gdzie: 1 oznacza ESP-TOUCH, 2 to AirKiss 3 natomiast to ESP-Touch + AirKiss

Dzięki nim można dokonać połączenie z dedykowanymi programami.

  1.         case Command_AT_CWSTARTSMART:
  2.             if(1 == param)      {   UART_SENDSTRING(ESP8266_USART, "AT+CWSTARTSMART=1", CR_LF); }
  3.             else if(2 == param) {   UART_SENDSTRING(ESP8266_USART, "AT+CWSTARTSMART=2", CR_LF); }
  4.             else if(3 == param) {   UART_SENDSTRING(ESP8266_USART, "AT+CWSTARTSMART=3", CR_LF); }
  5.             break;

AT+CWSTOPSMART - (format: AT+CWSTOPSMART) - wymagane po użyciu komendy StartSmart. Pozwala na zwolnienie zajętej pamięci przez tą operację. Należy stosować zanim zostaną wywołane inne komendy AT.

  1.         case Command_AT_CWSTOPSMART:
  2.             UART_SENDSTRING(ESP8266_USART, "AT+CWSTOPSMART", CR_LF);
  3.             break;

AT+CWSTARTDISCOVER - (format: AT+CWSTARTDISCOVER=<WeChat number>,<dev_type>,<time>

Parametry to:
  • numer nadawany przez WeChat
  • typ urządzenia dostępny od WeChat
  • jest to definicja interwału czasowego po jakim jest wysyłany pakiet danych do aplikacji


  1. /*
  2.  * Start the mode that ESP8266 can be found by WeChat
  3.  * AT+CWSTARTDISCOVER
  4.  */
  5. uint8_t WeChat_Start_Discover(char *WeChat_number, char *dec_number, uint16_t time)
  6. {
  7.     char data[50];
  8.     if(0 == time)
  9.     {
  10.         sprintf(data, "AT+CWSTARTDISCOVER=\"%s\",\"%s\",0", &WeChat_number[0], &dec_number[0]);
  11.         UART_SENDSTRING(ESP8266_USART, data, CR_LF);
  12.         return 1;
  13.     }
  14.     else if(time < 86400)
  15.     {
  16.         sprintf(data, "AT+CWSTARTDISCOVER=\"%s\",\"%s\",%u", &WeChat_number[0], &dec_number[0], time);
  17.         UART_SENDSTRING(ESP8266_USART, data, CR_LF);
  18.         return 1;
  19.     }
  20.     return 0;
  21. }

AT+CWSTOPDISCOVER - (format: AT+CWSTOPDISCOVER) - zatrzymuje działanie trybu StartDiscover.

  1.         case Command_AT_CWSTOPDISCOVER:
  2.             UART_SENDSTRING(ESP8266_USART, "AT+CWSTOPDISCOVER", CR_LF);
  3.             break;

AT+WPS - (format: AT+WPS) - ustawia funkcje WPS. Nie wspiera WEP. Jako parametr podaje się albo 0 albo 1.

  1.         case Command_AT_WPS:
  2.             if(0 == param)      {   UART_SENDSTRING(ESP8266_USART, "AT+WPS=0", CR_LF);  }
  3.             else if(1 == param) {   UART_SENDSTRING(ESP8266_USART, "AT+WPS=1", CR_LF);  }
  4.             break;

AT+MDNS - (format AT+MDNS=<enable>,<hostname>,<server_name>,<server_port>) - ustawia funkcje MDNS. W nazwach nie należy stosować kropek albo nazw jak http.

  1. /*
  2.  * Set MDNS function
  3.  * AT+MDNS
  4.  */
  5. uint8_t MDNS_Function(uint8_t enable, char *hostname, char *server_name, uint16_t server_port)
  6. {
  7.     uint8_t length = 0;
  8.     char data[50];
  9.     while (&hostname[length] != '\0')
  10.     {
  11.         if(&hostname[length] == '.') { return 0; }
  12.         length++;
  13.     }
  14.     length = 0;
  15.     while (&server_name[length] != '\0')
  16.     {
  17.         if(&server_name[length] == '.') { return 0; }
  18.         length++;
  19.     }
  20.     if(0 == enable)
  21.     {
  22.         sprintf(data, "AT+MDNS=0,\"%s\",\"%s\",%u", &hostname[0], &server_name[0], server_port);
  23.         UART_SENDSTRING(ESP8266_USART, data, CR_LF);
  24.         return 1;
  25.     }
  26.     else if(1 == enable)
  27.     {
  28.         sprintf(data, "AT+MDNS=1,\"%s\",\"%s\",%u", &hostname[0], &server_name[0], server_port);
  29.         UART_SENDSTRING(ESP8266_USART, data, CR_LF);
  30.         return 1;
  31.     }
  32.     return 0;
  33. }

Następna część będzie zawierała komendy do TCP.