Provide an easy-to-use way to manipulate ESP8266.

Dependencies:   ArduinoAPI

Dependents:   WeeESP8266_TCPClientMultiple WeeESP8266_TCPClientSingle WeeESP8266_TCPServer WeeESP8266_UDPClientMultiple ... more

Committer:
itead
Date:
Sat Feb 07 06:12:09 2015 +0000
Revision:
11:e9bee504024d
Parent:
10:002615561b0b
Child:
13:81f2548212e5
Add log.h

Who changed what in which revision?

UserRevisionLine numberNew contents of line
itead 5:5fa655d7212c 1 /**
itead 5:5fa655d7212c 2 * @file ESP8266.cpp
itead 5:5fa655d7212c 3 * @brief The implementation of class ESP8266.
itead 5:5fa655d7212c 4 * @author Wu Pengfei<pengfei.wu@itead.cc>
itead 5:5fa655d7212c 5 * @date 2015.02
itead 5:5fa655d7212c 6 *
itead 5:5fa655d7212c 7 * @par Copyright:
itead 5:5fa655d7212c 8 * Copyright (c) 2015 ITEAD Intelligent Systems Co., Ltd. \n\n
itead 5:5fa655d7212c 9 * This program is free software; you can redistribute it and/or
itead 5:5fa655d7212c 10 * modify it under the terms of the GNU General Public License as
itead 5:5fa655d7212c 11 * published by the Free Software Foundation; either version 2 of
itead 5:5fa655d7212c 12 * the License, or (at your option) any later version. \n\n
itead 5:5fa655d7212c 13 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
itead 5:5fa655d7212c 14 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
itead 5:5fa655d7212c 15 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
itead 5:5fa655d7212c 16 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
itead 5:5fa655d7212c 17 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
itead 5:5fa655d7212c 18 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
itead 5:5fa655d7212c 19 * THE SOFTWARE.
itead 5:5fa655d7212c 20 */
itead 2:fb209f93f3f1 21 #include "ESP8266.h"
itead 0:d3b93948c925 22
itead 5:5fa655d7212c 23 ESP8266::ESP8266(ArduinoSerial &uart): m_puart(&uart)
itead 5:5fa655d7212c 24 {
itead 5:5fa655d7212c 25 m_puart->begin(9600);
itead 5:5fa655d7212c 26 m_puart->flush();
itead 5:5fa655d7212c 27 }
itead 5:5fa655d7212c 28
itead 5:5fa655d7212c 29
itead 5:5fa655d7212c 30 bool ESP8266::kick(void)
itead 5:5fa655d7212c 31 {
itead 5:5fa655d7212c 32 return eAT();
itead 5:5fa655d7212c 33 }
itead 5:5fa655d7212c 34
itead 5:5fa655d7212c 35 bool ESP8266::restart(void)
itead 5:5fa655d7212c 36 {
itead 5:5fa655d7212c 37 unsigned long start;
itead 5:5fa655d7212c 38 if (eATRST()) {
itead 5:5fa655d7212c 39 delay(2000);
itead 5:5fa655d7212c 40 start = millis();
itead 5:5fa655d7212c 41 while (millis() - start < 3000) {
itead 5:5fa655d7212c 42 if (eAT()) {
itead 9:dec2cf52b744 43 delay(1500); /* Waiting for stable */
itead 5:5fa655d7212c 44 return true;
itead 5:5fa655d7212c 45 }
itead 5:5fa655d7212c 46 delay(100);
itead 5:5fa655d7212c 47 }
itead 5:5fa655d7212c 48 }
itead 5:5fa655d7212c 49 return false;
itead 5:5fa655d7212c 50 }
itead 5:5fa655d7212c 51
itead 5:5fa655d7212c 52 String ESP8266::getVersion(void)
itead 5:5fa655d7212c 53 {
itead 6:18eb2d9fb2ac 54 String version;
itead 6:18eb2d9fb2ac 55 eATGMR(version);
itead 6:18eb2d9fb2ac 56 return version;
itead 5:5fa655d7212c 57 }
itead 5:5fa655d7212c 58
itead 5:5fa655d7212c 59 bool ESP8266::setOprToStation(void)
itead 5:5fa655d7212c 60 {
itead 10:002615561b0b 61 uint8_t mode;
itead 10:002615561b0b 62 if (!qATCWMODE(&mode)) {
itead 10:002615561b0b 63 return false;
itead 10:002615561b0b 64 }
itead 10:002615561b0b 65 if (mode == 1) {
itead 5:5fa655d7212c 66 return true;
itead 10:002615561b0b 67 } else {
itead 10:002615561b0b 68 if (sATCWMODE(1) && restart()) {
itead 10:002615561b0b 69 return true;
itead 10:002615561b0b 70 } else {
itead 10:002615561b0b 71 return false;
itead 10:002615561b0b 72 }
itead 5:5fa655d7212c 73 }
itead 5:5fa655d7212c 74 }
itead 5:5fa655d7212c 75
itead 5:5fa655d7212c 76 bool ESP8266::setOprToSoftAP(void)
itead 5:5fa655d7212c 77 {
itead 10:002615561b0b 78 uint8_t mode;
itead 10:002615561b0b 79 if (!qATCWMODE(&mode)) {
itead 10:002615561b0b 80 return false;
itead 10:002615561b0b 81 }
itead 10:002615561b0b 82 if (mode == 2) {
itead 5:5fa655d7212c 83 return true;
itead 10:002615561b0b 84 } else {
itead 10:002615561b0b 85 if (sATCWMODE(2) && restart()) {
itead 10:002615561b0b 86 return true;
itead 10:002615561b0b 87 } else {
itead 10:002615561b0b 88 return false;
itead 10:002615561b0b 89 }
itead 5:5fa655d7212c 90 }
itead 5:5fa655d7212c 91 }
itead 5:5fa655d7212c 92
itead 5:5fa655d7212c 93 bool ESP8266::setOprToStationSoftAP(void)
itead 5:5fa655d7212c 94 {
itead 10:002615561b0b 95 uint8_t mode;
itead 10:002615561b0b 96 if (!qATCWMODE(&mode)) {
itead 10:002615561b0b 97 return false;
itead 10:002615561b0b 98 }
itead 10:002615561b0b 99 if (mode == 3) {
itead 5:5fa655d7212c 100 return true;
itead 10:002615561b0b 101 } else {
itead 10:002615561b0b 102 if (sATCWMODE(3) && restart()) {
itead 10:002615561b0b 103 return true;
itead 10:002615561b0b 104 } else {
itead 10:002615561b0b 105 return false;
itead 10:002615561b0b 106 }
itead 5:5fa655d7212c 107 }
itead 5:5fa655d7212c 108 }
itead 5:5fa655d7212c 109
itead 5:5fa655d7212c 110 String ESP8266::getAPList(void)
itead 5:5fa655d7212c 111 {
itead 9:dec2cf52b744 112 String list;
itead 9:dec2cf52b744 113 eATCWLAP(list);
itead 9:dec2cf52b744 114 return list;
itead 5:5fa655d7212c 115 }
itead 5:5fa655d7212c 116
itead 5:5fa655d7212c 117 bool ESP8266::joinAP(String ssid, String pwd)
itead 5:5fa655d7212c 118 {
itead 9:dec2cf52b744 119 return sATCWJAP(ssid, pwd);
itead 5:5fa655d7212c 120 }
itead 5:5fa655d7212c 121
itead 5:5fa655d7212c 122 bool ESP8266::leaveAP(void)
itead 5:5fa655d7212c 123 {
itead 9:dec2cf52b744 124 return eATCWQAP();
itead 5:5fa655d7212c 125 }
itead 5:5fa655d7212c 126
itead 5:5fa655d7212c 127 bool ESP8266::setSoftAPParam(String ssid, String pwd, uint8_t chl, uint8_t ecn)
itead 5:5fa655d7212c 128 {
itead 9:dec2cf52b744 129 return sATCWSAP(ssid, pwd, chl, ecn);
itead 5:5fa655d7212c 130 }
itead 5:5fa655d7212c 131
itead 5:5fa655d7212c 132 String ESP8266::getJoinedDeviceIP(void)
itead 5:5fa655d7212c 133 {
itead 9:dec2cf52b744 134 String list;
itead 9:dec2cf52b744 135 eATCWLIF(list);
itead 9:dec2cf52b744 136 return list;
itead 5:5fa655d7212c 137 }
itead 5:5fa655d7212c 138
itead 5:5fa655d7212c 139 String ESP8266::getIPStatus(void)
itead 5:5fa655d7212c 140 {
itead 9:dec2cf52b744 141 String list;
itead 9:dec2cf52b744 142 eATCIPSTATUS(list);
itead 9:dec2cf52b744 143 return list;
itead 5:5fa655d7212c 144 }
itead 5:5fa655d7212c 145
itead 5:5fa655d7212c 146 String ESP8266::getLocalIP(void)
itead 5:5fa655d7212c 147 {
itead 9:dec2cf52b744 148 String list;
itead 9:dec2cf52b744 149 eATCIFSR(list);
itead 9:dec2cf52b744 150 return list;
itead 5:5fa655d7212c 151 }
itead 5:5fa655d7212c 152
itead 5:5fa655d7212c 153 bool ESP8266::enableMUX(void)
itead 5:5fa655d7212c 154 {
itead 9:dec2cf52b744 155 return sATCIPMUX(1);
itead 5:5fa655d7212c 156 }
itead 5:5fa655d7212c 157
itead 5:5fa655d7212c 158 bool ESP8266::disableMUX(void)
itead 5:5fa655d7212c 159 {
itead 9:dec2cf52b744 160 return sATCIPMUX(0);
itead 5:5fa655d7212c 161 }
itead 5:5fa655d7212c 162
itead 5:5fa655d7212c 163 bool ESP8266::createTCP(String addr, uint32_t port)
itead 5:5fa655d7212c 164 {
itead 9:dec2cf52b744 165 return sATCIPSTARTSingle("TCP", addr, port);
itead 5:5fa655d7212c 166 }
itead 5:5fa655d7212c 167
itead 5:5fa655d7212c 168 bool ESP8266::releaseTCP(void)
itead 5:5fa655d7212c 169 {
itead 9:dec2cf52b744 170 return eATCIPCLOSESingle();
itead 5:5fa655d7212c 171 }
itead 5:5fa655d7212c 172
itead 5:5fa655d7212c 173 bool ESP8266::registerUDP(String addr, uint32_t port)
itead 5:5fa655d7212c 174 {
itead 9:dec2cf52b744 175 return sATCIPSTARTSingle("UDP", addr, port);
itead 5:5fa655d7212c 176 }
itead 5:5fa655d7212c 177
itead 5:5fa655d7212c 178 bool ESP8266::unregisterUDP(void)
itead 5:5fa655d7212c 179 {
itead 9:dec2cf52b744 180 return eATCIPCLOSESingle();
itead 5:5fa655d7212c 181 }
itead 5:5fa655d7212c 182
itead 5:5fa655d7212c 183 bool ESP8266::createTCP(uint8_t mux_id, String addr, uint32_t port)
itead 5:5fa655d7212c 184 {
itead 9:dec2cf52b744 185 return sATCIPSTARTMultiple(mux_id, "TCP", addr, port);
itead 5:5fa655d7212c 186 }
itead 5:5fa655d7212c 187
itead 5:5fa655d7212c 188 bool ESP8266::releaseTCP(uint8_t mux_id)
itead 5:5fa655d7212c 189 {
itead 9:dec2cf52b744 190 return sATCIPCLOSEMulitple(mux_id);
itead 5:5fa655d7212c 191 }
itead 5:5fa655d7212c 192
itead 5:5fa655d7212c 193 bool ESP8266::registerUDP(uint8_t mux_id, String addr, uint32_t port)
itead 5:5fa655d7212c 194 {
itead 9:dec2cf52b744 195 return sATCIPSTARTMultiple(mux_id, "UDP", addr, port);
itead 5:5fa655d7212c 196 }
itead 5:5fa655d7212c 197
itead 5:5fa655d7212c 198 bool ESP8266::unregisterUDP(uint8_t mux_id)
itead 5:5fa655d7212c 199 {
itead 9:dec2cf52b744 200 return sATCIPCLOSEMulitple(mux_id);
itead 5:5fa655d7212c 201 }
itead 5:5fa655d7212c 202
itead 5:5fa655d7212c 203 bool ESP8266::setTCPServerTimeout(uint32_t timeout)
itead 5:5fa655d7212c 204 {
itead 9:dec2cf52b744 205 return sATCIPSTO(timeout);
itead 5:5fa655d7212c 206 }
itead 5:5fa655d7212c 207
itead 5:5fa655d7212c 208 bool ESP8266::startTCPServer(uint32_t port)
itead 5:5fa655d7212c 209 {
itead 9:dec2cf52b744 210 if (enableMUX() && sATCIPSERVER(1, port)) {
itead 9:dec2cf52b744 211 return true;
itead 9:dec2cf52b744 212 }
itead 5:5fa655d7212c 213 return false;
itead 5:5fa655d7212c 214 }
itead 5:5fa655d7212c 215
itead 5:5fa655d7212c 216 bool ESP8266::stopTCPServer(void)
itead 5:5fa655d7212c 217 {
itead 9:dec2cf52b744 218 sATCIPSERVER(0);
itead 9:dec2cf52b744 219 restart();
itead 5:5fa655d7212c 220 return false;
itead 5:5fa655d7212c 221 }
itead 5:5fa655d7212c 222
itead 5:5fa655d7212c 223 bool ESP8266::send(const uint8_t *buffer, uint32_t len)
itead 5:5fa655d7212c 224 {
itead 9:dec2cf52b744 225 return sATCIPSENDSingle(buffer, len);
itead 9:dec2cf52b744 226 }
itead 9:dec2cf52b744 227
itead 9:dec2cf52b744 228 bool ESP8266::send(uint8_t mux_id, const uint8_t *buffer, uint32_t len)
itead 9:dec2cf52b744 229 {
itead 9:dec2cf52b744 230 return sATCIPSENDMultiple(mux_id, buffer, len);
itead 9:dec2cf52b744 231 }
itead 9:dec2cf52b744 232
itead 9:dec2cf52b744 233 uint32_t ESP8266::recv(uint8_t *buffer, uint32_t buffer_size, uint32_t timeout)
itead 9:dec2cf52b744 234 {
itead 9:dec2cf52b744 235 return recvPkg(buffer, buffer_size, NULL, timeout, NULL);
itead 5:5fa655d7212c 236 }
itead 5:5fa655d7212c 237
itead 9:dec2cf52b744 238 uint32_t ESP8266::recv(uint8_t mux_id, uint8_t *buffer, uint32_t buffer_size, uint32_t timeout)
itead 5:5fa655d7212c 239 {
itead 9:dec2cf52b744 240 uint8_t id;
itead 9:dec2cf52b744 241 uint32_t ret;
itead 9:dec2cf52b744 242 ret = recvPkg(buffer, buffer_size, NULL, timeout, &id);
itead 9:dec2cf52b744 243 if (ret > 0 && id == mux_id) {
itead 9:dec2cf52b744 244 return ret;
itead 9:dec2cf52b744 245 }
itead 9:dec2cf52b744 246 return 0;
itead 9:dec2cf52b744 247 }
itead 9:dec2cf52b744 248
itead 9:dec2cf52b744 249 uint32_t ESP8266::recv(uint8_t *coming_mux_id, uint8_t *buffer, uint32_t buffer_size, uint32_t timeout)
itead 9:dec2cf52b744 250 {
itead 9:dec2cf52b744 251 return recvPkg(buffer, buffer_size, NULL, timeout, coming_mux_id);
itead 5:5fa655d7212c 252 }
itead 5:5fa655d7212c 253
itead 9:dec2cf52b744 254 /*----------------------------------------------------------------------------*/
itead 5:5fa655d7212c 255
itead 9:dec2cf52b744 256 uint32_t ESP8266::recvPkg(uint8_t *buffer, uint8_t buffer_size, uint32_t *data_len, uint32_t timeout, uint8_t *coming_mux_id)
itead 5:5fa655d7212c 257 {
itead 9:dec2cf52b744 258 String data;
itead 9:dec2cf52b744 259 char a;
itead 9:dec2cf52b744 260 int32_t index_PIPDcomma = -1;
itead 9:dec2cf52b744 261 int32_t index_colon = -1; /* : */
itead 9:dec2cf52b744 262 int32_t index_comma = -1; /* , */
itead 10:002615561b0b 263 int32_t len;
itead 9:dec2cf52b744 264 int8_t id;
itead 9:dec2cf52b744 265 bool has_data = false;
itead 9:dec2cf52b744 266
itead 9:dec2cf52b744 267 unsigned long start = millis();
itead 9:dec2cf52b744 268 while (millis() - start < timeout) {
itead 9:dec2cf52b744 269 while(m_puart->available() > 0) {
itead 9:dec2cf52b744 270 a = m_puart->readChr();
itead 9:dec2cf52b744 271 data += a;
itead 9:dec2cf52b744 272 }
itead 9:dec2cf52b744 273
itead 9:dec2cf52b744 274 index_PIPDcomma = data.indexOf("+IPD,");
itead 9:dec2cf52b744 275 if (index_PIPDcomma != -1) {
itead 9:dec2cf52b744 276 index_colon = data.indexOf(':', index_PIPDcomma + 5);
itead 9:dec2cf52b744 277 if (index_colon != -1) {
itead 9:dec2cf52b744 278 index_comma = data.indexOf(',', index_PIPDcomma + 5);
itead 9:dec2cf52b744 279 if (index_comma != -1) { /* +IPD,id,len:data */
itead 9:dec2cf52b744 280 id = data.substring(index_PIPDcomma + 5, index_comma).toInt();
itead 9:dec2cf52b744 281 if (id < 0 || id > 4) {
itead 9:dec2cf52b744 282 return 0;
itead 9:dec2cf52b744 283 }
itead 9:dec2cf52b744 284 len = data.substring(index_comma + 1, index_colon).toInt();
itead 9:dec2cf52b744 285 if (len <= 0) {
itead 9:dec2cf52b744 286 return 0;
itead 9:dec2cf52b744 287 }
itead 9:dec2cf52b744 288
itead 9:dec2cf52b744 289 } else { /* +IPD,len:data */
itead 9:dec2cf52b744 290 len = data.substring(index_PIPDcomma + 5, index_colon).toInt();
itead 9:dec2cf52b744 291 if (len <= 0) {
itead 9:dec2cf52b744 292 return 0;
itead 9:dec2cf52b744 293 }
itead 9:dec2cf52b744 294 }
itead 9:dec2cf52b744 295 has_data = true;
itead 9:dec2cf52b744 296 break;
itead 9:dec2cf52b744 297 }
itead 9:dec2cf52b744 298 }
itead 9:dec2cf52b744 299 }
itead 9:dec2cf52b744 300
itead 9:dec2cf52b744 301 if (has_data) {
itead 9:dec2cf52b744 302 start = millis();
itead 9:dec2cf52b744 303 while (millis() - start < timeout) {
itead 9:dec2cf52b744 304 while(m_puart->available() > 0) {
itead 9:dec2cf52b744 305 a = m_puart->readChr();
itead 9:dec2cf52b744 306 data += a;
itead 9:dec2cf52b744 307 }
itead 9:dec2cf52b744 308 if (data.length() >= index_colon + 1 + len) {
itead 9:dec2cf52b744 309 if (data_len) {
itead 9:dec2cf52b744 310 *data_len = len;
itead 9:dec2cf52b744 311 }
itead 9:dec2cf52b744 312 if (index_comma != -1 && coming_mux_id) {
itead 9:dec2cf52b744 313 *coming_mux_id = id;
itead 9:dec2cf52b744 314 }
itead 9:dec2cf52b744 315 uint32_t ret = len > buffer_size ? buffer_size : len;
itead 9:dec2cf52b744 316 memcpy(buffer,
itead 9:dec2cf52b744 317 data.substring(index_colon + 1, index_colon + 1 + len).c_str(),
itead 9:dec2cf52b744 318 ret);
itead 9:dec2cf52b744 319 return ret;
itead 9:dec2cf52b744 320 }
itead 9:dec2cf52b744 321 }
itead 9:dec2cf52b744 322 }
itead 9:dec2cf52b744 323
itead 9:dec2cf52b744 324 return 0;
itead 5:5fa655d7212c 325 }
itead 5:5fa655d7212c 326
itead 6:18eb2d9fb2ac 327 String ESP8266::recvString(String target, uint32_t timeout)
itead 5:5fa655d7212c 328 {
itead 5:5fa655d7212c 329 String data;
itead 5:5fa655d7212c 330 char a;
itead 5:5fa655d7212c 331 unsigned long start = millis();
itead 5:5fa655d7212c 332 while (millis() - start < timeout) {
itead 5:5fa655d7212c 333 while(m_puart->available() > 0) {
itead 5:5fa655d7212c 334 a = m_puart->readChr();
itead 5:5fa655d7212c 335 data += a;
itead 5:5fa655d7212c 336 }
itead 5:5fa655d7212c 337 if (data.indexOf(target) != -1) {
itead 5:5fa655d7212c 338 break;
itead 5:5fa655d7212c 339 }
itead 5:5fa655d7212c 340 }
itead 5:5fa655d7212c 341 return data;
itead 5:5fa655d7212c 342 }
itead 5:5fa655d7212c 343
itead 6:18eb2d9fb2ac 344 String ESP8266::recvString(String target1, String target2, uint32_t timeout)
itead 5:5fa655d7212c 345 {
itead 5:5fa655d7212c 346 String data;
itead 5:5fa655d7212c 347 char a;
itead 5:5fa655d7212c 348 unsigned long start = millis();
itead 5:5fa655d7212c 349 while (millis() - start < timeout) {
itead 5:5fa655d7212c 350 while(m_puart->available() > 0) {
itead 5:5fa655d7212c 351 a = m_puart->readChr();
itead 5:5fa655d7212c 352 data += a;
itead 5:5fa655d7212c 353 }
itead 5:5fa655d7212c 354 if (data.indexOf(target1) != -1) {
itead 5:5fa655d7212c 355 break;
itead 5:5fa655d7212c 356 } else if (data.indexOf(target2) != -1) {
itead 5:5fa655d7212c 357 break;
itead 5:5fa655d7212c 358 }
itead 5:5fa655d7212c 359 }
itead 5:5fa655d7212c 360 return data;
itead 5:5fa655d7212c 361 }
itead 5:5fa655d7212c 362
itead 6:18eb2d9fb2ac 363 String ESP8266::recvString(String target1, String target2, String target3, uint32_t timeout)
itead 5:5fa655d7212c 364 {
itead 5:5fa655d7212c 365 String data;
itead 5:5fa655d7212c 366 char a;
itead 5:5fa655d7212c 367 unsigned long start = millis();
itead 5:5fa655d7212c 368 while (millis() - start < timeout) {
itead 5:5fa655d7212c 369 while(m_puart->available() > 0) {
itead 5:5fa655d7212c 370 a = m_puart->readChr();
itead 5:5fa655d7212c 371 data += a;
itead 5:5fa655d7212c 372 }
itead 5:5fa655d7212c 373 if (data.indexOf(target1) != -1) {
itead 5:5fa655d7212c 374 break;
itead 5:5fa655d7212c 375 } else if (data.indexOf(target2) != -1) {
itead 5:5fa655d7212c 376 break;
itead 5:5fa655d7212c 377 } else if (data.indexOf(target3) != -1) {
itead 5:5fa655d7212c 378 break;
itead 5:5fa655d7212c 379 }
itead 5:5fa655d7212c 380 }
itead 5:5fa655d7212c 381 return data;
itead 5:5fa655d7212c 382 }
itead 5:5fa655d7212c 383
itead 6:18eb2d9fb2ac 384 bool ESP8266::recvFind(String target, uint32_t timeout)
itead 6:18eb2d9fb2ac 385 {
itead 6:18eb2d9fb2ac 386 String data_tmp;
itead 6:18eb2d9fb2ac 387 data_tmp = recvString(target, timeout);
itead 6:18eb2d9fb2ac 388 if (data_tmp.indexOf(target) != -1) {
itead 6:18eb2d9fb2ac 389 return true;
itead 6:18eb2d9fb2ac 390 }
itead 6:18eb2d9fb2ac 391 return false;
itead 6:18eb2d9fb2ac 392 }
itead 6:18eb2d9fb2ac 393
itead 6:18eb2d9fb2ac 394 bool ESP8266::recvFindAndFilter(String target, String begin, String end, String &data, uint32_t timeout)
itead 6:18eb2d9fb2ac 395 {
itead 6:18eb2d9fb2ac 396 String data_tmp;
itead 6:18eb2d9fb2ac 397 data_tmp = recvString(target, timeout);
itead 6:18eb2d9fb2ac 398 if (data_tmp.indexOf(target) != -1) {
itead 6:18eb2d9fb2ac 399 int32_t index1 = data_tmp.indexOf(begin);
itead 6:18eb2d9fb2ac 400 int32_t index2 = data_tmp.indexOf(end);
itead 6:18eb2d9fb2ac 401 if (index1 != -1 && index2 != -1) {
itead 6:18eb2d9fb2ac 402 index1 += begin.length();
itead 6:18eb2d9fb2ac 403 data = data_tmp.substring(index1, index2);
itead 6:18eb2d9fb2ac 404 return true;
itead 6:18eb2d9fb2ac 405 }
itead 6:18eb2d9fb2ac 406 }
itead 6:18eb2d9fb2ac 407 data = "";
itead 6:18eb2d9fb2ac 408 return false;
itead 6:18eb2d9fb2ac 409 }
itead 5:5fa655d7212c 410
itead 5:5fa655d7212c 411 bool ESP8266::eAT(void)
itead 5:5fa655d7212c 412 {
itead 5:5fa655d7212c 413 m_puart->flush();
itead 5:5fa655d7212c 414 m_puart->println("AT");
itead 6:18eb2d9fb2ac 415 return recvFind("OK");
itead 5:5fa655d7212c 416 }
itead 5:5fa655d7212c 417
itead 5:5fa655d7212c 418 bool ESP8266::eATRST(void)
itead 5:5fa655d7212c 419 {
itead 5:5fa655d7212c 420 m_puart->flush();
itead 5:5fa655d7212c 421 m_puart->println("AT+RST");
itead 6:18eb2d9fb2ac 422 return recvFind("OK");
itead 5:5fa655d7212c 423 }
itead 5:5fa655d7212c 424
itead 6:18eb2d9fb2ac 425 bool ESP8266::eATGMR(String &version)
itead 5:5fa655d7212c 426 {
itead 5:5fa655d7212c 427 m_puart->flush();
itead 5:5fa655d7212c 428 m_puart->println("AT+GMR");
itead 6:18eb2d9fb2ac 429 return recvFindAndFilter("OK", "\r\r\n", "\r\n\r\nOK", version);
itead 5:5fa655d7212c 430 }
itead 5:5fa655d7212c 431
itead 10:002615561b0b 432 bool ESP8266::qATCWMODE(uint8_t *mode)
itead 10:002615561b0b 433 {
itead 10:002615561b0b 434 String str_mode;
itead 10:002615561b0b 435 bool ret;
itead 10:002615561b0b 436 if (!mode) {
itead 10:002615561b0b 437 return false;
itead 10:002615561b0b 438 }
itead 10:002615561b0b 439 m_puart->flush();
itead 10:002615561b0b 440 m_puart->println("AT+CWMODE?");
itead 10:002615561b0b 441 ret = recvFindAndFilter("OK", "+CWMODE:", "\r\n\r\nOK", str_mode);
itead 10:002615561b0b 442 if (ret) {
itead 10:002615561b0b 443 *mode = (uint8_t)str_mode.toInt();
itead 10:002615561b0b 444 return true;
itead 10:002615561b0b 445 } else {
itead 10:002615561b0b 446 return false;
itead 10:002615561b0b 447 }
itead 10:002615561b0b 448 }
itead 5:5fa655d7212c 449
itead 5:5fa655d7212c 450 bool ESP8266::sATCWMODE(uint8_t mode)
itead 5:5fa655d7212c 451 {
itead 5:5fa655d7212c 452 String data;
itead 5:5fa655d7212c 453 m_puart->flush();
itead 5:5fa655d7212c 454 m_puart->print("AT+CWMODE=");
itead 5:5fa655d7212c 455 m_puart->println(mode);
itead 7:d54995c9e1d4 456
itead 7:d54995c9e1d4 457 data = recvString("OK", "no change");
itead 7:d54995c9e1d4 458 if (data.indexOf("OK") != -1 || data.indexOf("no change") != -1) {
itead 7:d54995c9e1d4 459 return true;
itead 7:d54995c9e1d4 460 }
itead 7:d54995c9e1d4 461 return false;
itead 6:18eb2d9fb2ac 462 }
itead 6:18eb2d9fb2ac 463
itead 6:18eb2d9fb2ac 464 bool ESP8266::sATCWJAP(String ssid, String pwd)
itead 6:18eb2d9fb2ac 465 {
itead 6:18eb2d9fb2ac 466 String data;
itead 6:18eb2d9fb2ac 467 m_puart->flush();
itead 6:18eb2d9fb2ac 468 m_puart->print("AT+CWJAP=\"");
itead 6:18eb2d9fb2ac 469 m_puart->print(ssid);
itead 6:18eb2d9fb2ac 470 m_puart->print("\",\"");
itead 6:18eb2d9fb2ac 471 m_puart->print(pwd);
itead 6:18eb2d9fb2ac 472 m_puart->println("\"");
itead 6:18eb2d9fb2ac 473
itead 6:18eb2d9fb2ac 474 data = recvString("OK", "FAIL", 10000);
itead 6:18eb2d9fb2ac 475 if (data.indexOf("OK") != -1) {
itead 6:18eb2d9fb2ac 476 return true;
itead 6:18eb2d9fb2ac 477 }
itead 6:18eb2d9fb2ac 478 return false;
itead 6:18eb2d9fb2ac 479 }
itead 6:18eb2d9fb2ac 480
itead 6:18eb2d9fb2ac 481 bool ESP8266::eATCWLAP(String &list)
itead 6:18eb2d9fb2ac 482 {
itead 6:18eb2d9fb2ac 483 String data;
itead 6:18eb2d9fb2ac 484 m_puart->flush();
itead 6:18eb2d9fb2ac 485 m_puart->println("AT+CWLAP");
itead 6:18eb2d9fb2ac 486 return recvFindAndFilter("OK", "\r\r\n", "\r\n\r\nOK", list, 10000);
itead 6:18eb2d9fb2ac 487 }
itead 6:18eb2d9fb2ac 488
itead 6:18eb2d9fb2ac 489 bool ESP8266::eATCWQAP(void)
itead 6:18eb2d9fb2ac 490 {
itead 6:18eb2d9fb2ac 491 String data;
itead 6:18eb2d9fb2ac 492 m_puart->flush();
itead 6:18eb2d9fb2ac 493 m_puart->println("AT+CWQAP");
itead 6:18eb2d9fb2ac 494 return recvFind("OK");
itead 6:18eb2d9fb2ac 495 }
itead 6:18eb2d9fb2ac 496
itead 6:18eb2d9fb2ac 497 bool ESP8266::sATCWSAP(String ssid, String pwd, uint8_t chl, uint8_t ecn)
itead 6:18eb2d9fb2ac 498 {
itead 6:18eb2d9fb2ac 499 String data;
itead 6:18eb2d9fb2ac 500 m_puart->flush();
itead 6:18eb2d9fb2ac 501 m_puart->print("AT+CWSAP=\"");
itead 6:18eb2d9fb2ac 502 m_puart->print(ssid);
itead 6:18eb2d9fb2ac 503 m_puart->print("\",\"");
itead 6:18eb2d9fb2ac 504 m_puart->print(pwd);
itead 6:18eb2d9fb2ac 505 m_puart->print("\",");
itead 6:18eb2d9fb2ac 506 m_puart->print(chl);
itead 6:18eb2d9fb2ac 507 m_puart->print(",");
itead 6:18eb2d9fb2ac 508 m_puart->println(ecn);
itead 6:18eb2d9fb2ac 509
itead 6:18eb2d9fb2ac 510 data = recvString("OK", "ERROR", 5000);
itead 5:5fa655d7212c 511 if (data.indexOf("OK") != -1) {
itead 5:5fa655d7212c 512 return true;
itead 5:5fa655d7212c 513 }
itead 5:5fa655d7212c 514 return false;
itead 5:5fa655d7212c 515 }
itead 5:5fa655d7212c 516
itead 6:18eb2d9fb2ac 517 bool ESP8266::eATCWLIF(String &list)
itead 6:18eb2d9fb2ac 518 {
itead 6:18eb2d9fb2ac 519 String data;
itead 6:18eb2d9fb2ac 520 m_puart->flush();
itead 6:18eb2d9fb2ac 521 m_puart->println("AT+CWLIF");
itead 6:18eb2d9fb2ac 522 return recvFindAndFilter("OK", "\r\r\n", "\r\n\r\nOK", list);
itead 6:18eb2d9fb2ac 523 }
itead 6:18eb2d9fb2ac 524 bool ESP8266::eATCIPSTATUS(String &list)
itead 6:18eb2d9fb2ac 525 {
itead 6:18eb2d9fb2ac 526 String data;
itead 6:18eb2d9fb2ac 527 m_puart->flush();
itead 6:18eb2d9fb2ac 528 m_puart->println("AT+CIPSTATUS");
itead 6:18eb2d9fb2ac 529 return recvFindAndFilter("OK", "\r\r\n", "\r\n\r\nOK", list);
itead 6:18eb2d9fb2ac 530 }
itead 6:18eb2d9fb2ac 531 bool ESP8266::sATCIPSTARTSingle(String type, String addr, uint32_t port)
itead 6:18eb2d9fb2ac 532 {
itead 6:18eb2d9fb2ac 533 String data;
itead 6:18eb2d9fb2ac 534 m_puart->flush();
itead 6:18eb2d9fb2ac 535 m_puart->print("AT+CIPSTART=\"");
itead 6:18eb2d9fb2ac 536 m_puart->print(type);
itead 6:18eb2d9fb2ac 537 m_puart->print("\",\"");
itead 6:18eb2d9fb2ac 538 m_puart->print(addr);
itead 6:18eb2d9fb2ac 539 m_puart->print("\",");
itead 6:18eb2d9fb2ac 540 m_puart->println(port);
itead 6:18eb2d9fb2ac 541
itead 6:18eb2d9fb2ac 542 data = recvString("OK", "ERROR", "ALREADY CONNECT", 10000);
itead 6:18eb2d9fb2ac 543 if (data.indexOf("OK") != -1 || data.indexOf("ALREADY CONNECT") != -1) {
itead 6:18eb2d9fb2ac 544 return true;
itead 6:18eb2d9fb2ac 545 }
itead 6:18eb2d9fb2ac 546 return false;
itead 6:18eb2d9fb2ac 547 }
itead 6:18eb2d9fb2ac 548 bool ESP8266::sATCIPSTARTMultiple(uint8_t mux_id, String type, String addr, uint32_t port)
itead 6:18eb2d9fb2ac 549 {
itead 6:18eb2d9fb2ac 550 String data;
itead 6:18eb2d9fb2ac 551 m_puart->flush();
itead 6:18eb2d9fb2ac 552 m_puart->print("AT+CIPSTART=");
itead 6:18eb2d9fb2ac 553 m_puart->print(mux_id);
itead 6:18eb2d9fb2ac 554 m_puart->print(",\"");
itead 6:18eb2d9fb2ac 555 m_puart->print(type);
itead 6:18eb2d9fb2ac 556 m_puart->print("\",\"");
itead 6:18eb2d9fb2ac 557 m_puart->print(addr);
itead 6:18eb2d9fb2ac 558 m_puart->print("\",");
itead 6:18eb2d9fb2ac 559 m_puart->println(port);
itead 6:18eb2d9fb2ac 560
itead 6:18eb2d9fb2ac 561 data = recvString("OK", "ERROR", "ALREADY CONNECT", 10000);
itead 6:18eb2d9fb2ac 562 if (data.indexOf("OK") != -1 || data.indexOf("ALREADY CONNECT") != -1) {
itead 6:18eb2d9fb2ac 563 return true;
itead 6:18eb2d9fb2ac 564 }
itead 6:18eb2d9fb2ac 565 return false;
itead 6:18eb2d9fb2ac 566 }
itead 9:dec2cf52b744 567 bool ESP8266::sATCIPSENDSingle(const uint8_t *buffer, uint32_t len)
itead 6:18eb2d9fb2ac 568 {
itead 7:d54995c9e1d4 569 m_puart->flush();
itead 7:d54995c9e1d4 570 m_puart->print("AT+CIPSEND=");
itead 7:d54995c9e1d4 571 m_puart->println(len);
itead 7:d54995c9e1d4 572 if (recvFind(">")) {
itead 7:d54995c9e1d4 573 m_puart->flush();
itead 7:d54995c9e1d4 574 for (uint32_t i = 0; i < len; i++) {
itead 7:d54995c9e1d4 575 m_puart->write(buffer[i]);
itead 7:d54995c9e1d4 576 }
itead 7:d54995c9e1d4 577 return recvFind("SEND OK", 5000);
itead 7:d54995c9e1d4 578 }
itead 6:18eb2d9fb2ac 579 return false;
itead 6:18eb2d9fb2ac 580 }
itead 9:dec2cf52b744 581 bool ESP8266::sATCIPSENDMultiple(uint8_t mux_id, const uint8_t *buffer, uint32_t len)
itead 6:18eb2d9fb2ac 582 {
itead 7:d54995c9e1d4 583 m_puart->flush();
itead 7:d54995c9e1d4 584 m_puart->print("AT+CIPSEND=");
itead 7:d54995c9e1d4 585 m_puart->print(mux_id);
itead 7:d54995c9e1d4 586 m_puart->print(",");
itead 7:d54995c9e1d4 587 m_puart->println(len);
itead 7:d54995c9e1d4 588 if (recvFind(">")) {
itead 7:d54995c9e1d4 589 m_puart->flush();
itead 7:d54995c9e1d4 590 for (uint32_t i = 0; i < len; i++) {
itead 7:d54995c9e1d4 591 m_puart->write(buffer[i]);
itead 7:d54995c9e1d4 592 }
itead 7:d54995c9e1d4 593 return recvFind("SEND OK", 5000);
itead 7:d54995c9e1d4 594 }
itead 6:18eb2d9fb2ac 595 return false;
itead 6:18eb2d9fb2ac 596 }
itead 6:18eb2d9fb2ac 597 bool ESP8266::sATCIPCLOSEMulitple(uint8_t mux_id)
itead 6:18eb2d9fb2ac 598 {
itead 7:d54995c9e1d4 599 String data;
itead 7:d54995c9e1d4 600 m_puart->flush();
itead 7:d54995c9e1d4 601 m_puart->print("AT+CIPCLOSE=");
itead 7:d54995c9e1d4 602 m_puart->println(mux_id);
itead 7:d54995c9e1d4 603
itead 7:d54995c9e1d4 604 data = recvString("OK", "Link is not", 3000);
itead 7:d54995c9e1d4 605 if (data.indexOf("OK") != -1 || data.indexOf("Link is not") != -1) {
itead 7:d54995c9e1d4 606 return true;
itead 7:d54995c9e1d4 607 }
itead 6:18eb2d9fb2ac 608 return false;
itead 6:18eb2d9fb2ac 609 }
itead 6:18eb2d9fb2ac 610 bool ESP8266::eATCIPCLOSESingle(void)
itead 6:18eb2d9fb2ac 611 {
itead 7:d54995c9e1d4 612 m_puart->flush();
itead 7:d54995c9e1d4 613 m_puart->println("AT+CIPCLOSE");
itead 7:d54995c9e1d4 614 return recvFind("OK", 3000);
itead 6:18eb2d9fb2ac 615 }
itead 6:18eb2d9fb2ac 616 bool ESP8266::eATCIFSR(String &list)
itead 6:18eb2d9fb2ac 617 {
itead 7:d54995c9e1d4 618 m_puart->flush();
itead 7:d54995c9e1d4 619 m_puart->println("AT+CIFSR");
itead 7:d54995c9e1d4 620 return recvFindAndFilter("OK", "\r\r\n", "\r\n\r\nOK", list);
itead 6:18eb2d9fb2ac 621 }
itead 6:18eb2d9fb2ac 622 bool ESP8266::sATCIPMUX(uint8_t mode)
itead 6:18eb2d9fb2ac 623 {
itead 7:d54995c9e1d4 624 String data;
itead 7:d54995c9e1d4 625 m_puart->flush();
itead 7:d54995c9e1d4 626 m_puart->print("AT+CIPMUX=");
itead 7:d54995c9e1d4 627 m_puart->println(mode);
itead 7:d54995c9e1d4 628
itead 7:d54995c9e1d4 629 data = recvString("OK", "Link is builded");
itead 7:d54995c9e1d4 630 if (data.indexOf("OK") != -1) {
itead 7:d54995c9e1d4 631 return true;
itead 7:d54995c9e1d4 632 }
itead 6:18eb2d9fb2ac 633 return false;
itead 6:18eb2d9fb2ac 634 }
itead 6:18eb2d9fb2ac 635 bool ESP8266::sATCIPSERVER(uint8_t mode, uint32_t port)
itead 6:18eb2d9fb2ac 636 {
itead 7:d54995c9e1d4 637 String data;
itead 7:d54995c9e1d4 638 if (mode) {
itead 7:d54995c9e1d4 639 m_puart->flush();
itead 7:d54995c9e1d4 640 m_puart->print("AT+CIPSERVER=1,");
itead 7:d54995c9e1d4 641 m_puart->println(port);
itead 7:d54995c9e1d4 642
itead 7:d54995c9e1d4 643 data = recvString("OK", "no change");
itead 7:d54995c9e1d4 644 if (data.indexOf("OK") != -1 || data.indexOf("no change") != -1) {
itead 7:d54995c9e1d4 645 return true;
itead 7:d54995c9e1d4 646 }
itead 7:d54995c9e1d4 647 return false;
itead 7:d54995c9e1d4 648 } else {
itead 7:d54995c9e1d4 649 m_puart->flush();
itead 7:d54995c9e1d4 650 m_puart->println("AT+CIPSERVER=0");
itead 8:60d15efb4a1f 651 return recvFind("\r\r\n");
itead 7:d54995c9e1d4 652 }
itead 6:18eb2d9fb2ac 653 }
itead 6:18eb2d9fb2ac 654 bool ESP8266::sATCIPSTO(uint32_t timeout)
itead 6:18eb2d9fb2ac 655 {
itead 7:d54995c9e1d4 656 m_puart->flush();
itead 7:d54995c9e1d4 657 m_puart->print("AT+CIPSTO=");
itead 7:d54995c9e1d4 658 m_puart->println(timeout);
itead 7:d54995c9e1d4 659 return recvFind("OK");
itead 6:18eb2d9fb2ac 660 }