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

Dependencies:   ArduinoAPI

Fork of WeeESP8266 by ITEAD STUDIO

Committer:
itead
Date:
Fri Feb 06 09:26:37 2015 +0000
Revision:
5:5fa655d7212c
Parent:
2:fb209f93f3f1
Child:
6:18eb2d9fb2ac
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 m_puart->setTimeout(1000);
itead 5:5fa655d7212c 29 logDebug("Create Instance ok");
itead 5:5fa655d7212c 30 }
itead 5:5fa655d7212c 31
itead 5:5fa655d7212c 32
itead 5:5fa655d7212c 33 bool ESP8266::kick(void)
itead 5:5fa655d7212c 34 {
itead 5:5fa655d7212c 35 return eAT();
itead 5:5fa655d7212c 36 }
itead 5:5fa655d7212c 37
itead 5:5fa655d7212c 38 bool ESP8266::restart(void)
itead 5:5fa655d7212c 39 {
itead 5:5fa655d7212c 40 unsigned long start;
itead 5:5fa655d7212c 41 if (eATRST()) {
itead 5:5fa655d7212c 42 delay(2000);
itead 5:5fa655d7212c 43 start = millis();
itead 5:5fa655d7212c 44 while (millis() - start < 3000) {
itead 5:5fa655d7212c 45 if (eAT()) {
itead 5:5fa655d7212c 46 delay(500);
itead 5:5fa655d7212c 47 return true;
itead 5:5fa655d7212c 48 }
itead 5:5fa655d7212c 49 delay(100);
itead 5:5fa655d7212c 50 }
itead 5:5fa655d7212c 51 }
itead 5:5fa655d7212c 52 return false;
itead 5:5fa655d7212c 53 }
itead 5:5fa655d7212c 54
itead 5:5fa655d7212c 55 String ESP8266::getVersion(void)
itead 5:5fa655d7212c 56 {
itead 5:5fa655d7212c 57 return eATGMR();
itead 5:5fa655d7212c 58 }
itead 5:5fa655d7212c 59
itead 5:5fa655d7212c 60 bool ESP8266::setOprToStation(void)
itead 5:5fa655d7212c 61 {
itead 5:5fa655d7212c 62 if (sATCWMODE(1) && restart()) {
itead 5:5fa655d7212c 63 return true;
itead 5:5fa655d7212c 64 }
itead 5:5fa655d7212c 65 return false;
itead 5:5fa655d7212c 66 }
itead 5:5fa655d7212c 67
itead 5:5fa655d7212c 68 bool ESP8266::setOprToSoftAP(void)
itead 5:5fa655d7212c 69 {
itead 5:5fa655d7212c 70 if (sATCWMODE(2) && restart()) {
itead 5:5fa655d7212c 71 return true;
itead 5:5fa655d7212c 72 }
itead 5:5fa655d7212c 73 return false;
itead 5:5fa655d7212c 74 }
itead 5:5fa655d7212c 75
itead 5:5fa655d7212c 76 bool ESP8266::setOprToStationSoftAP(void)
itead 5:5fa655d7212c 77 {
itead 5:5fa655d7212c 78 if (sATCWMODE(3) && restart()) {
itead 5:5fa655d7212c 79 return true;
itead 5:5fa655d7212c 80 }
itead 5:5fa655d7212c 81 return false;
itead 5:5fa655d7212c 82 }
itead 5:5fa655d7212c 83
itead 5:5fa655d7212c 84 String ESP8266::getAPList(void)
itead 5:5fa655d7212c 85 {
itead 5:5fa655d7212c 86 return "";
itead 5:5fa655d7212c 87 }
itead 5:5fa655d7212c 88
itead 5:5fa655d7212c 89 bool ESP8266::joinAP(String ssid, String pwd)
itead 5:5fa655d7212c 90 {
itead 5:5fa655d7212c 91 return false;
itead 5:5fa655d7212c 92 }
itead 5:5fa655d7212c 93
itead 5:5fa655d7212c 94 bool ESP8266::leaveAP(void)
itead 5:5fa655d7212c 95 {
itead 5:5fa655d7212c 96 return false;
itead 5:5fa655d7212c 97 }
itead 5:5fa655d7212c 98
itead 5:5fa655d7212c 99 bool ESP8266::setSoftAPParam(String ssid, String pwd, uint8_t chl, uint8_t ecn)
itead 5:5fa655d7212c 100 {
itead 5:5fa655d7212c 101 return false;
itead 5:5fa655d7212c 102 }
itead 5:5fa655d7212c 103
itead 5:5fa655d7212c 104 String ESP8266::getJoinedDeviceIP(void)
itead 5:5fa655d7212c 105 {
itead 5:5fa655d7212c 106 return "";
itead 5:5fa655d7212c 107 }
itead 5:5fa655d7212c 108
itead 5:5fa655d7212c 109 String ESP8266::getIPStatus(void)
itead 5:5fa655d7212c 110 {
itead 5:5fa655d7212c 111 return "";
itead 5:5fa655d7212c 112 }
itead 5:5fa655d7212c 113
itead 5:5fa655d7212c 114 String ESP8266::getLocalIP(void)
itead 5:5fa655d7212c 115 {
itead 5:5fa655d7212c 116 return "";
itead 5:5fa655d7212c 117 }
itead 5:5fa655d7212c 118
itead 5:5fa655d7212c 119 bool ESP8266::enableMUX(void)
itead 5:5fa655d7212c 120 {
itead 5:5fa655d7212c 121 return false;
itead 5:5fa655d7212c 122 }
itead 5:5fa655d7212c 123
itead 5:5fa655d7212c 124 bool ESP8266::disableMUX(void)
itead 5:5fa655d7212c 125 {
itead 5:5fa655d7212c 126 return false;
itead 5:5fa655d7212c 127 }
itead 5:5fa655d7212c 128
itead 5:5fa655d7212c 129 bool ESP8266::createTCP(String addr, uint32_t port)
itead 5:5fa655d7212c 130 {
itead 5:5fa655d7212c 131 return false;
itead 5:5fa655d7212c 132 }
itead 5:5fa655d7212c 133
itead 5:5fa655d7212c 134 bool ESP8266::releaseTCP(void)
itead 5:5fa655d7212c 135 {
itead 5:5fa655d7212c 136 return false;
itead 5:5fa655d7212c 137 }
itead 5:5fa655d7212c 138
itead 5:5fa655d7212c 139 bool ESP8266::registerUDP(String addr, uint32_t port)
itead 5:5fa655d7212c 140 {
itead 5:5fa655d7212c 141 return false;
itead 5:5fa655d7212c 142 }
itead 5:5fa655d7212c 143
itead 5:5fa655d7212c 144 bool ESP8266::unregisterUDP(void)
itead 5:5fa655d7212c 145 {
itead 5:5fa655d7212c 146 return false;
itead 5:5fa655d7212c 147 }
itead 5:5fa655d7212c 148
itead 5:5fa655d7212c 149 bool ESP8266::createTCP(uint8_t mux_id, String addr, uint32_t port)
itead 5:5fa655d7212c 150 {
itead 5:5fa655d7212c 151 return false;
itead 5:5fa655d7212c 152 }
itead 5:5fa655d7212c 153
itead 5:5fa655d7212c 154 bool ESP8266::releaseTCP(uint8_t mux_id)
itead 5:5fa655d7212c 155 {
itead 5:5fa655d7212c 156 return false;
itead 5:5fa655d7212c 157 }
itead 5:5fa655d7212c 158
itead 5:5fa655d7212c 159 bool ESP8266::registerUDP(uint8_t mux_id, String addr, uint32_t port)
itead 5:5fa655d7212c 160 {
itead 5:5fa655d7212c 161 return false;
itead 5:5fa655d7212c 162 }
itead 5:5fa655d7212c 163
itead 5:5fa655d7212c 164 bool ESP8266::unregisterUDP(uint8_t mux_id)
itead 5:5fa655d7212c 165 {
itead 5:5fa655d7212c 166 return false;
itead 5:5fa655d7212c 167 }
itead 5:5fa655d7212c 168
itead 5:5fa655d7212c 169 bool ESP8266::setTCPServerTimeout(uint32_t timeout)
itead 5:5fa655d7212c 170 {
itead 5:5fa655d7212c 171 return false;
itead 5:5fa655d7212c 172 }
itead 5:5fa655d7212c 173
itead 5:5fa655d7212c 174 bool ESP8266::startTCPServer(uint32_t port)
itead 5:5fa655d7212c 175 {
itead 5:5fa655d7212c 176 return false;
itead 5:5fa655d7212c 177 }
itead 5:5fa655d7212c 178
itead 5:5fa655d7212c 179 bool ESP8266::stopTCPServer(void)
itead 5:5fa655d7212c 180 {
itead 5:5fa655d7212c 181 return false;
itead 5:5fa655d7212c 182 }
itead 5:5fa655d7212c 183
itead 5:5fa655d7212c 184 bool ESP8266::send(const uint8_t *buffer, uint32_t len)
itead 5:5fa655d7212c 185 {
itead 5:5fa655d7212c 186 return false;
itead 5:5fa655d7212c 187 }
itead 5:5fa655d7212c 188
itead 5:5fa655d7212c 189 bool ESP8266::send(uint8_t mux_id, const char *buffer, uint32_t len)
itead 5:5fa655d7212c 190 {
itead 5:5fa655d7212c 191 return false;
itead 5:5fa655d7212c 192 }
itead 5:5fa655d7212c 193
itead 5:5fa655d7212c 194 uint32_t ESP8266::recv(uint8_t *buffer, uint32_t len, uint32_t timeout)
itead 5:5fa655d7212c 195 {
itead 5:5fa655d7212c 196 return false;
itead 5:5fa655d7212c 197 }
itead 5:5fa655d7212c 198
itead 5:5fa655d7212c 199 uint32_t ESP8266::recv(uint8_t mux_id, uint8_t *buffer, uint32_t len, uint32_t timeout)
itead 5:5fa655d7212c 200 {
itead 5:5fa655d7212c 201 return false;
itead 5:5fa655d7212c 202 }
itead 5:5fa655d7212c 203
itead 5:5fa655d7212c 204 uint32_t ESP8266::recv(uint8_t *coming_mux_id, uint8_t *buffer, uint32_t len, uint32_t timeout)
itead 5:5fa655d7212c 205 {
itead 5:5fa655d7212c 206 return false;
itead 5:5fa655d7212c 207 }
itead 5:5fa655d7212c 208
itead 5:5fa655d7212c 209
itead 5:5fa655d7212c 210 String ESP8266::recvFind(String target, uint32_t timeout)
itead 5:5fa655d7212c 211 {
itead 5:5fa655d7212c 212 String data;
itead 5:5fa655d7212c 213 char a;
itead 5:5fa655d7212c 214 unsigned long start = millis();
itead 5:5fa655d7212c 215 while (millis() - start < timeout) {
itead 5:5fa655d7212c 216 while(m_puart->available() > 0) {
itead 5:5fa655d7212c 217 a = m_puart->readChr();
itead 5:5fa655d7212c 218 data += a;
itead 5:5fa655d7212c 219 }
itead 5:5fa655d7212c 220 if (data.indexOf(target) != -1) {
itead 5:5fa655d7212c 221 break;
itead 5:5fa655d7212c 222 }
itead 5:5fa655d7212c 223 }
itead 5:5fa655d7212c 224 return data;
itead 5:5fa655d7212c 225 }
itead 5:5fa655d7212c 226
itead 5:5fa655d7212c 227
itead 5:5fa655d7212c 228 String ESP8266::recvFind(String target1, String target2, uint32_t timeout)
itead 5:5fa655d7212c 229 {
itead 5:5fa655d7212c 230 String data;
itead 5:5fa655d7212c 231 char a;
itead 5:5fa655d7212c 232 unsigned long start = millis();
itead 5:5fa655d7212c 233 while (millis() - start < timeout) {
itead 5:5fa655d7212c 234 while(m_puart->available() > 0) {
itead 5:5fa655d7212c 235 a = m_puart->readChr();
itead 5:5fa655d7212c 236 data += a;
itead 5:5fa655d7212c 237 }
itead 5:5fa655d7212c 238 if (data.indexOf(target1) != -1) {
itead 5:5fa655d7212c 239 break;
itead 5:5fa655d7212c 240 } else if (data.indexOf(target2) != -1) {
itead 5:5fa655d7212c 241 break;
itead 5:5fa655d7212c 242 }
itead 5:5fa655d7212c 243 }
itead 5:5fa655d7212c 244 return data;
itead 5:5fa655d7212c 245 }
itead 5:5fa655d7212c 246
itead 5:5fa655d7212c 247 String ESP8266::recvFind(String target1, String target2, String target3, uint32_t timeout)
itead 5:5fa655d7212c 248 {
itead 5:5fa655d7212c 249 String data;
itead 5:5fa655d7212c 250 char a;
itead 5:5fa655d7212c 251 unsigned long start = millis();
itead 5:5fa655d7212c 252 while (millis() - start < timeout) {
itead 5:5fa655d7212c 253 while(m_puart->available() > 0) {
itead 5:5fa655d7212c 254 a = m_puart->readChr();
itead 5:5fa655d7212c 255 data += a;
itead 5:5fa655d7212c 256 }
itead 5:5fa655d7212c 257 if (data.indexOf(target1) != -1) {
itead 5:5fa655d7212c 258 break;
itead 5:5fa655d7212c 259 } else if (data.indexOf(target2) != -1) {
itead 5:5fa655d7212c 260 break;
itead 5:5fa655d7212c 261 } else if (data.indexOf(target3) != -1) {
itead 5:5fa655d7212c 262 break;
itead 5:5fa655d7212c 263 }
itead 5:5fa655d7212c 264 }
itead 5:5fa655d7212c 265 return data;
itead 5:5fa655d7212c 266 }
itead 5:5fa655d7212c 267
itead 5:5fa655d7212c 268
itead 5:5fa655d7212c 269 bool ESP8266::eAT(void)
itead 5:5fa655d7212c 270 {
itead 5:5fa655d7212c 271 m_puart->setTimeout(100);
itead 5:5fa655d7212c 272 m_puart->flush();
itead 5:5fa655d7212c 273 m_puart->println("AT");
itead 5:5fa655d7212c 274 if (m_puart->find("OK")) {
itead 5:5fa655d7212c 275 return true;
itead 5:5fa655d7212c 276 } else {
itead 5:5fa655d7212c 277 return false;
itead 5:5fa655d7212c 278 }
itead 5:5fa655d7212c 279 }
itead 5:5fa655d7212c 280
itead 5:5fa655d7212c 281 bool ESP8266::eATRST(void)
itead 5:5fa655d7212c 282 {
itead 5:5fa655d7212c 283 m_puart->setTimeout(100);
itead 5:5fa655d7212c 284 m_puart->flush();
itead 5:5fa655d7212c 285 m_puart->println("AT+RST");
itead 5:5fa655d7212c 286 if (m_puart->find("OK")) {
itead 5:5fa655d7212c 287 return true;
itead 5:5fa655d7212c 288 } else {
itead 5:5fa655d7212c 289 return false;
itead 5:5fa655d7212c 290 }
itead 5:5fa655d7212c 291 }
itead 5:5fa655d7212c 292
itead 5:5fa655d7212c 293 String ESP8266::eATGMR(void)
itead 5:5fa655d7212c 294 {
itead 5:5fa655d7212c 295 String data;
itead 5:5fa655d7212c 296 m_puart->flush();
itead 5:5fa655d7212c 297 m_puart->println("AT+GMR");
itead 5:5fa655d7212c 298 data = recvFind("OK", "ERROR");
itead 5:5fa655d7212c 299 if (data.indexOf("OK") != -1) {
itead 5:5fa655d7212c 300 int32_t index1 = data.indexOf("\r\r\n");
itead 5:5fa655d7212c 301 int32_t index2 = data.indexOf("\r\n\r\nOK");
itead 5:5fa655d7212c 302 if (index1 != -1 && index2 != -1) {
itead 5:5fa655d7212c 303 index1 += strlen("\r\r\n");
itead 5:5fa655d7212c 304 return data.substring(index1, index2);
itead 5:5fa655d7212c 305 }
itead 5:5fa655d7212c 306 }
itead 5:5fa655d7212c 307 return "";
itead 5:5fa655d7212c 308 }
itead 5:5fa655d7212c 309
itead 5:5fa655d7212c 310
itead 5:5fa655d7212c 311 bool ESP8266::sATCWMODE(uint8_t mode)
itead 5:5fa655d7212c 312 {
itead 5:5fa655d7212c 313 String data;
itead 5:5fa655d7212c 314 m_puart->flush();
itead 5:5fa655d7212c 315 m_puart->print("AT+CWMODE=");
itead 5:5fa655d7212c 316 m_puart->println(mode);
itead 5:5fa655d7212c 317 data = recvFind("OK");
itead 5:5fa655d7212c 318 if (data.indexOf("OK") != -1) {
itead 5:5fa655d7212c 319 return true;
itead 5:5fa655d7212c 320 }
itead 5:5fa655d7212c 321 return false;
itead 5:5fa655d7212c 322 }
itead 5:5fa655d7212c 323