From a4963fe665f5bde9afa96fdb4b85d0f8ccbd2250 Mon Sep 17 00:00:00 2001 From: "Jeremy Ruhland (hatchery)" Date: Mon, 13 Apr 2015 17:18:36 -0700 Subject: [PATCH 1/5] adding feature to send data from flash memory --- ESP8266.cpp | 40 ++++++++++++++++++++++++++++++++++++++++ ESP8266.h | 23 +++++++++++++++++++++++ 2 files changed, 63 insertions(+) diff --git a/ESP8266.cpp b/ESP8266.cpp index 3811d8b..672f668 100644 --- a/ESP8266.cpp +++ b/ESP8266.cpp @@ -388,6 +388,16 @@ bool ESP8266::send(const uint8_t *buffer, uint32_t len) return sATCIPSENDSingle(buffer, len); } +bool ESP8266::sendFromFlash(uint8_t mux_id, const uint8_t *buffer, uint32_t len) +{ + return sATCIPSENDMultipleFromFlash(mux_id, buffer, len); +} + +bool ESP8266::sendFromFlash(const uint8_t *buffer, uint32_t len) +{ + return sATCIPSENDSingleFromFlash(buffer, len); +} + bool ESP8266::send(uint8_t mux_id, const uint8_t *buffer, uint32_t len) { return sATCIPSENDMultiple(mux_id, buffer, len); @@ -1191,6 +1201,36 @@ bool ESP8266::sATCIPSENDMultiple(uint8_t mux_id, const uint8_t *buffer, uint32_t } return false; } +bool ESP8266::sATCIPSENDSingleFromFlash(const uint8_t *buffer, uint32_t len) +{ + rx_empty(); + m_puart->print("AT+CIPSEND="); + m_puart->println(len); + if (recvFind(">", 5000)) { + rx_empty(); + for (uint32_t i = 0; i < len; i++) { + m_puart->write(pgm_read_byte(buffer[i])); + } + return recvFind("SEND OK", 10000); + } + return false; +} +bool ESP8266::sATCIPSENDMultipleFromFlash(uint8_t mux_id, const uint8_t *buffer, uint32_t len) +{ + rx_empty(); + m_puart->print("AT+CIPSEND="); + m_puart->print(mux_id); + m_puart->print(","); + m_puart->println(len); + if (recvFind(">", 5000)) { + rx_empty(); + for (uint32_t i = 0; i < len; i++) { + m_puart->write(pgm_read_byte(buffer[i])); + } + return recvFind("SEND OK", 10000); + } + return false; +} bool ESP8266::sATCIPCLOSEMulitple(uint8_t mux_id) { String data; diff --git a/ESP8266.h b/ESP8266.h index 52c5a12..b9d064b 100644 --- a/ESP8266.h +++ b/ESP8266.h @@ -556,6 +556,27 @@ class ESP8266 { */ bool send(uint8_t mux_id, const uint8_t *buffer, uint32_t len); + /** + * Send data based on TCP or UDP builded already in single mode. + * + * @param buffer - the buffer of data to send from flash memeory. + * @param len - the length of data to send. + * @retval true - success. + * @retval false - failure. + */ + bool sendFromFlash(const uint8_t *buffer, uint32_t len); + + /** + * Send data based on one of TCP or UDP builded already in multiple mode. + * + * @param mux_id - the identifier of this TCP(available value: 0 - 4). + * @param buffer - the buffer of data to send from flash memeory. + * @param len - the length of data to send. + * @retval true - success. + * @retval false - failure. + */ + bool sendFromFlash(uint8_t mux_id, const uint8_t *buffer, uint32_t len); + /** * Receive data from TCP or UDP builded already in single mode. * @@ -672,6 +693,8 @@ class ESP8266 { bool sATCIPSTARTMultiple(uint8_t mux_id, String type, String addr, uint32_t port); bool sATCIPSENDSingle(const uint8_t *buffer, uint32_t len); bool sATCIPSENDMultiple(uint8_t mux_id, const uint8_t *buffer, uint32_t len); + bool sATCIPSENDSingleFromFlash(const uint8_t *buffer, uint32_t len); + bool sATCIPSENDMultipleFromFlash(uint8_t mux_id, const uint8_t *buffer, uint32_t len); bool sATCIPCLOSEMulitple(uint8_t mux_id); bool eATCIPCLOSESingle(void); bool eATCIFSR(String &list); From 1f01710f8a46d7991bc6c6789d4ccac741a70f84 Mon Sep 17 00:00:00 2001 From: "Jeremy Ruhland (hatchery)" Date: Mon, 13 Apr 2015 20:01:37 -0700 Subject: [PATCH 2/5] fixed dereferencing bug --- ESP8266.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/ESP8266.cpp b/ESP8266.cpp index 672f668..c3e98ed 100644 --- a/ESP8266.cpp +++ b/ESP8266.cpp @@ -19,6 +19,7 @@ * THE SOFTWARE. */ #include "ESP8266.h" +#include #define LOG_OUTPUT_DEBUG (1) #define LOG_OUTPUT_DEBUG_PREFIX (1) @@ -1209,7 +1210,7 @@ bool ESP8266::sATCIPSENDSingleFromFlash(const uint8_t *buffer, uint32_t len) if (recvFind(">", 5000)) { rx_empty(); for (uint32_t i = 0; i < len; i++) { - m_puart->write(pgm_read_byte(buffer[i])); + m_puart->write((char) pgm_read_byte(&buffer[i])); } return recvFind("SEND OK", 10000); } @@ -1225,7 +1226,7 @@ bool ESP8266::sATCIPSENDMultipleFromFlash(uint8_t mux_id, const uint8_t *buffer, if (recvFind(">", 5000)) { rx_empty(); for (uint32_t i = 0; i < len; i++) { - m_puart->write(pgm_read_byte(buffer[i])); + m_puart->write((char) pgm_read_byte(&buffer[i])); } return recvFind("SEND OK", 10000); } From c9c2db911f92df4894d21744d7f611fc2d691505 Mon Sep 17 00:00:00 2001 From: "Jeremy Ruhland (teller)" Date: Tue, 14 Apr 2015 17:36:29 -0700 Subject: [PATCH 3/5] Put a bunch of const strings into program memory to keep them out of ram --- ESP8266.cpp | 210 ++++++++++++++++++++++++++-------------------------- 1 file changed, 105 insertions(+), 105 deletions(-) diff --git a/ESP8266.cpp b/ESP8266.cpp index 672f668..17ac119 100644 --- a/ESP8266.cpp +++ b/ESP8266.cpp @@ -602,14 +602,14 @@ bool ESP8266::recvFindAndFilter(String target, String begin, String end, String bool ESP8266::eAT(void) { rx_empty(); - m_puart->println("AT"); + m_puart->println(F("AT")); return recvFind("OK"); } bool ESP8266::eATRST(void) { rx_empty(); - m_puart->println("AT+RST"); + m_puart->println(F("AT+RST")); return recvFind("OK"); } @@ -617,23 +617,23 @@ bool ESP8266::eATGMR(String &version) { rx_empty(); delay(3000); - m_puart->println("AT+GMR"); + m_puart->println(F("AT+GMR")); return recvFindAndFilter("OK", "\r\r\n", "\r\n\r\nOK", version,10000); } bool ESP8266::eATGSLP(uint32_t time) { rx_empty(); - m_puart->print("AT+GSLP="); + m_puart->print(F("AT+GSLP=")); m_puart->println(time); - return recvFind("OK"); + return recvFind(F("OK")); } bool ESP8266::eATE(uint8_t mode) { rx_empty(); - m_puart->print("ATE"); + m_puart->print(F("ATE")); m_puart->println(mode); return recvFind("OK"); } @@ -641,7 +641,7 @@ bool ESP8266::eATE(uint8_t mode) bool ESP8266::eATRESTORE(void) { rx_empty(); - m_puart->println("AT+RESTORE"); + m_puart->println(F("AT+RESTORE")); return recvFind("OK"); } @@ -654,23 +654,23 @@ bool ESP8266::eATSETUART(uint32_t baudrate,uint8_t pattern) } switch(pattern){ case 1: - m_puart->print("AT+UART="); + m_puart->print(F("AT+UART=")); break; case 2: - m_puart->print("AT+UART_CUR="); + m_puart->print(F("AT+UART_CUR=")); break; case 3: - m_puart->print("AT+UART_DEF="); + m_puart->print(F("AT+UART_DEF=")); break; } m_puart->print(baudrate); - m_puart->print(","); + m_puart->print(F(",")); m_puart->print(8); - m_puart->print(","); + m_puart->print(F(",")); m_puart->print(1); - m_puart->print(","); + m_puart->print(F(",")); m_puart->print(0); - m_puart->print(","); + m_puart->print(F(",")); m_puart->println(0); if(recvFind("OK",5000)){ @@ -695,13 +695,13 @@ bool ESP8266::qATCWMODE(uint8_t *mode,uint8_t pattern) switch(pattern) { case 1 : - m_puart->println("AT+CWMODE_DEF?"); + m_puart->println(F("AT+CWMODE_DEF?")); break; case 2: - m_puart->println("AT+CWMODE_CUR?"); + m_puart->println(F("AT+CWMODE_CUR?")); break; default: - m_puart->println("AT+CWMODE?"); + m_puart->println(F("AT+CWMODE?")); } ret = recvFindAndFilter("OK", ":", "\r\n\r\nOK", str_mode); if (ret) { @@ -714,7 +714,7 @@ bool ESP8266::qATCWMODE(uint8_t *mode,uint8_t pattern) bool ESP8266::eATCWMODE(String &list) { rx_empty(); - m_puart->println("AT+CWMODE=?"); + m_puart->println(F("AT+CWMODE=?")); return recvFindAndFilter("OK", "+CWMODE:(", ")\r\n\r\nOK", list); } @@ -728,13 +728,13 @@ bool ESP8266::sATCWMODE(uint8_t mode,uint8_t pattern) switch(pattern) { case 1 : - m_puart->print("AT+CWMODE_DEF="); + m_puart->print(F("AT+CWMODE_DEF=")); break; case 2: - m_puart->print("AT+CWMODE_CUR="); + m_puart->print(F("AT+CWMODE_CUR=")); break; default: - m_puart->print("AT+CWMODE="); + m_puart->print(F("AT+CWMODE=")); } m_puart->println(mode); data = recvString("OK", "no change"); @@ -757,13 +757,13 @@ bool ESP8266::qATCWJAP(String &ssid,uint8_t pattern) switch(pattern) { case 1 : - m_puart->println("AT+CWJAP_DEF?"); + m_puart->println(F("AT+CWJAP_DEF?")); break; case 2: - m_puart->println("AT+CWJAP_CUR?"); + m_puart->println(F("AT+CWJAP_CUR?")); break; default: - m_puart->println("AT+CWJAP?"); + m_puart->println(F("AT+CWJAP?")); } ssid = recvString("OK", "No AP"); if (ssid.indexOf("OK") != -1 || ssid.indexOf("No AP") != -1) { @@ -783,20 +783,20 @@ bool ESP8266::sATCWJAP(String ssid, String pwd,uint8_t pattern) switch(pattern) { case 1 : - m_puart->print("AT+CWJAP_DEF=\""); + m_puart->print(F("AT+CWJAP_DEF=\"")); break; case 2: - m_puart->print("AT+CWJAP_CUR=\""); + m_puart->print(F("AT+CWJAP_CUR=\"")); break; default: - m_puart->print("AT+CWJAP=\""); + m_puart->print(F("AT+CWJAP=\"")); } m_puart->print(ssid); - m_puart->print("\",\""); + m_puart->print(F("\",\"")); m_puart->print(pwd); - m_puart->println("\""); + m_puart->println(F("\"")); data = recvString("OK", "FAIL", 10000); if (data.indexOf("OK") != -1) { @@ -809,7 +809,7 @@ bool ESP8266::eATCWLAP(String &list) { String data; rx_empty(); - m_puart->println("AT+CWLAP"); + m_puart->println(F("AT+CWLAP")); return recvFindAndFilter("OK", "\r\r\n", "\r\n\r\nOK", list, 15000); } @@ -820,7 +820,7 @@ bool ESP8266::eATCWQAP(void) { String data; rx_empty(); - m_puart->println("AT+CWQAP"); + m_puart->println(F("AT+CWQAP")); return recvFind("OK"); } @@ -834,14 +834,14 @@ bool ESP8266::qATCWSAP(String &List,uint8_t pattern) switch(pattern) { case 1 : - m_puart->println("AT+CWSAP_DEF?"); + m_puart->println(F("AT+CWSAP_DEF?")); break; case 2: - m_puart->println("AT+CWSAP_CUR?"); + m_puart->println(F("AT+CWSAP_CUR?")); break; default: - m_puart->println("AT+CWSAP?"); + m_puart->println(F("AT+CWSAP?")); } return recvFindAndFilter("OK", "\r\r\n", "\r\n\r\nOK", List,10000); @@ -856,22 +856,22 @@ bool ESP8266::sATCWSAP(String ssid, String pwd, uint8_t chl, uint8_t ecn,uint8_t rx_empty(); switch(pattern){ case 1 : - m_puart->print("AT+CWSAP_DEF=\""); + m_puart->print(F("AT+CWSAP_DEF=\"")); break; case 2: - m_puart->print("AT+CWSAP_CUR=\""); + m_puart->print(F("AT+CWSAP_CUR=\"")); break; default: - m_puart->print("AT+CWSAP=\""); + m_puart->print(F("AT+CWSAP=\"")); } m_puart->print(ssid); - m_puart->print("\",\""); + m_puart->print(F("\",\"")); m_puart->print(pwd); - m_puart->print("\","); + m_puart->print(F("\",")); m_puart->print(chl); - m_puart->print(","); + m_puart->print(F(",")); m_puart->println(ecn); data = recvString("OK", "ERROR", 5000); @@ -885,7 +885,7 @@ bool ESP8266::eATCWLIF(String &list) { String data; rx_empty(); - m_puart->println("AT+CWLIF"); + m_puart->println(F("AT+CWLIF")); return recvFindAndFilter("OK", "\r\r\n", "\r\n\r\nOK", list); } @@ -898,13 +898,13 @@ bool ESP8266::qATCWDHCP(String &List,uint8_t pattern) switch(pattern) { case 1 : - m_puart->println("AT+CWDHCP_DEF?"); + m_puart->println(F("AT+CWDHCP_DEF?")); break; case 2: - m_puart->println("AT+CWDHCP_CUR?"); + m_puart->println(F("AT+CWDHCP_CUR?")); break; default: - m_puart->println("AT+CWDHCP?"); + m_puart->println(F("AT+CWDHCP?")); } return recvFindAndFilter("OK", "\r\r\n", "\r\nOK", List,10000); @@ -921,18 +921,18 @@ bool ESP8266::sATCWDHCP(uint8_t mode, uint8_t en, uint8_t pattern) rx_empty(); switch(pattern){ case 1 : - m_puart->print("AT+CWDHCP_DEF="); + m_puart->print(F("AT+CWDHCP_DEF=")); break; case 2: - m_puart->print("AT+CWDHCP_CUR="); + m_puart->print(F("AT+CWDHCP_CUR=")); break; default: - m_puart->print("AT+CWDHCP="); + m_puart->print(F("AT+CWDHCP=")); } m_puart->print(mode); - m_puart->print(","); + m_puart->print(F(",")); m_puart->println(en); data = recvString("OK", "ERROR", 2000); @@ -950,7 +950,7 @@ bool ESP8266::eATCWAUTOCONN(uint8_t en) if(en>1||en<0){ return false; } - m_puart->print("AT+CWAUTOCONN="); + m_puart->print(F("AT+CWAUTOCONN=")); m_puart->println(en); return recvFind("OK"); @@ -965,14 +965,14 @@ bool ESP8266::qATCIPSTAMAC(String &mac,uint8_t pattern) } switch(pattern){ case 1 : - m_puart->println("AT+CIPSTAMAC_DEF?"); + m_puart->println(F("AT+CIPSTAMAC_DEF?")); break; case 2: - m_puart->println("AT+CIPSTAMAC_CUR?"); + m_puart->println(F("AT+CIPSTAMAC_CUR?")); break; default: - m_puart->println("AT+CIPSTAMAC?"); + m_puart->println(F("AT+CIPSTAMAC?")); } return recvFindAndFilter("OK", "\r\r\n", "\r\n\r\nOK", mac,2000); @@ -990,19 +990,19 @@ bool ESP8266::eATCIPSTAMAC(String mac,uint8_t pattern) } switch(pattern){ case 1 : - m_puart->print("AT+CIPSTAMAC_DEF="); + m_puart->print(F("AT+CIPSTAMAC_DEF=")); break; case 2: - m_puart->print("AT+CIPSTAMAC_CUR="); + m_puart->print(F("AT+CIPSTAMAC_CUR=")); break; default: - m_puart->print("AT+CIPSTAMAC="); + m_puart->print(F("AT+CIPSTAMAC=")); } - m_puart->print("\""); + m_puart->print(F("\"")); m_puart->print(mac); - m_puart->println("\""); + m_puart->println(F("\"")); return recvFind("OK"); } @@ -1016,14 +1016,14 @@ bool ESP8266::qATCIPSTAIP(String &ip,uint8_t pattern) } switch(pattern){ case 1 : - m_puart->println("AT+CIPSTA_DEF?"); + m_puart->println(F("AT+CIPSTA_DEF?")); break; case 2: - m_puart->println("AT+CIPSTA_CUR?"); + m_puart->println(F("AT+CIPSTA_CUR?")); break; default: - m_puart->println("AT+CIPSTA?"); + m_puart->println(F("AT+CIPSTA?")); } return recvFindAndFilter("OK", "\r\r\n", "\r\n\r\nOK", ip,2000); @@ -1039,23 +1039,23 @@ bool ESP8266::eATCIPSTAIP(String ip,String gateway,String netmask,uint8_t patter } switch(pattern){ case 1 : - m_puart->print("AT+CIPSTA_DEF="); + m_puart->print(F("AT+CIPSTA_DEF=")); break; case 2: - m_puart->print("AT+CIPSTA_CUR="); + m_puart->print(F("AT+CIPSTA_CUR=")); break; default: - m_puart->print("AT+CIPSTA="); + m_puart->print(F("AT+CIPSTA=")); } - m_puart->print("\""); + m_puart->print(F("\"")); m_puart->print(ip); - m_puart->print("\",\""); + m_puart->print(F("\",\"")); m_puart->print(gateway); - m_puart->print("\",\""); + m_puart->print(F("\",\"")); m_puart->print(netmask); - m_puart->println("\""); + m_puart->println(F("\"")); return recvFind("OK"); } @@ -1070,14 +1070,14 @@ bool ESP8266::qATCIPAP(String &ip,uint8_t pattern) } switch(pattern){ case 1 : - m_puart->println("AT+CIPAP_DEF?"); + m_puart->println(F("AT+CIPAP_DEF?")); break; case 2: - m_puart->println("AT+CIPAP_CUR?"); + m_puart->println(F("AT+CIPAP_CUR?")); break; default: - m_puart->println("AT+CIPAP?"); + m_puart->println(F("AT+CIPAP?")); } return recvFindAndFilter("OK", "\r\r\n", "\r\n\r\nOK", ip,2000); @@ -1094,19 +1094,19 @@ bool ESP8266::eATCIPAP(String ip,uint8_t pattern) } switch(pattern){ case 1 : - m_puart->print("AT+CIPAP_DEF="); + m_puart->print(F("AT+CIPAP_DEF=")); break; case 2: - m_puart->print("AT+CIPAP_CUR="); + m_puart->print(F("AT+CIPAP_CUR=")); break; default: - m_puart->print("AT+CIPAP="); + m_puart->print(F("AT+CIPAP=")); } - m_puart->print("\""); + m_puart->print(F("\"")); m_puart->print(ip); - m_puart->println("\""); + m_puart->println(F("\"")); return recvFind("OK"); } @@ -1115,7 +1115,7 @@ bool ESP8266::eATCIPAP(String ip,uint8_t pattern) bool ESP8266::eCWSTARTSMART(uint8_t type) { rx_empty(); - m_puart->print("AT+CWSTARTSMART="); + m_puart->print(F("AT+CWSTARTSMART=")); m_puart->println(type); return recvFind("OK"); } @@ -1123,7 +1123,7 @@ bool ESP8266::eCWSTARTSMART(uint8_t type) bool ESP8266::eCWSTOPSMART(void) { rx_empty(); - m_puart->println("AT+CWSTOPSMART"); + m_puart->println(F("AT+CWSTOPSMART")); return recvFind("OK"); } @@ -1132,18 +1132,18 @@ bool ESP8266::eATCIPSTATUS(String &list) String data; delay(100); rx_empty(); - m_puart->println("AT+CIPSTATUS"); + m_puart->println(F("AT+CIPSTATUS")); return recvFindAndFilter("OK", "\r\r\n", "\r\n\r\nOK", list); } bool ESP8266::sATCIPSTARTSingle(String type, String addr, uint32_t port) { String data; rx_empty(); - m_puart->print("AT+CIPSTART=\""); + m_puart->print(F("AT+CIPSTART=\"")); m_puart->print(type); - m_puart->print("\",\""); + m_puart->print(F("\",\"")); m_puart->print(addr); - m_puart->print("\","); + m_puart->print(F("\",")); m_puart->println(port); data = recvString("OK", "ERROR", "ALREADY CONNECT", 10000); @@ -1156,13 +1156,13 @@ bool ESP8266::sATCIPSTARTMultiple(uint8_t mux_id, String type, String addr, uint { String data; rx_empty(); - m_puart->print("AT+CIPSTART="); + m_puart->print(F("AT+CIPSTART=")); m_puart->print(mux_id); - m_puart->print(",\""); + m_puart->print(F(",\"")); m_puart->print(type); - m_puart->print("\",\""); + m_puart->print(F("\",\"")); m_puart->print(addr); - m_puart->print("\","); + m_puart->print(F("\",")); m_puart->println(port); data = recvString("OK", "ERROR", "ALREADY CONNECT", 10000); @@ -1174,7 +1174,7 @@ bool ESP8266::sATCIPSTARTMultiple(uint8_t mux_id, String type, String addr, uint bool ESP8266::sATCIPSENDSingle(const uint8_t *buffer, uint32_t len) { rx_empty(); - m_puart->print("AT+CIPSEND="); + m_puart->print(F("AT+CIPSEND=")); m_puart->println(len); if (recvFind(">", 5000)) { rx_empty(); @@ -1188,9 +1188,9 @@ bool ESP8266::sATCIPSENDSingle(const uint8_t *buffer, uint32_t len) bool ESP8266::sATCIPSENDMultiple(uint8_t mux_id, const uint8_t *buffer, uint32_t len) { rx_empty(); - m_puart->print("AT+CIPSEND="); + m_puart->print(F("AT+CIPSEND=")); m_puart->print(mux_id); - m_puart->print(","); + m_puart->print(F(",")); m_puart->println(len); if (recvFind(">", 5000)) { rx_empty(); @@ -1204,7 +1204,7 @@ bool ESP8266::sATCIPSENDMultiple(uint8_t mux_id, const uint8_t *buffer, uint32_t bool ESP8266::sATCIPSENDSingleFromFlash(const uint8_t *buffer, uint32_t len) { rx_empty(); - m_puart->print("AT+CIPSEND="); + m_puart->print(F("AT+CIPSEND=")); m_puart->println(len); if (recvFind(">", 5000)) { rx_empty(); @@ -1218,9 +1218,9 @@ bool ESP8266::sATCIPSENDSingleFromFlash(const uint8_t *buffer, uint32_t len) bool ESP8266::sATCIPSENDMultipleFromFlash(uint8_t mux_id, const uint8_t *buffer, uint32_t len) { rx_empty(); - m_puart->print("AT+CIPSEND="); + m_puart->print(F("AT+CIPSEND=")); m_puart->print(mux_id); - m_puart->print(","); + m_puart->print(F(",")); m_puart->println(len); if (recvFind(">", 5000)) { rx_empty(); @@ -1235,7 +1235,7 @@ bool ESP8266::sATCIPCLOSEMulitple(uint8_t mux_id) { String data; rx_empty(); - m_puart->print("AT+CIPCLOSE="); + m_puart->print(F("AT+CIPCLOSE=")); m_puart->println(mux_id); data = recvString("OK", "link is not", 5000); @@ -1247,20 +1247,20 @@ bool ESP8266::sATCIPCLOSEMulitple(uint8_t mux_id) bool ESP8266::eATCIPCLOSESingle(void) { rx_empty(); - m_puart->println("AT+CIPCLOSE"); + m_puart->println(F("AT+CIPCLOSE")); return recvFind("OK", 5000); } bool ESP8266::eATCIFSR(String &list) { rx_empty(); - m_puart->println("AT+CIFSR"); + m_puart->println(F("AT+CIFSR")); return recvFindAndFilter("OK", "\r\r\n", "\r\n\r\nOK", list); } bool ESP8266::sATCIPMUX(uint8_t mode) { String data; rx_empty(); - m_puart->print("AT+CIPMUX="); + m_puart->print(F("AT+CIPMUX=")); m_puart->println(mode); data = recvString("OK", "Link is builded"); @@ -1274,7 +1274,7 @@ bool ESP8266::sATCIPSERVER(uint8_t mode, uint32_t port) String data; if (mode) { rx_empty(); - m_puart->print("AT+CIPSERVER=1,"); + m_puart->print(F("AT+CIPSERVER=1,")); m_puart->println(port); data = recvString("OK", "no change"); @@ -1284,7 +1284,7 @@ bool ESP8266::sATCIPSERVER(uint8_t mode, uint32_t port) return false; } else { rx_empty(); - m_puart->println("AT+CIPSERVER=0"); + m_puart->println(F("AT+CIPSERVER=0")); return recvFind("\r\r\n"); } } @@ -1297,7 +1297,7 @@ bool ESP8266::sATCIPMODE(uint8_t mode) return false; } rx_empty(); - m_puart->print("AT+CIPMODE="); + m_puart->print(F("AT+CIPMODE=")); m_puart->println(mode); data = recvString("OK", "Link is builded",2000); @@ -1315,11 +1315,11 @@ bool ESP8266::eATSAVETRANSLINK(uint8_t mode,String ip,uint32_t port) String data; rx_empty(); - m_puart->print("AT+SAVETRANSLINK="); + m_puart->print(F("AT+SAVETRANSLINK=")); m_puart->print(mode); - m_puart->print(",\""); + m_puart->print(F(",\"")); m_puart->print(ip); - m_puart->print("\","); + m_puart->print(F("\",")); m_puart->println(port); data = recvString("OK", "ERROR",2000); if (data.indexOf("OK") != -1 ) { @@ -1333,10 +1333,10 @@ bool ESP8266::eATSAVETRANSLINK(uint8_t mode,String ip,uint32_t port) bool ESP8266::eATPING(String ip) { rx_empty(); - m_puart->print("AT+PING="); - m_puart->print("\""); + m_puart->print(F("AT+PING=")); + m_puart->print(F("\"")); m_puart->print(ip); - m_puart->println("\""); + m_puart->println(F("\"")); return recvFind("OK",2000); } @@ -1345,7 +1345,7 @@ bool ESP8266::eATPING(String ip) bool ESP8266::sATCIPSTO(uint32_t timeout) { rx_empty(); - m_puart->print("AT+CIPSTO="); + m_puart->print(F("AT+CIPSTO=")); m_puart->println(timeout); return recvFind("OK"); } From 18f767e584bc779c30312be91755be0e926bb53f Mon Sep 17 00:00:00 2001 From: "Jeremy Ruhland (hatchery)" Date: Wed, 15 Apr 2015 01:08:05 -0700 Subject: [PATCH 4/5] Updated api list with new functions --- README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/README.md b/README.md index ba78440..6089261 100644 --- a/README.md +++ b/README.md @@ -85,6 +85,10 @@ will be useful for Arduino lovers. bool send (const uint8_t *buffer, uint32_t len) : Send data based on TCP or UDP builded already in single mode. bool send (uint8_t mux_id, const uint8_t *buffer, uint32_t len) : Send data based on one of TCP or UDP builded already in multiple mode. + + bool sendFromFlash (const uint8_t *buffer, uint32_t len) : Send data based on TCP or UDP builded already in single mode. + + bool sendFromFlash (uint8_t mux_id, const uint8_t *buffer, uint32_t len) : Send data based on one of TCP or UDP builded already in multiple mode. uint32_t recv (uint8_t *buffer, uint32_t buffer_size, uint32_t timeout=1000) : Receive data from TCP or UDP builded already in single mode. From 7af8fa805ee13be36f23d4e4ddcb5a450333054b Mon Sep 17 00:00:00 2001 From: "Jeremy Ruhland (hatchery)" Date: Wed, 15 Apr 2015 01:22:29 -0700 Subject: [PATCH 5/5] removed improper use of F() macro --- ESP8266.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ESP8266.cpp b/ESP8266.cpp index b163e51..4821047 100644 --- a/ESP8266.cpp +++ b/ESP8266.cpp @@ -627,7 +627,7 @@ bool ESP8266::eATGSLP(uint32_t time) rx_empty(); m_puart->print(F("AT+GSLP=")); m_puart->println(time); - return recvFind(F("OK")); + return recvFind("OK"); }