p kj
/
LPC824-BlynkWeatherstation
Microduino
Fork of Io_moon by
Embed:
(wiki syntax)
Show/hide line numbers
ESP8266.cpp
Go to the documentation of this file.
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 19 2022 01:01:49 by 1.7.2