test
Fork of ESP8266 by
Diff: ESP8266.cpp
- Revision:
- 17:8b541b19f391
- Parent:
- 16:f886ef3f2297
- Child:
- 18:11f2f6bd2e97
--- a/ESP8266.cpp Tue Feb 02 22:21:55 2016 +0000 +++ b/ESP8266.cpp Thu Feb 18 16:08:29 2016 -0600 @@ -1,155 +1,155 @@ -/* ESP8266 Example - * Copyright (c) 2015 ARM Limited - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "ESP8266.h" - -ESP8266::ESP8266(PinName tx, PinName rx, uint8_t debug) : serial(tx, rx), atParser(serial) -{ - serial.baud(115200); - atParser.debugOn(debug); -} - -bool ESP8266::startup(void) -{ - return (atParser.send("AT") && atParser.recv("OK")); -} - -bool ESP8266::reset(void) -{ - return (atParser.send("AT+RST") && atParser.recv("OK\r\nready")); -} - -bool ESP8266::wifiMode(int mode) -{ - //only 3 valid modes - if(mode < 1 || mode > 3) { - return false; - } - - char modestr[1]; - sprintf(modestr,"%d",mode); - string mode_command = "AT+CWMODE="+string(modestr); - return (atParser.send(mode_command.c_str()) && atParser.recv("OK")); -} - -bool ESP8266::multipleConnections(bool enabled) -{ - int on = (int)enabled; - char enable[1]; - sprintf(enable,"%d",on); - string mux_command = "AT+CIPMUX="+string(enable); - return (atParser.send(mux_command.c_str()) && atParser.recv("OK")); -} - -bool ESP8266::dhcp(int mode, bool enabled) -{ - //only 3 valid modes - if(mode < 0 || mode > 2) { - return false; - } - int on = (int)enabled; - char enable[1]; - sprintf(enable,"%d",on); - char modestr[1]; - sprintf(modestr,"%d",mode); - string mode_command = "AT+CWDHCP="+string(modestr)+","+string(enable); - return (atParser.send(mode_command.c_str()) && atParser.recv("OK")); -} - -bool ESP8266::connect(const char *ap, const char *passPhrase) -{ - string connect_command = "AT+CWJAP=\""+(string)ap+"\",\""+(string)passPhrase+"\""; - return (atParser.send(connect_command.c_str()) && atParser.recv("OK")); -} - -bool ESP8266::disconnect(void) -{ - return (atParser.send("AT+CWQAP") && atParser.recv("OK")); -} - -bool ESP8266::getIPAddress(char* ip) -{ - return (atParser.send("AT+CIPSTA?") && atParser.recv("+CIPSTA:\"%[^\"]\"", ip)); -} - -bool ESP8266::isConnected(void) -{ - char* ip = ""; - return getIPAddress(ip); -} - -bool ESP8266::openSocket(string sockType, int id, int port, const char* addr) -{ - //IDs only 0-4 - if(id > 4) { - return false; - } - char portstr[5]; - char idstr[2]; - sprintf(idstr,"%d",id); - sprintf(portstr, "%d", port); - - string start_command = "AT+CIPSTART="+(string)idstr+",\""+sockType+"\",\""+(string)addr+"\","+(string)portstr; - if (!(atParser.send(start_command.c_str()) && atParser.recv("OK"))) { - return false;//opening socket not succesful - } - return true; -} - -bool ESP8266::sendData(int id, const void *data, uint32_t amount) -{ - char idstr[2]; - sprintf(idstr,"%d",id); - char lenstr[5]; - sprintf(lenstr,"%d",(int)amount); - - string send_command = "AT+CIPSEND="+(string)idstr+","+(string)lenstr; - if(!atParser.send(send_command.c_str(),">")) { - return false; - } - wait_ms(10); - atParser.write((char*)data, (int)amount); - wait_ms(10); - return true; -} - -uint32_t ESP8266::recv(void *data, uint32_t amount) -{ - int length; - int id; - if (!(atParser.recv("+IPD,%d,%d:", &id, &length) && atParser.read((char*)data, length) && atParser.recv("OK"))) { - return 0; - } - return length; -} - -bool ESP8266::close(int id) -{ - //IDs only 0-4 - if(id > 4) { - return false; - } - char idstr[2]; - sprintf(idstr,"%d",id); - string close_command = "AT+CIPCLOSE="+(string)idstr; - - return (atParser.send(close_command.c_str()) && atParser.recv("OK")); -} - -void ESP8266::setTimeout(uint32_t timeout_ms) -{ - atParser.setTimeout(timeout_ms); +/* ESP8266 Example + * Copyright (c) 2015 ARM Limited + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "ESP8266.h" + +ESP8266::ESP8266(PinName tx, PinName rx, uint8_t debug) : serial(tx, rx), atParser(serial) +{ + serial.baud(115200); + atParser.debugOn(debug); +} + +bool ESP8266::startup(void) +{ + return (atParser.send("AT") && atParser.recv("OK")); +} + +bool ESP8266::reset(void) +{ + return (atParser.send("AT+RST") && atParser.recv("OK\r\nready")); +} + +bool ESP8266::wifiMode(int mode) +{ + //only 3 valid modes + if(mode < 1 || mode > 3) { + return false; + } + + char modestr[1]; + sprintf(modestr,"%d",mode); + string mode_command = "AT+CWMODE="+string(modestr); + return (atParser.send(mode_command.c_str()) && atParser.recv("OK")); +} + +bool ESP8266::multipleConnections(bool enabled) +{ + int on = (int)enabled; + char enable[1]; + sprintf(enable,"%d",on); + string mux_command = "AT+CIPMUX="+string(enable); + return (atParser.send(mux_command.c_str()) && atParser.recv("OK")); +} + +bool ESP8266::dhcp(int mode, bool enabled) +{ + //only 3 valid modes + if(mode < 0 || mode > 2) { + return false; + } + int on = (int)enabled; + char enable[1]; + sprintf(enable,"%d",on); + char modestr[1]; + sprintf(modestr,"%d",mode); + string mode_command = "AT+CWDHCP="+string(modestr)+","+string(enable); + return (atParser.send(mode_command.c_str()) && atParser.recv("OK")); +} + +bool ESP8266::connect(const char *ap, const char *passPhrase) +{ + string connect_command = "AT+CWJAP=\""+(string)ap+"\",\""+(string)passPhrase+"\""; + return (atParser.send(connect_command.c_str()) && atParser.recv("OK")); +} + +bool ESP8266::disconnect(void) +{ + return (atParser.send("AT+CWQAP") && atParser.recv("OK")); +} + +bool ESP8266::getIPAddress(char* ip) +{ + return (atParser.send("AT+CIPSTA?") && atParser.recv("+CIPSTA:\"%[^\"]\"", ip)); +} + +bool ESP8266::isConnected(void) +{ + char* ip = ""; + return getIPAddress(ip); +} + +bool ESP8266::openSocket(string sockType, int id, int port, const char* addr) +{ + //IDs only 0-4 + if(id > 4) { + return false; + } + char portstr[5]; + char idstr[2]; + sprintf(idstr,"%d",id); + sprintf(portstr, "%d", port); + + string start_command = "AT+CIPSTART="+(string)idstr+",\""+sockType+"\",\""+(string)addr+"\","+(string)portstr; + if (!(atParser.send(start_command.c_str()) && atParser.recv("OK"))) { + return false;//opening socket not succesful + } + return true; +} + +bool ESP8266::sendData(int id, const void *data, uint32_t amount) +{ + char idstr[2]; + sprintf(idstr,"%d",id); + char lenstr[5]; + sprintf(lenstr,"%d",(int)amount); + + string send_command = "AT+CIPSEND="+(string)idstr+","+(string)lenstr; + if(!atParser.send(send_command.c_str(),">")) { + return false; + } + wait_ms(10); + atParser.write((char*)data, (int)amount); + wait_ms(10); + return true; +} + +uint32_t ESP8266::recv(void *data, uint32_t amount) +{ + int length; + int id; + if (!(atParser.recv("+IPD,%d,%d:", &id, &length) && atParser.read((char*)data, length) && atParser.recv("OK"))) { + return 0; + } + return length; +} + +bool ESP8266::close(int id) +{ + //IDs only 0-4 + if(id > 4) { + return false; + } + char idstr[2]; + sprintf(idstr,"%d",id); + string close_command = "AT+CIPCLOSE="+(string)idstr; + + return (atParser.send(close_command.c_str()) && atParser.recv("OK")); +} + +void ESP8266::setTimeout(uint32_t timeout_ms) +{ + atParser.setTimeout(timeout_ms); } \ No newline at end of file