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.
Diff: ESP8266.cpp
- 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;