Dopasowany do naszego firmware'u
Dependencies: ArduinoAPI
Fork of WeeESP8266 by
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.h" 00022 #include "log.h" 00023 00024 ESP8266::ESP8266(ArduinoSerial &uart): m_puart(&uart) 00025 { 00026 m_puart->begin(9600); 00027 m_puart->flush(); 00028 } 00029 00030 void ESP8266::clear_serial() 00031 { 00032 m_puart->flush(); 00033 // 510 zer (długosc bufora) 00034 m_puart->println("\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"); 00035 } 00036 00037 00038 bool ESP8266::kick(void) 00039 { 00040 return eAT(); 00041 } 00042 00043 bool ESP8266::restart(void) 00044 { 00045 unsigned long start; 00046 if (eATRST()) { 00047 delay(2000); 00048 start = millis(); 00049 while (millis() - start < 3000) { 00050 if (eAT()) { 00051 delay(1500); /* Waiting for stable */ 00052 return true; 00053 } 00054 delay(100); 00055 } 00056 } 00057 return false; 00058 } 00059 00060 String ESP8266::getVersion(void) 00061 { 00062 String version; 00063 eATGMR(version); 00064 return version; 00065 } 00066 00067 bool ESP8266::setOprToStation(void) 00068 { 00069 uint8_t mode; 00070 if (!qATCWMODE(&mode)) { 00071 return false; 00072 } 00073 if (mode == 1) { 00074 return true; 00075 } else { 00076 if (sATCWMODE(1) && restart()) { 00077 return true; 00078 } else { 00079 return false; 00080 } 00081 } 00082 } 00083 00084 bool ESP8266::setOprToSoftAP(void) 00085 { 00086 uint8_t mode; 00087 if (!qATCWMODE(&mode)) { 00088 return false; 00089 } 00090 if (mode == 2) { 00091 return true; 00092 } else { 00093 if (sATCWMODE(2) && restart()) { 00094 return true; 00095 } else { 00096 return false; 00097 } 00098 } 00099 } 00100 00101 bool ESP8266::setOprToStationSoftAP(void) 00102 { 00103 uint8_t mode; 00104 if (!qATCWMODE(&mode)) { 00105 return false; 00106 } 00107 if (mode == 3) { 00108 return true; 00109 } else { 00110 if (sATCWMODE(3) && restart()) { 00111 return true; 00112 } else { 00113 return false; 00114 } 00115 } 00116 } 00117 00118 String ESP8266::getAPList(void) 00119 { 00120 String list; 00121 eATCWLAP(list); 00122 return list; 00123 } 00124 00125 bool ESP8266::joinAP(String ssid, String pwd) 00126 { 00127 return sATCWJAP(ssid, pwd); 00128 } 00129 00130 bool ESP8266::leaveAP(void) 00131 { 00132 return eATCWQAP(); 00133 } 00134 00135 bool ESP8266::setSoftAPParam(String ssid, String pwd, uint8_t chl, uint8_t ecn) 00136 { 00137 return sATCWSAP(ssid, pwd, chl, ecn); 00138 } 00139 00140 String ESP8266::getJoinedDeviceIP(void) 00141 { 00142 String list; 00143 eATCWLIF(list); 00144 return list; 00145 } 00146 00147 int ESP8266::getIPStatus(void) 00148 { 00149 String komenda = "AT+CIPSTATUS"; 00150 00151 String data; 00152 char a; 00153 unsigned long start; 00154 m_puart->flush(); 00155 clear_serial(); 00156 m_puart -> println(komenda); 00157 start = millis(); 00158 while (millis() - start < 1000) { 00159 while(m_puart ->available() > 0) { 00160 a = m_puart ->readChr(); 00161 data +=a; 00162 } 00163 if (data.indexOf("OK") != -1) { 00164 break; 00165 } 00166 if (data.indexOf("ERROR") != -1 ) { 00167 return -1; //jak zle to powtarzam; 00168 } 00169 } 00170 char num; 00171 num = data[21]; 00172 return num-48; 00173 // String list; 00174 // eATCIPSTATUS(list); 00175 // return list; 00176 } 00177 00178 String ESP8266::getLocalIP(void) 00179 { 00180 String list; 00181 eATCIFSR(list); 00182 return list; 00183 } 00184 00185 bool ESP8266::enableMUX(void) 00186 { 00187 return sATCIPMUX(1); 00188 } 00189 00190 bool ESP8266::disableMUX(void) 00191 { 00192 return sATCIPMUX(0); 00193 } 00194 00195 bool ESP8266::createTCP(String addr, uint32_t port) 00196 { 00197 return sATCIPSTARTSingle("TCP", addr, port); 00198 } 00199 00200 bool ESP8266::releaseTCP(void) 00201 { 00202 return eATCIPCLOSESingle(); 00203 } 00204 00205 bool ESP8266::registerUDP(String addr, uint32_t port) 00206 { 00207 return sATCIPSTARTSingle("UDP", addr, port); 00208 } 00209 00210 bool ESP8266::unregisterUDP(void) 00211 { 00212 return eATCIPCLOSESingle(); 00213 } 00214 00215 bool ESP8266::createTCP(uint8_t mux_id, String addr, uint32_t port) 00216 { 00217 return sATCIPSTARTMultiple(mux_id, "TCP", addr, port); 00218 } 00219 00220 bool ESP8266::releaseTCP(uint8_t mux_id) 00221 { 00222 return sATCIPCLOSEMulitple(mux_id); 00223 } 00224 00225 bool ESP8266::registerUDP(uint8_t mux_id, String addr, uint32_t port) 00226 { 00227 return sATCIPSTARTMultiple(mux_id, "UDP", addr, port); 00228 } 00229 00230 bool ESP8266::unregisterUDP(uint8_t mux_id) 00231 { 00232 return sATCIPCLOSEMulitple(mux_id); 00233 } 00234 00235 bool ESP8266::setTCPServerTimeout(uint32_t timeout) 00236 { 00237 return sATCIPSTO(timeout); 00238 } 00239 00240 bool ESP8266::startTCPServer(uint32_t port) 00241 { 00242 if (sATCIPSERVER(1, port)) { 00243 return true; 00244 } 00245 return false; 00246 } 00247 00248 bool ESP8266::stopTCPServer(void) 00249 { 00250 sATCIPSERVER(0); 00251 restart(); 00252 return false; 00253 } 00254 00255 bool ESP8266::send(const uint8_t *buffer, uint32_t len) 00256 { 00257 return sATCIPSENDSingle(buffer, len); 00258 } 00259 00260 bool ESP8266::send(uint8_t mux_id, const uint8_t *buffer, uint32_t len) 00261 { 00262 return sATCIPSENDMultiple(mux_id, buffer, len); 00263 } 00264 00265 uint32_t ESP8266::recv(uint8_t *buffer, uint32_t buffer_size, uint32_t timeout) 00266 { 00267 return recvPkg(buffer, buffer_size, NULL, timeout, NULL); 00268 } 00269 00270 uint32_t ESP8266::recv(uint8_t mux_id, uint8_t *buffer, uint32_t buffer_size, uint32_t timeout) 00271 { 00272 uint8_t id; 00273 uint32_t ret; 00274 ret = recvPkg(buffer, buffer_size, NULL, timeout, &id); 00275 if (ret > 0 && id == mux_id) { 00276 return ret; 00277 } 00278 return 0; 00279 } 00280 00281 uint32_t ESP8266::recv(uint8_t *coming_mux_id, uint8_t *buffer, uint32_t buffer_size, uint32_t timeout) 00282 { 00283 return recvPkg(buffer, buffer_size, NULL, timeout, coming_mux_id); 00284 } 00285 00286 /*----------------------------------------------------------------------------*/ 00287 00288 uint32_t ESP8266::recvPkg(uint8_t *buffer, uint32_t buffer_size, uint32_t *data_len, uint32_t timeout, uint8_t *coming_mux_id) 00289 { 00290 String data; 00291 char a; 00292 int32_t index_PIPDcomma = -1; 00293 int32_t index_colon = -1; /* : */ 00294 int32_t index_comma = -1; /* , */ 00295 int32_t len = -1; 00296 int8_t id = -1; 00297 bool has_data = false; 00298 logDebug("start recv pkg"); 00299 00300 unsigned long start = millis(); 00301 while (millis() - start < timeout) { 00302 while(m_puart->available() > 0) { 00303 a = m_puart->readChr(); 00304 data += a; 00305 } 00306 00307 index_PIPDcomma = data.indexOf("+IPD,"); 00308 if (index_PIPDcomma != -1) { 00309 logDebug("index_PIPDcomma found = %d", index_PIPDcomma); 00310 index_colon = data.indexOf(':', index_PIPDcomma + 5); 00311 if (index_colon != -1) { 00312 logDebug("data1 = %s\r\n", data.c_str()); 00313 logDebug("index_colon found = %d", index_colon); 00314 00315 index_comma = data.indexOf(',', index_PIPDcomma + 5); 00316 logDebug("index_comma found = %d", index_comma); 00317 00318 if (index_comma != -1 && index_comma < index_colon) { /* +IPD,id,len:data */ 00319 logDebug("id = %d", id); 00320 id = data.substring(index_PIPDcomma + 5, index_comma).toInt(); 00321 logDebug("id = %d", id); 00322 if (id < 0 || id > 4) { 00323 return 0; 00324 } 00325 logDebug("len = %d", len); 00326 len = data.substring(index_comma + 1, index_colon).toInt(); 00327 logDebug("len = %d", len); 00328 if (len <= 0) { 00329 return 0; 00330 } 00331 logDebug("has id"); 00332 } else { /* +IPD,len:data */ 00333 len = data.substring(index_PIPDcomma + 5, index_colon).toInt(); 00334 logDebug("len = %d", len); 00335 if (len <= 0) { 00336 return 0; 00337 } 00338 logDebug("no id"); 00339 } 00340 has_data = true; 00341 logDebug("has_data true"); 00342 break; 00343 } 00344 } 00345 } 00346 //logDebug("has_data = %u\r\n", has_data); 00347 //logDebug("data2 = %s\r\n", data.c_str()); 00348 00349 if (has_data) { 00350 start = millis(); 00351 while (millis() - start < 3000) { 00352 while(m_puart->available() > 0) { 00353 a = m_puart->readChr(); 00354 data += a; 00355 } 00356 //logDebug("data3 = %s\r\n", data.c_str()); 00357 if (data.length() >= index_colon + 1 + len) { 00358 if (data_len) { 00359 *data_len = len; 00360 } 00361 if (index_comma != -1 && coming_mux_id) { 00362 *coming_mux_id = id; 00363 } 00364 //logDebug("len = %d", len); 00365 //logDebug("buffer_size = %d", buffer_size); 00366 uint32_t ret = len > buffer_size ? buffer_size : len; 00367 00368 memcpy(buffer, 00369 data.substring(index_colon + 1, index_colon + 1 + len).c_str(), 00370 ret); 00371 logDebug("ret = %u\r\n", ret); 00372 return ret; 00373 } 00374 } 00375 } 00376 logDebug("end recv pkg"); 00377 return 0; 00378 } 00379 00380 String ESP8266::recvString(String target, uint32_t timeout) 00381 { 00382 String data; 00383 char a; 00384 unsigned long start = millis(); 00385 while (millis() - start < timeout) { 00386 while(m_puart->available() > 0) { 00387 a = m_puart->readChr(); 00388 data += a; 00389 } 00390 if (data.indexOf(target) != -1) { 00391 break; 00392 } 00393 } 00394 return data; 00395 } 00396 00397 String ESP8266::recvString(String target1, String target2, uint32_t timeout) 00398 { 00399 String data; 00400 char a; 00401 unsigned long start = millis(); 00402 while (millis() - start < timeout) { 00403 while(m_puart->available() > 0) { 00404 a = m_puart->readChr(); 00405 data += a; 00406 } 00407 if (data.indexOf(target1) != -1) { 00408 break; 00409 } else if (data.indexOf(target2) != -1) { 00410 break; 00411 } 00412 } 00413 return data; 00414 } 00415 00416 String ESP8266::recvString(String target1, String target2, String target3, uint32_t timeout) 00417 { 00418 String data; 00419 char a; 00420 unsigned long start = millis(); 00421 while (millis() - start < timeout) { 00422 while(m_puart->available() > 0) { 00423 a = m_puart->readChr(); 00424 data += a; 00425 } 00426 if (data.indexOf(target1) != -1) { 00427 break; 00428 } else if (data.indexOf(target2) != -1) { 00429 break; 00430 } else if (data.indexOf(target3) != -1) { 00431 break; 00432 } 00433 } 00434 return data; 00435 } 00436 00437 bool ESP8266::recvFind(String target, uint32_t timeout) 00438 { 00439 String data_tmp; 00440 data_tmp = recvString(target, timeout); 00441 if (data_tmp.indexOf(target) != -1) { 00442 return true; 00443 } 00444 return false; 00445 } 00446 00447 bool ESP8266::recvFindAndFilter(String target, String begin, String end, String &data, uint32_t timeout) 00448 { 00449 String data_tmp; 00450 data_tmp = recvString(target, timeout); 00451 if (data_tmp.indexOf(target) != -1) { 00452 int32_t index1 = data_tmp.indexOf(begin); 00453 int32_t index2 = data_tmp.indexOf(end); 00454 if (index1 != -1 && index2 != -1) { 00455 index1 += begin.length(); 00456 data = data_tmp.substring(index1, index2); 00457 return true; 00458 } 00459 } 00460 data = ""; 00461 return false; 00462 } 00463 00464 bool ESP8266::eAT(void) 00465 { 00466 m_puart->flush(); 00467 m_puart->println("AT"); 00468 return recvFind("OK"); 00469 } 00470 00471 bool ESP8266::eATRST(void) 00472 { 00473 m_puart->flush(); 00474 m_puart->println("AT+RST"); 00475 return recvFind("OK"); 00476 } 00477 00478 bool ESP8266::eATGMR(String &version) 00479 { 00480 m_puart->flush(); 00481 m_puart->println("AT+GMR"); 00482 return recvFindAndFilter("OK", "\r\r\n", "\r\n\r\nOK", version); 00483 } 00484 00485 bool ESP8266::qATCWMODE(uint8_t *mode) 00486 { 00487 String str_mode; 00488 bool ret; 00489 if (!mode) { 00490 return false; 00491 } 00492 m_puart->flush(); 00493 m_puart->println("AT+CWMODE?"); 00494 ret = recvFindAndFilter("OK", "+CWMODE:", "\r\n\r\nOK", str_mode); 00495 if (ret) { 00496 *mode = (uint8_t)str_mode.toInt(); 00497 return true; 00498 } else { 00499 return false; 00500 } 00501 } 00502 00503 bool ESP8266::sATCWMODE(uint8_t mode) 00504 { 00505 String data; 00506 m_puart->flush(); 00507 m_puart->print("AT+CWMODE="); 00508 m_puart->println(mode); 00509 00510 data = recvString("OK", "no change"); 00511 if (data.indexOf("OK") != -1 || data.indexOf("no change") != -1) { 00512 return true; 00513 } 00514 return false; 00515 } 00516 00517 bool ESP8266::sATCWJAP(String ssid, String pwd) 00518 { 00519 String data; 00520 String komunikat = ""; 00521 komunikat += "AT+CWJAP=\""; 00522 komunikat += ssid; 00523 komunikat += "\",\""; 00524 komunikat += pwd; 00525 komunikat += "\""; 00526 komunikat+="\r\n"; 00527 // 00528 // for(int i = 0; i<=komunikat.length(); i++){ 00529 // m_puart->printf("%c",komunikat[i]); 00530 // m_puart->flush(); 00531 // } 00532 00533 // m_puart->print("AT+CWJAP=\""); 00534 // m_puart->print(ssid); 00535 // m_puart->print("\",\""); 00536 // m_puart->print(pwd); 00537 00538 m_puart->flush(); 00539 clear_serial(); 00540 m_puart->println(komunikat); 00541 00542 data = recvString("OK", "FAIL", 20000); 00543 if (data.indexOf("OK") != -1) { 00544 return true; 00545 } 00546 return false; 00547 } 00548 00549 bool ESP8266::eATCWLAP(String &list) 00550 { 00551 String data; 00552 m_puart->flush(); 00553 m_puart->println("AT+CWLAP"); 00554 return recvFindAndFilter("OK", "\r\r\n", "\r\n\r\nOK", list, 10000); 00555 } 00556 00557 bool ESP8266::eATCWQAP(void) 00558 { 00559 String data; 00560 m_puart->flush(); 00561 m_puart->println("AT+CWQAP"); 00562 return recvFind("OK"); 00563 } 00564 00565 bool ESP8266::sATCWSAP(String ssid, String pwd, uint8_t chl, uint8_t ecn) 00566 { 00567 String data; 00568 m_puart->flush(); 00569 m_puart->print("AT+CWSAP=\""); 00570 m_puart->print(ssid); 00571 m_puart->print("\",\""); 00572 m_puart->print(pwd); 00573 m_puart->print("\","); 00574 m_puart->print(chl); 00575 m_puart->print(","); 00576 m_puart->println(ecn); 00577 00578 data = recvString("OK", "ERROR", 5000); 00579 if (data.indexOf("OK") != -1) { 00580 return true; 00581 } 00582 return false; 00583 } 00584 00585 bool ESP8266::eATCWLIF(String &list) 00586 { 00587 String data; 00588 m_puart->flush(); 00589 m_puart->println("AT+CWLIF"); 00590 return recvFindAndFilter("OK", "\r\r\n", "\r\n\r\nOK", list); 00591 } 00592 bool ESP8266::eATCIPSTATUS(String &list) 00593 { 00594 String data; 00595 delay(100); 00596 m_puart->flush(); 00597 m_puart->println("AT+CIPSTATUS"); 00598 return recvFindAndFilter("OK", "\r\r\n", "\r\n\r\nOK", list); 00599 } 00600 bool ESP8266::sATCIPSTARTSingle(String type, String addr, uint32_t port) 00601 { 00602 String data; 00603 m_puart->flush(); 00604 m_puart->print("AT+CIPSTART=\""); 00605 m_puart->print(type); 00606 m_puart->print("\",\""); 00607 m_puart->print(addr); 00608 m_puart->print("\","); 00609 m_puart->println(port); 00610 00611 data = recvString("OK", "ERROR", "ALREADY CONNECT", 10000); 00612 if (data.indexOf("OK") != -1 || data.indexOf("ALREADY CONNECT") != -1) { 00613 return true; 00614 } 00615 return false; 00616 } 00617 bool ESP8266::sATCIPSTARTMultiple(uint8_t mux_id, String type, String addr, uint32_t port) 00618 { 00619 String data; 00620 m_puart->flush(); 00621 String komunikat = ""; 00622 komunikat += "AT+CIPSTART="; 00623 komunikat += mux_id; 00624 komunikat += ",\""; 00625 komunikat += type; 00626 komunikat += "\",\""; 00627 komunikat += addr; 00628 komunikat += "\","; 00629 komunikat += port; 00630 komunikat+="\r\n"; 00631 00632 m_puart->flush(); 00633 clear_serial(); 00634 m_puart->println(komunikat); 00635 00636 00637 data = recvString("OK", "ERROR", "CONNECT", 10000); 00638 if ((data.indexOf("OK") != -1) ||(data.indexOf("CONNECT")!= -1)|| (data.indexOf("ALREADY CONNECT") != -1)) { 00639 return true; 00640 } 00641 return false; 00642 } 00643 bool ESP8266::sATCIPSENDSingle(const uint8_t *buffer, uint32_t len) 00644 { 00645 m_puart->flush(); 00646 m_puart->print("AT+CIPSEND="); 00647 m_puart->println(len); 00648 if (recvFind(">", 5000)) { 00649 m_puart->flush(); 00650 for (uint32_t i = 0; i < len; i++) { 00651 m_puart->write(buffer[i]); 00652 } 00653 return recvFind("SEND OK", 10000); 00654 } 00655 return false; 00656 } 00657 bool ESP8266::sATCIPSENDMultiple(uint8_t mux_id, const uint8_t *buffer, uint32_t len) 00658 { 00659 m_puart->flush(); 00660 m_puart->print("AT+CIPSEND="); 00661 m_puart->print(mux_id); 00662 m_puart->print(","); 00663 m_puart->println(len); 00664 if (recvFind(">", 5000)) { 00665 m_puart->flush(); 00666 for (uint32_t i = 0; i < len; i++) { 00667 m_puart->write(buffer[i]); 00668 } 00669 return recvFind("SEND OK", 10000); 00670 } 00671 return false; 00672 } 00673 bool ESP8266::sATCIPCLOSEMulitple(uint8_t mux_id) 00674 { 00675 String data; 00676 m_puart->flush(); 00677 m_puart->print("AT+CIPCLOSE="); 00678 m_puart->println(mux_id); 00679 00680 data = recvString("OK", "Link is not", 5000); 00681 if (data.indexOf("OK") != -1 || data.indexOf("Link is not") != -1) { 00682 return true; 00683 } 00684 return false; 00685 } 00686 bool ESP8266::eATCIPCLOSESingle(void) 00687 { 00688 m_puart->flush(); 00689 m_puart->println("AT+CIPCLOSE"); 00690 return recvFind("OK", 5000); 00691 } 00692 bool ESP8266::eATCIFSR(String &list) 00693 { 00694 m_puart->flush(); 00695 m_puart->println("AT+CIFSR"); 00696 return recvFindAndFilter("OK", "\r\r\n", "\r\n\r\nOK", list); 00697 } 00698 bool ESP8266::sATCIPMUX(uint8_t mode) 00699 { 00700 String data; 00701 m_puart->flush(); 00702 m_puart->print("AT+CIPMUX="); 00703 m_puart->println(mode); 00704 00705 data = recvString("OK", "Link is builded"); 00706 if (data.indexOf("OK") != -1) { 00707 return true; 00708 } 00709 return false; 00710 } 00711 bool ESP8266::sATCIPSERVER(uint8_t mode, uint32_t port) 00712 { 00713 String data; 00714 if (mode) { 00715 m_puart->flush(); 00716 m_puart->print("AT+CIPSERVER=1,"); 00717 m_puart->println(port); 00718 00719 data = recvString("OK", "no change",1000); 00720 if (data.indexOf("OK") != -1 || data.indexOf("no change") != -1) { 00721 return true; 00722 } 00723 return false; 00724 } else { 00725 m_puart->flush(); 00726 m_puart->println("AT+CIPSERVER=0"); 00727 return recvFind("\r\r\n"); 00728 } 00729 } 00730 bool ESP8266::sATCIPSTO(uint32_t timeout) 00731 { 00732 m_puart->flush(); 00733 m_puart->print("AT+CIPSTO="); 00734 m_puart->println(timeout); 00735 return recvFind("OK"); 00736 }
Generated on Wed Jul 13 2022 11:14:17 by 1.7.2