Provide an easy-to-use way to manipulate ESP8266.
Fork of WeeESP8266 by
Diff: ESP8266.cpp
- Revision:
- 5:5fa655d7212c
- Parent:
- 2:fb209f93f3f1
- Child:
- 6:18eb2d9fb2ac
--- a/ESP8266.cpp Fri Feb 06 04:50:49 2015 +0000 +++ b/ESP8266.cpp Fri Feb 06 09:26:37 2015 +0000 @@ -1,2 +1,323 @@ +/** + * @file ESP8266.cpp + * @brief The implementation of class ESP8266. + * @author Wu Pengfei<pengfei.wu@itead.cc> + * @date 2015.02 + * + * @par Copyright: + * Copyright (c) 2015 ITEAD Intelligent Systems Co., Ltd. \n\n + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of + * the License, or (at your option) any later version. \n\n + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ #include "ESP8266.h" +#include "log.h" +ESP8266::ESP8266(ArduinoSerial &uart): m_puart(&uart) +{ + m_puart->begin(9600); + m_puart->flush(); + m_puart->setTimeout(1000); + logDebug("Create Instance ok"); +} + + +bool ESP8266::kick(void) +{ + return eAT(); +} + +bool ESP8266::restart(void) +{ + unsigned long start; + if (eATRST()) { + delay(2000); + start = millis(); + while (millis() - start < 3000) { + if (eAT()) { + delay(500); + return true; + } + delay(100); + } + } + return false; +} + +String ESP8266::getVersion(void) +{ + return eATGMR(); +} + +bool ESP8266::setOprToStation(void) +{ + if (sATCWMODE(1) && restart()) { + return true; + } + return false; +} + +bool ESP8266::setOprToSoftAP(void) +{ + if (sATCWMODE(2) && restart()) { + return true; + } + return false; +} + +bool ESP8266::setOprToStationSoftAP(void) +{ + if (sATCWMODE(3) && restart()) { + return true; + } + return false; +} + +String ESP8266::getAPList(void) +{ + return ""; +} + +bool ESP8266::joinAP(String ssid, String pwd) +{ + return false; +} + +bool ESP8266::leaveAP(void) +{ + return false; +} + +bool ESP8266::setSoftAPParam(String ssid, String pwd, uint8_t chl, uint8_t ecn) +{ + return false; +} + +String ESP8266::getJoinedDeviceIP(void) +{ + return ""; +} + +String ESP8266::getIPStatus(void) +{ + return ""; +} + +String ESP8266::getLocalIP(void) +{ + return ""; +} + +bool ESP8266::enableMUX(void) +{ + return false; +} + +bool ESP8266::disableMUX(void) +{ + return false; +} + +bool ESP8266::createTCP(String addr, uint32_t port) +{ + return false; +} + +bool ESP8266::releaseTCP(void) +{ + return false; +} + +bool ESP8266::registerUDP(String addr, uint32_t port) +{ + return false; +} + +bool ESP8266::unregisterUDP(void) +{ + return false; +} + +bool ESP8266::createTCP(uint8_t mux_id, String addr, uint32_t port) +{ + return false; +} + +bool ESP8266::releaseTCP(uint8_t mux_id) +{ + return false; +} + +bool ESP8266::registerUDP(uint8_t mux_id, String addr, uint32_t port) +{ + return false; +} + +bool ESP8266::unregisterUDP(uint8_t mux_id) +{ + return false; +} + +bool ESP8266::setTCPServerTimeout(uint32_t timeout) +{ + return false; +} + +bool ESP8266::startTCPServer(uint32_t port) +{ + return false; +} + +bool ESP8266::stopTCPServer(void) +{ + return false; +} + +bool ESP8266::send(const uint8_t *buffer, uint32_t len) +{ + return false; +} + +bool ESP8266::send(uint8_t mux_id, const char *buffer, uint32_t len) +{ + return false; +} + +uint32_t ESP8266::recv(uint8_t *buffer, uint32_t len, uint32_t timeout) +{ + return false; +} + +uint32_t ESP8266::recv(uint8_t mux_id, uint8_t *buffer, uint32_t len, uint32_t timeout) +{ + return false; +} + +uint32_t ESP8266::recv(uint8_t *coming_mux_id, uint8_t *buffer, uint32_t len, uint32_t timeout) +{ + return false; +} + + +String ESP8266::recvFind(String target, uint32_t timeout) +{ + String data; + char a; + unsigned long start = millis(); + while (millis() - start < timeout) { + while(m_puart->available() > 0) { + a = m_puart->readChr(); + data += a; + } + if (data.indexOf(target) != -1) { + break; + } + } + return data; +} + + +String ESP8266::recvFind(String target1, String target2, uint32_t timeout) +{ + String data; + char a; + unsigned long start = millis(); + while (millis() - start < timeout) { + while(m_puart->available() > 0) { + a = m_puart->readChr(); + data += a; + } + if (data.indexOf(target1) != -1) { + break; + } else if (data.indexOf(target2) != -1) { + break; + } + } + return data; +} + +String ESP8266::recvFind(String target1, String target2, String target3, uint32_t timeout) +{ + String data; + char a; + unsigned long start = millis(); + while (millis() - start < timeout) { + while(m_puart->available() > 0) { + a = m_puart->readChr(); + data += a; + } + if (data.indexOf(target1) != -1) { + break; + } else if (data.indexOf(target2) != -1) { + break; + } else if (data.indexOf(target3) != -1) { + break; + } + } + return data; +} + + +bool ESP8266::eAT(void) +{ + m_puart->setTimeout(100); + m_puart->flush(); + m_puart->println("AT"); + if (m_puart->find("OK")) { + return true; + } else { + return false; + } +} + +bool ESP8266::eATRST(void) +{ + m_puart->setTimeout(100); + m_puart->flush(); + m_puart->println("AT+RST"); + if (m_puart->find("OK")) { + return true; + } else { + return false; + } +} + +String ESP8266::eATGMR(void) +{ + String data; + m_puart->flush(); + m_puart->println("AT+GMR"); + data = recvFind("OK", "ERROR"); + if (data.indexOf("OK") != -1) { + int32_t index1 = data.indexOf("\r\r\n"); + int32_t index2 = data.indexOf("\r\n\r\nOK"); + if (index1 != -1 && index2 != -1) { + index1 += strlen("\r\r\n"); + return data.substring(index1, index2); + } + } + return ""; +} + + +bool ESP8266::sATCWMODE(uint8_t mode) +{ + String data; + m_puart->flush(); + m_puart->print("AT+CWMODE="); + m_puart->println(mode); + data = recvFind("OK"); + if (data.indexOf("OK") != -1) { + return true; + } + return false; +} +