Tuned for OS2 to reduce flash code size for smaller MCU's. Added further functions since 2018 v1.7 firmware. Improved faster large web page sending. Built in fast NTP Client time and RTC setting function. ATParser message handling improvements and updated.

Dependencies:  

Dependents:   ESP8266-NTP-Test

Revision:
2:072248e430d0
Parent:
0:64d65feb280c
Child:
3:ffdde9d17dd1
--- a/ESP8266.cpp	Mon Feb 11 00:15:54 2019 +0000
+++ b/ESP8266.cpp	Mon Feb 11 23:33:54 2019 +0000
@@ -5,8 +5,19 @@
     : _serial(tx, rx, 1024), _parser(_serial)   // set our buffer to ESP max buffer size
 {
     _serial.baud(115200);
-    _parser.debugOn(debug);    
-    //reset();
+    _parser.debugOn(debug);
+    _parser.send("ATE0");     // set no ESP echo
+}
+
+bool ESP8266::reset(void)
+{
+    if (_parser.send("AT+RST")          // soft reset ESP
+        && _parser.recv("OK\r\nready")
+        && _parser.send("ATE0")     // set no ESP echo
+        && _parser.recv("OK")) {
+        return true;
+        }   
+    else return false;
 }
 
 bool ESP8266::startup(int mode)
@@ -14,10 +25,8 @@
     //only 3 valid modes
     if(mode < 1 || mode > 3) {
         return false;
-    }   
-           _parser.send("ATE0\r\n")                 //set no ESP echo
-        && _parser.recv("OK")
-        && _parser.send("AT+CWMODE=%d", mode)       //set mode 
+    }  
+         _parser.send("AT+CWMODE=%d", mode)       //set mode 
         && _parser.recv("OK")
         && _parser.send("AT+CIPMUX=1") 
         && _parser.recv("OK");
@@ -30,9 +39,7 @@
     if(mode < 1 || mode > 3) {
         return false;
     }
-           _parser.send("ATE0\r\n")                 //set no ESP echo
-        && _parser.recv("OK")
-        && _parser.send("AT+CWMODE=%d",mode)        //set mode
+         _parser.send("AT+CWMODE=%d",mode)        //set mode
         && _parser.recv("OK")
         && _parser.send("AT+CIPMUX=1") 
         && _parser.recv("OK")
@@ -44,35 +51,13 @@
      return true;
 }
 
-bool ESP8266::reset(void)
-{
-    for (int i = 0; i < 2; i++) {
-        if (_parser.send("AT+RST")          // soft reset ESP
-            && _parser.recv("OK\r\nready")
-            && _parser.send("ATE0\r\n")     // set no ESP echo
-            && _parser.recv("OK")); {
-            return true;
-        }
-    }
-    return false;
-}
-
 const char *ESP8266::getFirmware(void)
 {
-/*    
-    if (!(_parser.send("AT+GMR")
-        && _parser.recv("%d", _firmware)
-        && _parser.recv("OK"))) {
-        return 0;
-    }
-     return _firmware;
-*/       
-    int32_t recv_amount = 132;    
-    if (!(_parser.send("AT+GMR")
-        && _parser.read((char*)_firmware,recv_amount)
-        && _parser.recv("OK"))) {
-        return 0;
-    }
+    int previous_timeout = _parser._timeout; // get current ESP timeout
+    setTimeout(200);   
+    _parser.send("AT+GMR");
+    _parser.getESP((char*)_firmware);
+     setTimeout(previous_timeout);   // restore previous ESP timeout       
     return _firmware;
 }
 
@@ -155,7 +140,7 @@
 {
     unsigned int lenOfPacketToTx;
     unsigned int pageToSendAddress=0;
-    Timer t;    // we test for 'SEND OK' otherwise comms fail, this function needs to escape, 3 second timeout.
+    // we test for 'SEND OK' otherwise comms fail, this function needs to escape, 3 second timeout.
     t.reset();t.start();    
     while(amount>0 && t.read()<3){
         if(amount>2048){amount-=2048;lenOfPacketToTx=2048;} //ESP send buffer limit
@@ -177,7 +162,7 @@
 
 const char *ESP8266::recvWebRequest(void )
 {   
-    char dummy[50];
+    char dummy[50]; // this is not working as expected, we need add a 'dummy' field
     _parser.recv("+IPD,%d,%d:%s %s %s",&linkId,&ipdLen,requestType,request,dummy);
     return request;
 }
@@ -212,13 +197,16 @@
 
 int8_t ESP8266::getRSSI()
 {
+    int previous_timeout = _parser._timeout; // get current ESP timeout
+    setTimeout(5000);
     _parser.send("AT+CWLAPOPT=1,4");    // get current connection
     _parser.recv("OK");    
     int8_t rssi;
     if (!(_parser.send("AT+CWLAP=\"%s\"", _ssid)
         && _parser.recv("+CWLAP:(%d)", &rssi)
         && _parser.recv("OK"))) {
-    } 
+    }
+    setTimeout(previous_timeout);   // restore previous ESP timeout 
     return rssi;
 }
 
@@ -240,22 +228,22 @@
     packetBuffer[13] = 0x4E;
     packetBuffer[14] = 49;
     packetBuffer[15] = 52;
- 
+    int previous_timeout = _parser._timeout; // get current ESP timeout
     uint32_t recv_size = 0;
     int tries1 = 10;
     while ((recv_size != NTP_PACKET_SIZE) && (tries1 > 0)){
         tries1--;
-        setTimeout(1000);        
+        setTimeout(2000);        
         open("UDP", 1, NTPpool, 123);
         setTimeout(100);
         send(1, packetBuffer, NTP_PACKET_SIZE);
-        int tries2 = 100;
+        int tries2 = 50;
         while ((recv_size != NTP_PACKET_SIZE) && (tries2 > 0)){
             tries2--;
             recv_size = recv(1, packetBuffer, NTP_PACKET_SIZE);
         }
     }
-    setTimeout(5000); //default
+    setTimeout(previous_timeout);   // restore previous ESP timeout
     close(1);
     if(recv_size==48){
         uint32_t secsSince1970=((packetBuffer[40]<<24)|(packetBuffer[41]<<16)|(packetBuffer[42]<<8)|packetBuffer[43])-NTP_OFFSET;