Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
ESP8266.cpp
00001 /** 00002 * @file ESP8266.cpp 00003 * @brief The implementation of class ESP8266. 00004 * @author Wu Pengfei<pengfei.wu@itead.cc> 00005 * @date 2015.02 00006 * 00007 * @par Copyright: 00008 * Copyright (c) 2015 ITEAD Intelligent Systems Co., Ltd. \n\n 00009 * This program is free software; you can redistribute it and/or 00010 * modify it under the terms of the GNU General Public License as 00011 * published by the Free Software Foundation; either version 2 of 00012 * the License, or (at your option) any later version. \n\n 00013 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 00014 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 00015 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 00016 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 00017 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 00018 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 00019 * THE SOFTWARE. 00020 */ 00021 #include "ESP8266_Lib.h" 00022 00023 Timer g_Timer; 00024 00025 #ifdef ESP8266_USE_SOFTWARE_SERIAL 00026 ESP8266::ESP8266(SoftwareSerial &uart): m_puart(&uart) 00027 { 00028 g_Timer.start(); 00029 m_onData = NULL; 00030 m_onDataPtr = NULL; 00031 } 00032 #else 00033 ESP8266::ESP8266(HardwareSerial &uart): m_puart(&uart) 00034 { 00035 g_Timer.start(); 00036 m_onData = NULL; 00037 m_onDataPtr = NULL; 00038 } 00039 #endif 00040 00041 bool ESP8266::kick(void) 00042 { 00043 LOG_ENTER; 00044 return eAT(); 00045 } 00046 00047 bool ESP8266::restart(void) 00048 { 00049 LOG_ENTER; 00050 unsigned long start; 00051 if (eATRST()) { 00052 //delay(2000); 00053 wait_ms(2000); 00054 //start = millis(); 00055 start = g_Timer.read_ms(); 00056 while (g_Timer.read_ms() - start < 3000) { 00057 if (eAT()) { 00058 //delay(1500); /* Waiting for stable */ 00059 wait_ms(1500); 00060 return true; 00061 } 00062 //delay(100); 00063 wait_ms(100); 00064 } 00065 } 00066 return false; 00067 } 00068 00069 String ESP8266::getVersion(void) 00070 { 00071 LOG_ENTER; 00072 String version; 00073 eATGMR(version); 00074 return version; 00075 } 00076 00077 bool ESP8266::setEcho(uint8_t mode) 00078 { 00079 LOG_ENTER; 00080 return eATE(mode); 00081 } 00082 00083 bool ESP8266::restore(void) 00084 { 00085 LOG_ENTER; 00086 return eATRESTORE(); 00087 } 00088 00089 bool ESP8266::setUart(uint32_t baudrate,uint8_t pattern) 00090 { 00091 LOG_ENTER; 00092 return eATSETUART(baudrate,pattern); 00093 } 00094 00095 bool ESP8266::deepSleep(uint32_t time) 00096 { 00097 LOG_ENTER; 00098 return eATGSLP(time); 00099 } 00100 00101 bool ESP8266::setOprToStation(uint8_t pattern1,uint8_t pattern2) 00102 { 00103 LOG_ENTER; 00104 uint8_t mode; 00105 if (!qATCWMODE(&mode,pattern1)) { 00106 return false; 00107 } 00108 if (mode == 1) { 00109 return true; 00110 } else { 00111 if (sATCWMODE(1,pattern2)) { 00112 return true; 00113 } else { 00114 return false; 00115 } 00116 } 00117 } 00118 00119 String ESP8266::getWifiModeList(void) 00120 { 00121 LOG_ENTER; 00122 String list; 00123 eATCWMODE(list); 00124 return list; 00125 } 00126 00127 bool ESP8266::setOprToSoftAP(uint8_t pattern1,uint8_t pattern2) 00128 { 00129 LOG_ENTER; 00130 uint8_t mode; 00131 if (!qATCWMODE(&mode,pattern1)) { 00132 return false; 00133 } 00134 if (mode == 2) { 00135 return true; 00136 } else { 00137 if (sATCWMODE(2,pattern2) ) { 00138 return true; 00139 } else { 00140 return false; 00141 } 00142 } 00143 } 00144 00145 bool ESP8266::setOprToStationSoftAP(uint8_t pattern1,uint8_t pattern2) 00146 { 00147 LOG_ENTER; 00148 uint8_t mode; 00149 if (!qATCWMODE(&mode,pattern1)) { 00150 return false; 00151 } 00152 if (mode == 3) { 00153 return true; 00154 } else { 00155 if (sATCWMODE(3,pattern2) ) { 00156 return true; 00157 } else { 00158 return false; 00159 } 00160 } 00161 } 00162 00163 uint8_t ESP8266::getOprMode(uint8_t pattern1) 00164 { 00165 LOG_ENTER; 00166 uint8_t mode; 00167 if (!qATCWMODE(&mode,pattern1)) { 00168 return 0; 00169 } else { 00170 return mode; 00171 } 00172 } 00173 00174 String ESP8266::getNowConecAp(uint8_t pattern) 00175 { 00176 LOG_ENTER; 00177 String ssid; 00178 qATCWJAP(ssid,pattern); 00179 return ssid; 00180 } 00181 00182 String ESP8266::getAPList(void) 00183 { 00184 LOG_ENTER; 00185 String list; 00186 eATCWLAP(list); 00187 return list; 00188 } 00189 00190 bool ESP8266::joinAP(String ssid, String pwd,uint8_t pattern) 00191 { 00192 LOG_ENTER; 00193 return sATCWJAP(ssid, pwd,pattern); 00194 } 00195 00196 bool ESP8266::leaveAP(void) 00197 { 00198 LOG_ENTER; 00199 return eATCWQAP(); 00200 } 00201 00202 String ESP8266::getSoftAPParam(uint8_t pattern) 00203 { 00204 LOG_ENTER; 00205 String list; 00206 qATCWSAP(list,pattern); 00207 return list; 00208 } 00209 00210 bool ESP8266::setSoftAPParam(String ssid, String pwd, uint8_t chl, uint8_t ecn,uint8_t pattern) 00211 { 00212 LOG_ENTER; 00213 return sATCWSAP(ssid, pwd, chl, ecn,pattern); 00214 } 00215 00216 String ESP8266::getJoinedDeviceIP(void) 00217 { 00218 LOG_ENTER; 00219 String list; 00220 eATCWLIF(list); 00221 return list; 00222 } 00223 00224 String ESP8266::getDHCP(uint8_t pattern) 00225 { 00226 LOG_ENTER; 00227 String dhcp; 00228 qATCWDHCP(dhcp,pattern); 00229 return dhcp; 00230 } 00231 00232 bool ESP8266::setDHCP(uint8_t mode, uint8_t en, uint8_t pattern) 00233 { 00234 LOG_ENTER; 00235 return sATCWDHCP(mode, en, pattern); 00236 } 00237 00238 bool ESP8266::setAutoConnect(uint8_t en) 00239 { 00240 LOG_ENTER; 00241 return eATCWAUTOCONN(en); 00242 } 00243 00244 String ESP8266::getStationMac(uint8_t pattern) 00245 { 00246 LOG_ENTER; 00247 String mac; 00248 qATCIPSTAMAC(mac,pattern); 00249 return mac; 00250 } 00251 00252 bool ESP8266::setStationMac(String mac,uint8_t pattern) 00253 { 00254 LOG_ENTER; 00255 return eATCIPSTAMAC(mac,pattern); 00256 } 00257 00258 String ESP8266::getStationIp(uint8_t pattern) 00259 { 00260 LOG_ENTER; 00261 String ip; 00262 qATCIPSTAIP(ip,pattern); 00263 return ip; 00264 } 00265 00266 bool ESP8266::setStationIp(String ip,String gateway,String netmask,uint8_t pattern) 00267 { 00268 LOG_ENTER; 00269 return eATCIPSTAIP(ip,gateway,netmask,pattern); 00270 } 00271 00272 String ESP8266::getAPIp(uint8_t pattern) 00273 { 00274 LOG_ENTER; 00275 String ip; 00276 qATCIPAP(ip,pattern); 00277 return ip; 00278 } 00279 00280 bool ESP8266::setAPIp(String ip,uint8_t pattern) 00281 { 00282 LOG_ENTER; 00283 return eATCIPAP(ip,pattern); 00284 } 00285 00286 bool ESP8266::startSmartConfig(uint8_t type) 00287 { 00288 LOG_ENTER; 00289 return eCWSTARTSMART(type); 00290 } 00291 00292 bool ESP8266::stopSmartConfig(void) 00293 { 00294 LOG_ENTER; 00295 return eCWSTOPSMART(); 00296 } 00297 00298 00299 String ESP8266::getIPStatus(void) 00300 { 00301 LOG_ENTER; 00302 String list; 00303 eATCIPSTATUS(list); 00304 return list; 00305 } 00306 00307 String ESP8266::getLocalIP(void) 00308 { 00309 LOG_ENTER; 00310 String list; 00311 eATCIFSR(list); 00312 return list; 00313 } 00314 00315 bool ESP8266::enableMUX(void) 00316 { 00317 LOG_ENTER; 00318 return sATCIPMUX(1); 00319 } 00320 00321 bool ESP8266::disableMUX(void) 00322 { 00323 LOG_ENTER; 00324 return sATCIPMUX(0); 00325 } 00326 00327 bool ESP8266::createTCP(String addr, uint32_t port) 00328 { 00329 LOG_ENTER; 00330 return sATCIPSTARTSingle("TCP", addr, port); 00331 } 00332 00333 bool ESP8266::releaseTCP(void) 00334 { 00335 LOG_ENTER; 00336 return eATCIPCLOSESingle(); 00337 } 00338 00339 bool ESP8266::registerUDP(String addr, uint32_t port) 00340 { 00341 LOG_ENTER; 00342 return sATCIPSTARTSingle("UDP", addr, port); 00343 } 00344 00345 bool ESP8266::unregisterUDP(void) 00346 { 00347 LOG_ENTER; 00348 return eATCIPCLOSESingle(); 00349 } 00350 00351 bool ESP8266::createTCP(uint8_t mux_id, String addr, uint32_t port) 00352 { 00353 LOG_ENTER; 00354 return sATCIPSTARTMultiple(mux_id, "TCP", addr, port); 00355 } 00356 00357 bool ESP8266::releaseTCP(uint8_t mux_id) 00358 { 00359 LOG_ENTER; 00360 return sATCIPCLOSEMulitple(mux_id); 00361 } 00362 00363 bool ESP8266::registerUDP(uint8_t mux_id, String addr, uint32_t port) 00364 { 00365 LOG_ENTER; 00366 return sATCIPSTARTMultiple(mux_id, "UDP", addr, port); 00367 } 00368 00369 bool ESP8266::unregisterUDP(uint8_t mux_id) 00370 { 00371 LOG_ENTER; 00372 return sATCIPCLOSEMulitple(mux_id); 00373 } 00374 00375 bool ESP8266::setTCPServerTimeout(uint32_t timeout) 00376 { 00377 LOG_ENTER; 00378 return sATCIPSTO(timeout); 00379 } 00380 00381 bool ESP8266::startTCPServer(uint32_t port) 00382 { 00383 LOG_ENTER; 00384 if (sATCIPSERVER(1, port)) { 00385 return true; 00386 } 00387 return false; 00388 } 00389 00390 bool ESP8266::stopTCPServer(void) 00391 { 00392 LOG_ENTER; 00393 sATCIPSERVER(0); 00394 restart(); 00395 return false; 00396 } 00397 00398 bool ESP8266::setCIPMODE(uint8_t mode) 00399 { 00400 LOG_ENTER; 00401 return sATCIPMODE(mode); 00402 } 00403 00404 bool ESP8266::saveTransLink (uint8_t mode,String ip,uint32_t port) 00405 { 00406 LOG_ENTER; 00407 return eATSAVETRANSLINK(mode,ip,port); 00408 } 00409 00410 bool ESP8266::setPing(String ip) 00411 { 00412 LOG_ENTER; 00413 return eATPING(ip); 00414 } 00415 00416 00417 bool ESP8266::startServer(uint32_t port) 00418 { 00419 LOG_ENTER; 00420 return startTCPServer(port); 00421 } 00422 00423 bool ESP8266::stopServer(void) 00424 { 00425 LOG_ENTER; 00426 return stopTCPServer(); 00427 } 00428 00429 bool ESP8266::send(const uint8_t *buffer, uint32_t len) 00430 { 00431 LOG_ENTER; 00432 return sATCIPSENDSingle(buffer, len); 00433 } 00434 00435 bool ESP8266::sendFromFlash(uint8_t mux_id, const uint8_t *buffer, uint32_t len) 00436 { 00437 LOG_ENTER; 00438 return sATCIPSENDMultipleFromFlash(mux_id, buffer, len); 00439 } 00440 00441 bool ESP8266::sendFromFlash(const uint8_t *buffer, uint32_t len) 00442 { 00443 LOG_ENTER; 00444 return sATCIPSENDSingleFromFlash(buffer, len); 00445 } 00446 00447 bool ESP8266::send(uint8_t mux_id, const uint8_t *buffer, uint32_t len) 00448 { 00449 LOG_ENTER; 00450 return sATCIPSENDMultiple(mux_id, buffer, len); 00451 } 00452 00453 void ESP8266::run() 00454 { 00455 LOG_ENTER; 00456 rx_empty(); 00457 } 00458 00459 /*----------------------------------------------------------------------------*/ 00460 /* +IPD,<id>,<len>:<data> */ 00461 /* +IPD,<len>:<data> */ 00462 00463 uint32_t ESP8266::checkIPD(String& data) 00464 { 00465 //Serial.print("### check: "); 00466 //Serial.println(data); 00467 LOG_ENTER; 00468 int32_t index_PIPDcomma = -1; 00469 int32_t index_colon = -1; /* : */ 00470 int32_t index_comma = -1; /* , */ 00471 int32_t len = -1; 00472 int8_t id = -1; 00473 { 00474 // Just for easier diffing 00475 index_PIPDcomma = data.indexOf("+IPD,"); 00476 if (index_PIPDcomma != -1) { 00477 index_colon = data.indexOf(':', index_PIPDcomma + 5); 00478 if (index_colon != -1) { 00479 index_comma = data.indexOf(',', index_PIPDcomma + 5); 00480 /* +IPD,id,len:data */ 00481 if (index_comma != -1 && index_comma < index_colon) { 00482 id = data.substring(index_PIPDcomma + 5, index_comma).toInt(); 00483 if (id < 0 || id > 4) { 00484 return 0; 00485 } 00486 len = data.substring(index_comma + 1, index_colon).toInt(); 00487 if (len <= 0) { 00488 return 0; 00489 } 00490 } else { /* +IPD,len:data */ 00491 len = data.substring(index_PIPDcomma + 5, index_colon).toInt(); 00492 if (len <= 0) { 00493 return 0; 00494 } 00495 } 00496 if (m_onData) { 00497 m_onData(id, len, m_onDataPtr); 00498 } 00499 return len; 00500 } 00501 } 00502 } 00503 return 0; 00504 } 00505 00506 void ESP8266::rx_empty(void) 00507 { 00508 LOG_ENTER; 00509 String data; 00510 char a; 00511 unsigned long start = g_Timer.read_ms(); 00512 while (g_Timer.read_ms() - start < 10) { 00513 if (m_puart->readable()) { 00514 a = m_puart->getc(); 00515 if(a == '\0') continue; 00516 data += a; 00517 if (checkIPD(data)) { 00518 data = ""; 00519 } 00520 start = g_Timer.read_ms(); 00521 } 00522 } 00523 } 00524 00525 String ESP8266::recvString(String target, uint32_t timeout) 00526 { 00527 LOG_ENTER; 00528 //pc.printf("Enter recvString,2 param\r\n"); 00529 String data; 00530 char a; 00531 unsigned long start = g_Timer.read_ms(); 00532 while (g_Timer.read_ms() - start < timeout) { 00533 while(m_puart->readable() > 0) { 00534 a = m_puart->getc(); 00535 ESP8266_LOG("a=0x%02X ", a); 00536 if(a == '\0') continue; 00537 data += a; 00538 if (data.indexOf(target) != -1) { 00539 ESP8266_LOG("\r\ndata = %s\r\n", data.c_str()); 00540 //pc.printf("\r\ndata = %s\r\n", data.c_str()); 00541 return data; 00542 } else if (checkIPD(data)) { 00543 data = ""; 00544 } 00545 } 00546 } 00547 ESP8266_LOG("\r\n"); 00548 ESP8266_LOG("data1 = %s\r\n", data.c_str()); 00549 //pc.printf("data1 = %s\r\n", data.c_str()); 00550 return data; 00551 } 00552 00553 String ESP8266::recvString(String target1, String target2, uint32_t timeout) 00554 { 00555 LOG_ENTER; 00556 String data; 00557 char a; 00558 unsigned long start = g_Timer.read_ms(); 00559 while (g_Timer.read_ms() - start < timeout) { 00560 while(m_puart->readable() > 0) { 00561 a = m_puart->getc(); 00562 ESP8266_LOG("a=0x%02x ", a); 00563 if(a == '\0') continue; 00564 data += a; 00565 if (data.indexOf(target1) != -1) { 00566 ESP8266_LOG("\r\ndata2 = %s\r\n", data.c_str()); 00567 //pc.printf("data2 = %s\r\n", data.c_str()); 00568 return data; 00569 } else if (data.indexOf(target2) != -1) { 00570 ESP8266_LOG("\r\ndata3 = %s\r\n", data.c_str()); 00571 //pc.printf("data3 = %s\r\n", data.c_str()); 00572 return data; 00573 } else if (checkIPD(data)) { 00574 data = ""; 00575 } 00576 } 00577 } 00578 ESP8266_LOG("\r\ndata4 = %s\r\n", data.c_str()); 00579 //pc.printf("data4 = %s\r\n", data.c_str()); 00580 return data; 00581 } 00582 00583 String ESP8266::recvString(String target1, String target2, String target3, uint32_t timeout) 00584 { 00585 LOG_ENTER; 00586 String data; 00587 char a; 00588 unsigned long start = g_Timer.read_ms(); 00589 while (g_Timer.read_ms() - start < timeout) { 00590 while(m_puart->readable() > 0) { 00591 a = m_puart->getc(); 00592 ESP8266_LOG("a=0x%02x ", a); 00593 if(a == '\0') continue; 00594 data += a; 00595 00596 if (data.indexOf(target1) != -1) { 00597 ESP8266_LOG("\r\ndata5 = %s\r\n", data.c_str()); 00598 //pc.printf("data5 = %s\r\n", data.c_str()); 00599 return data; 00600 } else if (data.indexOf(target2) != -1) { 00601 ESP8266_LOG("\r\ndata6 = %s\r\n", data.c_str()); 00602 //pc.printf("data6 = %s\r\n", data.c_str()); 00603 return data; 00604 } else if (data.indexOf(target3) != -1) { 00605 ESP8266_LOG("\r\ndata7 = %s\r\n", data.c_str()); 00606 //pc.printf("data7 = %s\r\n", data.c_str()); 00607 return data; 00608 } else if (checkIPD(data)) { 00609 data = ""; 00610 } 00611 } 00612 } 00613 ESP8266_LOG("\r\ndata8 = %s\r\n", data.c_str()); 00614 //pc.printf("data8 = %s\r\n", data.c_str()); 00615 return data; 00616 } 00617 00618 bool ESP8266::recvFind(String target, uint32_t timeout) 00619 { 00620 LOG_ENTER; 00621 String data_tmp; 00622 data_tmp = recvString(target, timeout); 00623 if (data_tmp.indexOf(target) != -1) { 00624 return true; 00625 } 00626 return false; 00627 } 00628 00629 bool ESP8266::recvFindAndFilter(String target, String begin, String end, String &data, uint32_t timeout) 00630 { 00631 LOG_ENTER; 00632 String data_tmp; 00633 data_tmp = recvString(target, timeout); 00634 if (data_tmp.indexOf(target) != -1) { 00635 int32_t index1 = data_tmp.indexOf(begin); 00636 int32_t index2 = data_tmp.indexOf(end); 00637 if (index1 != -1 && index2 != -1) { 00638 index1 += begin.length(); 00639 data = data_tmp.substring(index1, index2); 00640 return true; 00641 } 00642 } 00643 data = data_tmp; 00644 return false; 00645 } 00646 00647 bool ESP8266::eAT(void) 00648 { 00649 LOG_ENTER; 00650 rx_empty(); 00651 //m_puart->println(F("AT")); 00652 m_puart->printf("AT\r\n"); 00653 return recvFind("OK"); 00654 } 00655 00656 bool ESP8266::eATRST(void) 00657 { 00658 LOG_ENTER; 00659 rx_empty(); 00660 //m_puart->println(F("AT+RST")); 00661 m_puart->printf("AT+RST\r\n"); 00662 return recvFind("OK"); 00663 } 00664 00665 bool ESP8266::eATGMR(String &version) 00666 { 00667 LOG_ENTER; 00668 rx_empty(); 00669 wait_ms(3000); 00670 //m_puart->println(F("AT+GMR")); 00671 m_puart->printf("AT+GMR\r\n"); 00672 return recvFindAndFilter("OK", "\r\r\n", "\r\n\r\nOK", version, 10000); 00673 } 00674 00675 bool ESP8266::eATGSLP(uint32_t time) 00676 { 00677 LOG_ENTER; 00678 rx_empty(); 00679 //m_puart->print(F("AT+GSLP=")); 00680 //m_puart->println(time); 00681 m_puart->printf("AT+GSLP=%u\r\n", time); 00682 return recvFind("OK"); 00683 } 00684 00685 bool ESP8266::eATE(uint8_t mode) 00686 { 00687 LOG_ENTER; 00688 rx_empty(); 00689 //m_puart->print(F("ATE")); 00690 //m_puart->println(mode); 00691 m_puart->printf("ATE%d\r\n", mode); 00692 return recvFind("OK"); 00693 } 00694 00695 bool ESP8266::eATRESTORE(void) 00696 { 00697 LOG_ENTER; 00698 rx_empty(); 00699 //m_puart->println(F("AT+RESTORE")); 00700 m_puart->printf("AT+RESTORE\r\n"); 00701 return recvFind("OK"); 00702 } 00703 00704 bool ESP8266::eATSETUART(uint32_t baudrate,uint8_t pattern) 00705 { 00706 LOG_ENTER; 00707 rx_empty(); 00708 if(pattern>3||pattern<1) { 00709 return false; 00710 } 00711 switch(pattern) { 00712 case 1: 00713 //m_puart->print(F("AT+UART=")); 00714 m_puart->printf("AT+UART="); 00715 break; 00716 case 2: 00717 //m_puart->print(F("AT+UART_CUR=")); 00718 m_puart->printf("AT+UART_CUR="); 00719 break; 00720 case 3: 00721 //m_puart->print(F("AT+UART_DEF=")); 00722 m_puart->printf("AT+UART_DEF="); 00723 break; 00724 } 00725 #if 0 00726 m_puart->print(baudrate); 00727 m_puart->print(F(",")); 00728 m_puart->print(8); 00729 m_puart->print(F(",")); 00730 m_puart->print(1); 00731 m_puart->print(F(",")); 00732 m_puart->print(0); 00733 m_puart->print(F(",")); 00734 m_puart->println(0); 00735 #else 00736 m_puart->printf("%u,%d,%d,%d,%d\r\n", baudrate, 8, 1, 0, 0); 00737 #endif 00738 if(recvFind("OK",5000)) { 00739 //m_puart->begin(baudrate); 00740 m_puart->baud(baudrate); 00741 return true; 00742 } else { 00743 return false; 00744 } 00745 } 00746 00747 bool ESP8266::qATCWMODE(uint8_t *mode,uint8_t pattern) 00748 { 00749 LOG_ENTER; 00750 String str_mode; 00751 bool ret; 00752 if (!mode||!pattern) { 00753 return false; 00754 } 00755 rx_empty(); 00756 switch(pattern) { 00757 case 1 : 00758 //m_puart->println(F("AT+CWMODE_DEF?")); 00759 m_puart->printf("AT+CWMODE_DEF?\r\n"); 00760 break; 00761 case 2: 00762 //m_puart->println(F("AT+CWMODE_CUR?")); 00763 m_puart->printf("AT+CWMODE_CUR?\r\n"); 00764 break; 00765 default: 00766 //m_puart->println(F("AT+CWMODE?")); 00767 m_puart->printf("AT+CWMODE?\r\n"); 00768 } 00769 ret = recvFindAndFilter("OK", ":", "\r\n\r\nOK", str_mode); 00770 if (ret) { 00771 *mode = (uint8_t)str_mode.toInt(); 00772 return true; 00773 } else { 00774 return false; 00775 } 00776 } 00777 00778 bool ESP8266::eATCWMODE(String &list) 00779 { 00780 LOG_ENTER; 00781 rx_empty(); 00782 //m_puart->println(F("AT+CWMODE=?")); 00783 m_puart->printf("AT+CWMODE=?\r\n"); 00784 return recvFindAndFilter("OK", "+CWMODE:(", ")\r\n\r\nOK", list); 00785 } 00786 00787 bool ESP8266::sATCWMODE(uint8_t mode,uint8_t pattern) 00788 { 00789 LOG_ENTER; 00790 if(!pattern) { 00791 return false; 00792 } 00793 String data; 00794 rx_empty(); 00795 switch(pattern) { 00796 case 1 : 00797 //m_puart->print(F("AT+CWMODE_DEF=")); 00798 m_puart->printf("AT+CWMODE_DEF="); 00799 break; 00800 case 2: 00801 //m_puart->print(F("AT+CWMODE_CUR=")); 00802 m_puart->printf("AT+CWMODE_CUR="); 00803 break; 00804 default: 00805 //m_puart->print(F("AT+CWMODE=")); 00806 m_puart->printf("AT+CWMODE="); 00807 } 00808 //m_puart->println(mode); 00809 m_puart->printf("%d\r\n", mode); 00810 data = recvString("OK", "no change"); 00811 00812 if (data.indexOf("OK") != -1 || data.indexOf("no change") != -1) { 00813 return true; 00814 } 00815 return false; 00816 } 00817 00818 00819 bool ESP8266::qATCWJAP(String &ssid,uint8_t pattern) 00820 { 00821 LOG_ENTER; 00822 bool ret; 00823 if (!pattern) { 00824 return false; 00825 } 00826 rx_empty(); 00827 switch(pattern) { 00828 case 1 : 00829 //m_puart->println(F("AT+CWJAP_DEF?")); 00830 m_puart->printf("AT+CWJAP_DEF?\r\n"); 00831 break; 00832 case 2: 00833 //m_puart->println(F("AT+CWJAP_CUR?")); 00834 m_puart->printf("AT+CWJAP_CUR?\r\n"); 00835 break; 00836 default: 00837 //m_puart->println(F("AT+CWJAP?")); 00838 m_puart->printf("AT+CWJAP?\r\n"); 00839 } 00840 ssid = recvString("OK", "No AP"); 00841 if (ssid.indexOf("OK") != -1 || ssid.indexOf("No AP") != -1) { 00842 return true; 00843 } 00844 return false; 00845 00846 } 00847 00848 bool ESP8266::sATCWJAP(String ssid, String pwd, uint8_t pattern) 00849 { 00850 LOG_ENTER; 00851 String data; 00852 if (!pattern) { 00853 return false; 00854 } 00855 rx_empty(); 00856 switch(pattern) { 00857 case 1 : 00858 //m_puart->print(F("AT+CWJAP_DEF=\"")); 00859 m_puart->printf("AT+CWJAP_DEF=\""); 00860 break; 00861 case 2: 00862 //m_puart->print(F("AT+CWJAP_CUR=\"")); 00863 m_puart->printf("AT+CWJAP_CUR=\""); 00864 break; 00865 default: 00866 //m_puart->print(F("AT+CWJAP=\"")); 00867 m_puart->printf("AT+CWJAP=\""); 00868 } 00869 #if 0 00870 m_puart->print(ssid); 00871 m_puart->print(F("\",\"")); 00872 m_puart->print(pwd); 00873 m_puart->println(F("\"")); 00874 #else 00875 //TODO: 00876 m_puart->printf("%s\",\"%s\"\r\n", ssid.c_str(), pwd.c_str()); 00877 #endif 00878 data = recvString("OK", "FAIL", 20000); 00879 if (data.indexOf("OK") != -1) { 00880 return true; 00881 } 00882 return false; 00883 } 00884 00885 bool ESP8266::eATCWLAP(String &list) 00886 { 00887 LOG_ENTER; 00888 String data; 00889 rx_empty(); 00890 //m_puart->println(F("AT+CWLAP")); 00891 m_puart->printf("AT+CWLAP\r\n"); 00892 return recvFindAndFilter("OK", "\r\r\n", "\r\n\r\nOK", list, 15000); 00893 } 00894 00895 bool ESP8266::eATCWQAP(void) 00896 { 00897 LOG_ENTER; 00898 String data; 00899 rx_empty(); 00900 //m_puart->println(F("AT+CWQAP")); 00901 m_puart->printf("AT+CWQAP\r\n"); 00902 return recvFind("OK"); 00903 } 00904 00905 bool ESP8266::qATCWSAP(String &List,uint8_t pattern) 00906 { 00907 LOG_ENTER; 00908 if (!pattern) { 00909 return false; 00910 } 00911 rx_empty(); 00912 switch(pattern) { 00913 case 1 : 00914 //m_puart->println(F("AT+CWSAP_DEF?")); 00915 m_puart->printf("AT+CWSAP_DEF?\r\n"); 00916 break; 00917 case 2: 00918 //m_puart->println(F("AT+CWSAP_CUR?")); 00919 m_puart->printf("AT+CWSAP_CUR?\r\n"); 00920 break; 00921 default: 00922 //m_puart->println(F("AT+CWSAP?")); 00923 m_puart->printf("AT+CWSAP?\r\n"); 00924 } 00925 return recvFindAndFilter("OK", "\r\r\n", "\r\n\r\nOK", List,10000); 00926 } 00927 00928 bool ESP8266::sATCWSAP(String ssid, String pwd, uint8_t chl, uint8_t ecn,uint8_t pattern) 00929 { 00930 LOG_ENTER; 00931 String data; 00932 if (!pattern) { 00933 return false; 00934 } 00935 rx_empty(); 00936 switch(pattern) { 00937 case 1 : 00938 //m_puart->print(F("AT+CWSAP_DEF=\"")); 00939 m_puart->printf("AT+CWSAP_DEF=\""); 00940 break; 00941 case 2: 00942 //m_puart->print(F("AT+CWSAP_CUR=\"")); 00943 m_puart->printf("AT+CWSAP_CUR=\""); 00944 break; 00945 default: 00946 //m_puart->print(F("AT+CWSAP=\"")); 00947 m_puart->printf("AT+CWSAP=\""); 00948 } 00949 #if 0 00950 m_puart->print(ssid); 00951 m_puart->print(F("\",\"")); 00952 m_puart->print(pwd); 00953 m_puart->print(F("\",")); 00954 m_puart->print(chl); 00955 m_puart->print(F(",")); 00956 m_puart->println(ecn); 00957 #else 00958 m_puart->printf("%s\",\"%s\",%d,%d\r\n", ssid.c_str(), pwd.c_str(), chl, ecn); 00959 #endif 00960 data = recvString("OK", "ERROR", 5000); 00961 if (data.indexOf("OK") != -1) { 00962 return true; 00963 } 00964 return false; 00965 } 00966 00967 bool ESP8266::eATCWLIF(String &list) 00968 { 00969 LOG_ENTER; 00970 String data; 00971 rx_empty(); 00972 //m_puart->println(F("AT+CWLIF")); 00973 m_puart->printf("AT+CWLIF\r\n"); 00974 return recvFindAndFilter("OK", "\r\r\n", "\r\n\r\nOK", list); 00975 } 00976 00977 bool ESP8266::qATCWDHCP(String &List,uint8_t pattern) 00978 { 00979 LOG_ENTER; 00980 if (!pattern) { 00981 return false; 00982 } 00983 rx_empty(); 00984 switch(pattern) { 00985 case 1 : 00986 //m_puart->println(F("AT+CWDHCP_DEF?")); 00987 m_puart->printf("AT+CWDHCP_DEF?\r\n"); 00988 break; 00989 case 2: 00990 //m_puart->println(F("AT+CWDHCP_CUR?")); 00991 m_puart->printf("AT+CWDHCP_CUR?\r\n"); 00992 break; 00993 default: 00994 //m_puart->println(F("AT+CWDHCP?")); 00995 m_puart->printf("AT+CWDHCP?\r\n"); 00996 } 00997 00998 return recvFindAndFilter("OK", "\r\r\n", "\r\nOK", List,10000); 00999 01000 } 01001 01002 01003 bool ESP8266::sATCWDHCP(uint8_t mode, uint8_t en, uint8_t pattern) 01004 { 01005 LOG_ENTER; 01006 String data; 01007 if (!pattern) { 01008 return false; 01009 } 01010 rx_empty(); 01011 switch(pattern) { 01012 case 1 : 01013 //m_puart->print(F("AT+CWDHCP_DEF=")); 01014 m_puart->printf("AT+CWDHCP_DEF="); 01015 break; 01016 case 2: 01017 //m_puart->print(F("AT+CWDHCP_CUR=")); 01018 m_puart->printf("AT+CWDHCP_CUR="); 01019 break; 01020 default: 01021 //m_puart->print(F("AT+CWDHCP=")); 01022 m_puart->printf("AT+CWDHCP="); 01023 } 01024 #if 0 01025 m_puart->print(mode); 01026 m_puart->print(F(",")); 01027 m_puart->println(en); 01028 #else 01029 m_puart->printf("%d,%d\r\n", mode, en); 01030 #endif 01031 data = recvString("OK", "ERROR", 2000); 01032 01033 if (data.indexOf("OK") != -1) { 01034 return true; 01035 } 01036 return false; 01037 } 01038 01039 01040 bool ESP8266::eATCWAUTOCONN(uint8_t en) 01041 { 01042 LOG_ENTER; 01043 rx_empty(); 01044 if(en>1||en<0) { 01045 return false; 01046 } 01047 #if 0 01048 m_puart->print(F("AT+CWAUTOCONN=")); 01049 m_puart->println(en); 01050 #else 01051 m_puart->printf("AT+CWAUTOCONN=%d\r\n", en); 01052 #endif 01053 return recvFind("OK"); 01054 01055 } 01056 01057 bool ESP8266::qATCIPSTAMAC(String &mac,uint8_t pattern) 01058 { 01059 LOG_ENTER; 01060 rx_empty(); 01061 if (!pattern) { 01062 return false; 01063 } 01064 switch(pattern) { 01065 case 1 : 01066 //m_puart->println(F("AT+CIPSTAMAC_DEF?")); 01067 m_puart->printf("AT+CIPSTAMAC_DEF?\r\n"); 01068 break; 01069 case 2: 01070 //m_puart->println(F("AT+CIPSTAMAC_CUR?")); 01071 m_puart->printf("AT+CIPSTAMAC_CUR?\r\n"); 01072 break; 01073 default: 01074 //m_puart->println(F("AT+CIPSTAMAC?")); 01075 m_puart->printf("AT+CIPSTAMAC?\r\n"); 01076 } 01077 return recvFindAndFilter("OK", "\r\r\n", "\r\n\r\nOK", mac,2000); 01078 01079 } 01080 01081 01082 01083 bool ESP8266::eATCIPSTAMAC(String mac,uint8_t pattern) 01084 { 01085 LOG_ENTER; 01086 rx_empty(); 01087 if (!pattern) { 01088 return false; 01089 } 01090 switch(pattern) { 01091 case 1 : 01092 //m_puart->print(F("AT+CIPSTAMAC_DEF=")); 01093 m_puart->printf("AT+CIPSTAMAC_DEF="); 01094 break; 01095 case 2: 01096 //m_puart->print(F("AT+CIPSTAMAC_CUR=")); 01097 m_puart->printf("AT+CIPSTAMAC_CUR="); 01098 break; 01099 default: 01100 //m_puart->print(F("AT+CIPSTAMAC=")); 01101 m_puart->printf("AT+CIPSTAMAC="); 01102 } 01103 #if 0 01104 m_puart->print(F("\"")); 01105 m_puart->print(mac); 01106 m_puart->println(F("\"")); 01107 #else 01108 m_puart->printf("\"%s\"\r\n", mac.c_str()); 01109 #endif 01110 return recvFind("OK"); 01111 01112 } 01113 01114 bool ESP8266::qATCIPSTAIP(String &ip,uint8_t pattern) 01115 { 01116 LOG_ENTER; 01117 rx_empty(); 01118 if (!pattern) { 01119 return false; 01120 } 01121 switch(pattern) { 01122 case 1 : 01123 //m_puart->println(F("AT+CIPSTA_DEF?")); 01124 m_puart->printf("AT+CIPSTA_DEF?\r\n"); 01125 break; 01126 case 2: 01127 //m_puart->println(F("AT+CIPSTA_CUR?")); 01128 m_puart->printf("AT+CIPSTA_CUR?\r\n"); 01129 break; 01130 default: 01131 //m_puart->println(F("AT+CIPSTA?")); 01132 m_puart->printf("AT+CIPSTA?\r\n"); 01133 } 01134 return recvFindAndFilter("OK", "\r\r\n", "\r\n\r\nOK", ip,2000); 01135 01136 } 01137 01138 bool ESP8266::eATCIPSTAIP(String ip,String gateway,String netmask,uint8_t pattern) 01139 { 01140 LOG_ENTER; 01141 rx_empty(); 01142 if (!pattern) { 01143 return false; 01144 } 01145 switch(pattern) { 01146 case 1 : 01147 //m_puart->print(F("AT+CIPSTA_DEF=")); 01148 m_puart->printf("AT+CIPSTA_DEF="); 01149 break; 01150 case 2: 01151 //m_puart->print(F("AT+CIPSTA_CUR=")); 01152 m_puart->printf("AT+CIPSTA_CUR="); 01153 break; 01154 default: 01155 //m_puart->print(F("AT+CIPSTA=")); 01156 m_puart->printf("AT+CIPSTA="); 01157 } 01158 #if 0 01159 m_puart->print(F("\"")); 01160 m_puart->print(ip); 01161 m_puart->print(F("\",\"")); 01162 m_puart->print(gateway); 01163 m_puart->print(F("\",\"")); 01164 m_puart->print(netmask); 01165 m_puart->println(F("\"")); 01166 #else 01167 m_puart->printf("\"%s\",\"%s\",\"%s\"\r\n", ip.c_str(), gateway.c_str(), netmask.c_str()); 01168 #endif 01169 return recvFind("OK"); 01170 01171 } 01172 01173 01174 bool ESP8266::qATCIPAP(String &ip,uint8_t pattern) 01175 { 01176 LOG_ENTER; 01177 rx_empty(); 01178 if (!pattern) { 01179 return false; 01180 } 01181 switch(pattern) { 01182 case 1 : 01183 //m_puart->println(F("AT+CIPAP_DEF?")); 01184 m_puart->printf("AT+CIPAP_DEF?\r\n"); 01185 break; 01186 case 2: 01187 //m_puart->println(F("AT+CIPAP_CUR?")); 01188 m_puart->printf("AT+CIPAP_CUR?\r\n"); 01189 break; 01190 default: 01191 //m_puart->println(F("AT+CIPAP?")); 01192 m_puart->printf("AT+CIPAP?\r\n"); 01193 } 01194 return recvFindAndFilter("OK", "\r\r\n", "\r\n\r\nOK", ip,2000); 01195 01196 } 01197 01198 01199 bool ESP8266::eATCIPAP(String ip,uint8_t pattern) 01200 { 01201 LOG_ENTER; 01202 rx_empty(); 01203 if (!pattern) { 01204 return false; 01205 } 01206 switch(pattern) { 01207 case 1 : 01208 //m_puart->print(F("AT+CIPAP_DEF=")); 01209 m_puart->printf("AT+CIPAP_DEF="); 01210 break; 01211 case 2: 01212 //m_puart->print(F("AT+CIPAP_CUR=")); 01213 m_puart->printf("AT+CIPAP_CUR="); 01214 break; 01215 default: 01216 //m_puart->print(F("AT+CIPAP=")); 01217 m_puart->printf("AT+CIPAP="); 01218 } 01219 #if 0 01220 m_puart->print(F("\"")); 01221 m_puart->print(ip); 01222 m_puart->println(F("\"")); 01223 #else 01224 m_puart->printf("\"%s\"\r\n", ip.c_str()); 01225 #endif 01226 return recvFind("OK"); 01227 01228 } 01229 01230 01231 bool ESP8266::eCWSTARTSMART(uint8_t type) 01232 { 01233 LOG_ENTER; 01234 rx_empty(); 01235 #if 0 01236 m_puart->print(F("AT+CWSTARTSMART=")); 01237 m_puart->println(type); 01238 #else 01239 m_puart->printf("AT+CWSTARTSMART=%d\r\n", type); 01240 #endif 01241 return recvFind("OK"); 01242 } 01243 01244 bool ESP8266::eCWSTOPSMART(void) 01245 { 01246 LOG_ENTER; 01247 rx_empty(); 01248 //m_puart->println(F("AT+CWSTOPSMART")); 01249 m_puart->printf("AT+CWSTOPSMART\r\n"); 01250 return recvFind("OK"); 01251 } 01252 01253 bool ESP8266::eATCIPSTATUS(String &list) 01254 { 01255 LOG_ENTER; 01256 String data; 01257 //delay(100); 01258 wait_ms(100); 01259 rx_empty(); 01260 //m_puart->println(F("AT+CIPSTATUS")); 01261 m_puart->printf("AT+CIPSTATUS\r\n"); 01262 return recvFindAndFilter("OK", "\r\r\n", "\r\n\r\nOK", list); 01263 } 01264 01265 bool ESP8266::sATCIPSTARTSingle(String type, String addr, uint32_t port) 01266 { 01267 LOG_ENTER; 01268 String data; 01269 rx_empty(); 01270 #if 0 01271 m_puart->print(F("AT+CIPSTART=\"")); 01272 m_puart->print(type); 01273 m_puart->print(F("\",\"")); 01274 m_puart->print(addr); 01275 m_puart->print(F("\",")); 01276 m_puart->println(port); 01277 #else 01278 m_puart->printf("AT+CIPSTART=\"%s\",\"%s\",%u\r\n", type.c_str(), addr.c_str(), port); 01279 #endif 01280 data = recvString("OK", "ERROR", "ALREADY CONNECT", 10000); 01281 if (data.indexOf("OK") != -1 || data.indexOf("ALREADY CONNECT") != -1) { 01282 return true; 01283 } 01284 return false; 01285 } 01286 01287 bool ESP8266::sATCIPSTARTMultiple(uint8_t mux_id, String type, String addr, uint32_t port) 01288 { 01289 LOG_ENTER; 01290 String data; 01291 rx_empty(); 01292 #if 0 01293 m_puart->print(F("AT+CIPSTART=")); 01294 m_puart->print(mux_id); 01295 m_puart->print(F(",\"")); 01296 m_puart->print(type); 01297 m_puart->print(F("\",\"")); 01298 m_puart->print(addr); 01299 m_puart->print(F("\",")); 01300 m_puart->println(port); 01301 #else 01302 m_puart->printf("AT+CIPSTART=%d,\"%s\",\"%s\",%u\r\n", mux_id, type.c_str(), addr.c_str(), port); 01303 #endif 01304 data = recvString("OK", "ERROR", "ALREADY CONNECT", 10000); 01305 if (data.indexOf("OK") != -1 || data.indexOf("ALREADY CONNECT") != -1) { 01306 return true; 01307 } 01308 return false; 01309 } 01310 01311 bool ESP8266::sATCIPSENDSingle(const uint8_t *buffer, uint32_t len) 01312 { 01313 LOG_ENTER; 01314 rx_empty(); 01315 #if 0 01316 m_puart->print(F("AT+CIPSEND=")); 01317 m_puart->println(len); 01318 #else 01319 m_puart->printf("AT+CIPSEND=%u\r\n", len); 01320 #endif 01321 if (recvFind(">", 5000)) { 01322 rx_empty(); 01323 for (uint32_t i = 0; i < len; i++) { 01324 //m_puart->write(buffer[i]); 01325 m_puart->putc(buffer[i]); 01326 } 01327 return recvFind("SEND OK", 10000); 01328 } 01329 return false; 01330 } 01331 01332 bool ESP8266::sATCIPSENDMultiple(uint8_t mux_id, const uint8_t *buffer, uint32_t len) 01333 { 01334 LOG_ENTER; 01335 rx_empty(); 01336 #if 0 01337 m_puart->print(F("AT+CIPSEND=")); 01338 m_puart->print(mux_id); 01339 m_puart->print(F(",")); 01340 m_puart->println(len); 01341 #else 01342 m_puart->printf("AT+CIPSEND=%d,%u\r\n", mux_id, len); 01343 #endif 01344 if (recvFind(">", 5000)) { 01345 rx_empty(); 01346 for (uint32_t i = 0; i < len; i++) { 01347 //m_puart->write(buffer[i]); 01348 m_puart->putc(buffer[i]); 01349 } 01350 return recvFind("SEND OK", 10000); 01351 } 01352 return false; 01353 } 01354 01355 bool ESP8266::sATCIPSENDSingleFromFlash(const uint8_t *buffer, uint32_t len) 01356 { 01357 LOG_ENTER; 01358 rx_empty(); 01359 #if 0 01360 m_puart->print(F("AT+CIPSEND=")); 01361 m_puart->println(len); 01362 #else 01363 m_puart->printf("AT+CIPSEND=%u\r\n", len); 01364 #endif 01365 if (recvFind(">", 5000)) { 01366 rx_empty(); 01367 for (uint32_t i = 0; i < len; i++) { 01368 //m_puart->write((char) pgm_read_byte(&buffer[i])); 01369 m_puart->putc(buffer[i]); 01370 } 01371 return recvFind("SEND OK", 10000); 01372 } 01373 return false; 01374 } 01375 01376 bool ESP8266::sATCIPSENDMultipleFromFlash(uint8_t mux_id, const uint8_t *buffer, uint32_t len) 01377 { 01378 LOG_ENTER; 01379 rx_empty(); 01380 #if 0 01381 m_puart->print(F("AT+CIPSEND=")); 01382 m_puart->print(mux_id); 01383 m_puart->print(F(",")); 01384 m_puart->println(len); 01385 #else 01386 m_puart->printf("AT+CIPSEND=%d,%u\r\n", mux_id, len); 01387 #endif 01388 if (recvFind(">", 5000)) { 01389 rx_empty(); 01390 for (uint32_t i = 0; i < len; i++) { 01391 //m_puart->write((char) pgm_read_byte(&buffer[i])); 01392 m_puart->putc(buffer[i]); 01393 } 01394 return recvFind("SEND OK", 10000); 01395 } 01396 return false; 01397 } 01398 01399 bool ESP8266::sATCIPCLOSEMulitple(uint8_t mux_id) 01400 { 01401 LOG_ENTER; 01402 String data; 01403 rx_empty(); 01404 #if 0 01405 m_puart->print(F("AT+CIPCLOSE=")); 01406 m_puart->println(mux_id); 01407 #else 01408 m_puart->printf("AT+CIPCLOSE=%d\r\n", mux_id); 01409 #endif 01410 data = recvString("OK", "link is not", 5000); 01411 if (data.indexOf("OK") != -1 || data.indexOf("link is not") != -1) { 01412 return true; 01413 } 01414 return false; 01415 } 01416 01417 bool ESP8266::eATCIPCLOSESingle(void) 01418 { 01419 LOG_ENTER; 01420 rx_empty(); 01421 //m_puart->println(F("AT+CIPCLOSE")); 01422 m_puart->printf("AT+CIPCLOSE\r\n"); 01423 return recvFind("OK", 5000); 01424 } 01425 01426 bool ESP8266::eATCIFSR(String &list) 01427 { 01428 LOG_ENTER; 01429 rx_empty(); 01430 //m_puart->println(F("AT+CIFSR")); 01431 m_puart->printf("AT+CIFSR\r\n"); 01432 return recvFindAndFilter("OK", "\r\r\n", "\r\n\r\nOK", list); 01433 } 01434 01435 bool ESP8266::sATCIPMUX(uint8_t mode) 01436 { 01437 LOG_ENTER; 01438 String data; 01439 rx_empty(); 01440 #if 0 01441 m_puart->print(F("AT+CIPMUX=")); 01442 m_puart->println(mode); 01443 #else 01444 m_puart->printf("AT+CIPMUX=%d\r\n", mode); 01445 #endif 01446 data = recvString("OK", "Link is builded"); 01447 if (data.indexOf("OK") != -1) { 01448 return true; 01449 } 01450 return false; 01451 } 01452 01453 bool ESP8266::sATCIPSERVER(uint8_t mode, uint32_t port) 01454 { 01455 LOG_ENTER; 01456 String data; 01457 if (mode) { 01458 rx_empty(); 01459 #if 0 01460 m_puart->print(F("AT+CIPSERVER=1,")); 01461 m_puart->println(port); 01462 #else 01463 m_puart->printf("AT+CIPSERVER=1,%u\r\n", port); 01464 #endif 01465 data = recvString("OK", "no change"); 01466 if (data.indexOf("OK") != -1 || data.indexOf("no change") != -1) { 01467 return true; 01468 } 01469 return false; 01470 } else { 01471 rx_empty(); 01472 //m_puart->println(F("AT+CIPSERVER=0")); 01473 m_puart->printf("AT+CIPSERVER=0\r\n"); 01474 return recvFind("\r\r\n"); 01475 } 01476 } 01477 01478 bool ESP8266::sATCIPMODE(uint8_t mode) 01479 { 01480 LOG_ENTER; 01481 String data; 01482 if(mode>1||mode<0) { 01483 return false; 01484 } 01485 rx_empty(); 01486 #if 0 01487 m_puart->print(F("AT+CIPMODE=")); 01488 m_puart->println(mode); 01489 #else 01490 m_puart->printf("AT+CIPMODE=%d\r\n", mode); 01491 #endif 01492 data = recvString("OK", "Link is builded",2000); 01493 if (data.indexOf("OK") != -1 ) { 01494 return true; 01495 } 01496 return false; 01497 } 01498 01499 bool ESP8266::eATSAVETRANSLINK(uint8_t mode,String ip,uint32_t port) 01500 { 01501 LOG_ENTER; 01502 String data; 01503 rx_empty(); 01504 #if 0 01505 m_puart->print(F("AT+SAVETRANSLINK=")); 01506 m_puart->print(mode); 01507 m_puart->print(F(",\"")); 01508 m_puart->print(ip); 01509 m_puart->print(F("\",")); 01510 m_puart->println(port); 01511 #else 01512 m_puart->printf("AT+SAVETRANSLINK=%d,\"%s\",%u\r\n", mode, ip.c_str(), port); 01513 #endif 01514 data = recvString("OK", "ERROR",2000); 01515 if (data.indexOf("OK") != -1 ) { 01516 return true; 01517 } 01518 return false; 01519 } 01520 01521 bool ESP8266::eATPING(String ip) 01522 { 01523 LOG_ENTER; 01524 rx_empty(); 01525 #if 0 01526 m_puart->print(F("AT+PING=")); 01527 m_puart->print(F("\"")); 01528 m_puart->print(ip); 01529 m_puart->println(F("\"")); 01530 #else 01531 m_puart->printf("AT+PING=\"%s\"\r\n", ip.c_str()); 01532 #endif 01533 return recvFind("OK",2000); 01534 } 01535 01536 bool ESP8266::sATCIPSTO(uint32_t timeout) 01537 { 01538 LOG_ENTER; 01539 rx_empty(); 01540 #if 0 01541 m_puart->print(F("AT+CIPSTO=")); 01542 m_puart->println(timeout); 01543 #else 01544 m_puart->printf("AT+CIPSTO=%u\r\n", timeout); 01545 #endif 01546 return recvFind("OK"); 01547 }
Generated on Tue Jul 12 2022 13:01:29 by
1.7.2