Dopasowany do naszego firmware'u

Dependencies:   ArduinoAPI

Fork of WeeESP8266 by ITEAD STUDIO

Committer:
itead
Date:
Sat Feb 07 06:05:56 2015 +0000
Revision:
10:002615561b0b
Parent:
9:dec2cf52b744
Child:
11:e9bee504024d
Okay

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