Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: ESP8266
Fork of ESP8266Interface by
Diff: ESP8266Interface.cpp
- Revision:
- 23:fd0f3197c30b
- Parent:
- 22:312453862371
- Child:
- 24:37504440f296
- Child:
- 25:91c4e9d34b77
--- a/ESP8266Interface.cpp Wed Jul 22 20:53:09 2015 +0000
+++ b/ESP8266Interface.cpp Thu Jul 23 21:25:30 2015 +0000
@@ -18,30 +18,23 @@
#include <string>
ESP8266Interface::ESP8266Interface(PinName tx, PinName rx)
-: serial(tx, rx), atParser(&serial)
+:esp8266(tx,rx)
{
uuidCounter = 0;
- serial.baud(115200);
for(int i = 0; i<numSockets; i++){
availableID[i] = -1;
}
}
-ESP8266Interface::ESP8266Interface(PinName tx, PinName rx, const char *ap, const char *pass_phrase, wifi_security_t security, uint32_t timeout_ms)
-: serial(tx, rx), atParser(&serial)
-{
-
-}
-
int32_t ESP8266Interface::init(void)
{
- if (!(atParser.send("AT") && atParser.recv("OK")))
+ if (!esp8266.startup())
return -1;
- if (!(atParser.send("AT+RST") && atParser.recv("OK\r\nready")))
+ if (!esp8266.reset())
return -1;
- if (!(atParser.send("AT+CWMODE=3") && atParser.recv("OK")))
+ if (!esp8266.wifiMode(3))
return -1;
- if (!(atParser.send("AT+CIPMUX=1") && atParser.recv("OK")))
+ if (!esp8266.multipleConnections(true))
return -1;
return 0;
@@ -49,7 +42,7 @@
int32_t ESP8266Interface::init(const char *ip, const char *mask, const char *gateway)
{
-
+ return -1;
}
int32_t ESP8266Interface::connect(uint32_t timeout_ms)
@@ -59,11 +52,11 @@
int32_t ESP8266Interface::connect(const char *ap, const char *pass_phrase, wifi_security_t security, uint32_t timeout_ms)
{
- if (!(atParser.send("AT+CWDHCP=2,1") && atParser.recv("OK")))
+ esp8266.setTimeout(timeout_ms);
+
+ if (!esp8266.dhcp(1,true))
return -1;
- string connect_command = "AT+CWJAP=\""+(string)ap+"\",\""+(string)pass_phrase+"\"";
- atParser.setTimeout(10000);
- if (!(atParser.send(connect_command.c_str()) && atParser.recv("OK"))){
+ if (!esp8266.connect(ap,pass_phrase)){
return -1;
}
return 0;
@@ -71,7 +64,7 @@
int32_t ESP8266Interface::disconnect(void)
{
- if (!(atParser.send("AT+CWQAP") && atParser.recv("OK")))
+ if (!esp8266.disconnect())
return -1;
for(int i=0; i<numSockets; i++){
SocketInterface *socket = sockets[availableID[i]];
@@ -83,7 +76,7 @@
char *ESP8266Interface::getIPAddress(void)
{
- if (!(atParser.send("AT+CIPSTA?") && atParser.recv("+CIPSTA:\"%[^\"]\"", ip)))
+ if(!esp8266.getIPAddress(ip))
return NULL;
return ip;
}
@@ -122,7 +115,7 @@
if (id == -1){
return NULL;//tried to allocate more than the maximum 5 sockets
}
- ESP8266Socket *socket = new ESP8266Socket(uuidCounter++, &atParser, socketProtocol, (uint8_t)id);
+ ESP8266Socket *socket = new ESP8266Socket(uuidCounter++, &esp8266, socketProtocol, (uint8_t)id);
sockets[socket->getHandle()] = socket;
return socket;
}
@@ -148,8 +141,8 @@
}
}
-ESP8266Socket::ESP8266Socket(uint32_t handle, ATParser *atParser, socket_protocol_t type, uint8_t id)
-: atParser(atParser), _id(id)
+ESP8266Socket::ESP8266Socket(uint32_t handle, ESP8266 *driver, socket_protocol_t type, uint8_t id)
+: driver(driver), _id(id)
{
_handle = handle;
SocketInterface::_type = type;
@@ -204,18 +197,13 @@
int32_t ESP8266Socket::open()
{
- char portstr[5];
- char idstr[2];
- sprintf(idstr,"%d",_id);
- sprintf(portstr, "%d", _port);
-
string sock_type;
if(_type == SOCK_UDP)
sock_type = "UDP";
else if(_type == SOCK_TCP)
sock_type = "TCP";
- string start_command = "AT+CIPSTART="+(string)idstr+",\""+sock_type+"\",\""+(string)_addr+"\","+(string)portstr;
- if (!(atParser->send(start_command.c_str()) && atParser->recv("OK"))){
+
+ if (!driver->openSocket(sock_type, _id, _port, _addr)){
return -1;//opening socket not succesful
}
return 0;
@@ -224,42 +212,26 @@
int32_t ESP8266Socket::send(const void *data, uint32_t amount, uint32_t timeout_ms)
{
- char idstr[2];
- sprintf(idstr,"%d",_id);
- char lenstr[5];
- sprintf(lenstr,"%d",(int)amount);
- atParser->setTimeout((int)timeout_ms);
-
- string send_command = "AT+CIPSEND="+(string)idstr+","+(string)lenstr;
- if(!atParser->send(send_command.c_str())){
+ driver->setTimeout((int)timeout_ms);
+ if(!driver->sendData(_id, data, amount)){
return -1;
}
- atParser->write((char*)data, (int)amount);
return 0;
}
uint32_t ESP8266Socket::recv(void *data, uint32_t amount, uint32_t timeout_ms)
{
- atParser->setTimeout((int)timeout_ms);
- int length;
- int id;
- if (!(atParser->recv("+IPD,%d,%d:", &id, &length) &&
- atParser->read((char*)data, length) &&
- atParser->recv("OK"))){
- return false;
- }
- return length;
+
+ return driver->recv(data, amount);
+
}
int32_t ESP8266Socket::close() const
{
- char idstr[2];
- sprintf(idstr,"%d",_id);
- string close_command = "AT+CIPCLOSE="+(string)idstr;
- if (!(atParser->send(close_command.c_str()) && atParser->recv("OK"))){
- return -1;//opening socket not succesful
+ if (!driver->close(_id)){
+ return -1;//closing socket not succesful
}
return 0;
}
