1
Revision 4:d53cfe3998bc, committed 2018-07-07
- Comitter:
- nikitoslav
- Date:
- Sat Jul 07 10:49:49 2018 +0000
- Parent:
- 3:72756a2b1a87
- Commit message:
- Possibility to connect as a client to other AP by information received from softAP from robot's client
Changed in this revision
ESP8266.cpp | Show annotated file Show diff for this revision Revisions of this file |
ESP8266.h | Show annotated file Show diff for this revision Revisions of this file |
diff -r 72756a2b1a87 -r d53cfe3998bc ESP8266.cpp --- a/ESP8266.cpp Wed Jun 27 13:43:43 2018 +0000 +++ b/ESP8266.cpp Sat Jul 07 10:49:49 2018 +0000 @@ -18,29 +18,32 @@ ESP8266::ESP8266(PinName tx, PinName rx, int locOutPort, int locInPort, bool debug) : _serial(tx, rx, 1024), _parser(_serial), - localOutPort(locOutPort), localInPort(locInPort) { + localOutPort(locOutPort), localInPort(locInPort) +{ _serial.baud(115200); _parser.debugOn(debug); } -bool ESP8266::startup(int mode) { +bool ESP8266::startup(int mode) +{ if(mode < 1 || mode > 3) { return false; } return reset() - && _parser.send("AT+CWMODE_CUR=%d", mode) - && _parser.recv("OK") - && _parser.send("AT+CIPMUX=1") - && _parser.recv("OK") - && _parser.send("AT+CIPDINFO=1") - && _parser.recv("OK"); + && _parser.send("AT+CWMODE_CUR=%d", mode) + && _parser.recv("OK") + && _parser.send("AT+CIPMUX=1") + && _parser.recv("OK") + && _parser.send("AT+CIPDINFO=1") + && _parser.recv("OK"); } -bool ESP8266::reset(void) { +bool ESP8266::reset(void) +{ for (int i = 0; i < 2; i++) { if (_parser.send("AT+RST") - && _parser.recv("OK\r\nready")) { + && _parser.recv("OK\r\nready")) { return true; } } @@ -48,53 +51,60 @@ return false; } -bool ESP8266::connect(const char *ap, const char *passPhrase) { - return _parser.send("AT+CWJAP_CUR=\"%s\",\"%s\"", ap, passPhrase) - && _parser.recv("OK") - && open(1,localOutPort) - && open(2,localInPort); +bool ESP8266::connect(const char *ap, const char *passPhrase) +{ + setTimeout(20000); + bool b = _parser.send("AT+CWJAP_CUR=\"%s\",\"%s\"", ap, passPhrase) && _parser.recv("OK"); + setTimeout(8000); + return b; } -bool ESP8266::disconnect(void) { +bool ESP8266::disconnect(void) +{ return _parser.send("AT+CWQAP") && _parser.recv("OK"); } -char* ESP8266::getIPAddress(void) { +char* ESP8266::getIPAddress(void) +{ if (!(_parser.send("AT+CIFSR") - && _parser.recv("+CIFSR:STAIP,\"%[^\"]\"", _ip_buffer) - && _parser.recv("OK"))) { + && _parser.recv("+CIFSR:STAIP,\"%[^\"]\"", _ip_buffer) + && _parser.recv("OK"))) { return 0; } return _ip_buffer; } -const char* ESP8266::getMACAddress(void) { +const char* ESP8266::getMACAddress(void) +{ if (!(_parser.send("AT+CIFSR") - && _parser.recv("+CIFSR:STAMAC,\"%[^\"]\"", _mac_buffer) - && _parser.recv("OK"))) { + && _parser.recv("+CIFSR:STAMAC,\"%[^\"]\"", _mac_buffer) + && _parser.recv("OK"))) { return 0; } return _mac_buffer; } -bool ESP8266::isConnected(void) { +bool ESP8266::isConnected(void) +{ return getIPAddress() != 0; } -bool ESP8266::open(int linkId, int localPort) { +bool ESP8266::open(int linkId, int localPort) +{ return _parser.send("AT+CIPSTART=%d,\"%s\",\"%s\",%d,%d,%d", linkId, "UDP","192.168.0.0",49000, localPort, 2) - && _parser.recv("OK"); + && _parser.recv("OK"); } -bool ESP8266::send(const void* data, uint32_t amount, const char* addr, int port) { +bool ESP8266::send(const void* data, uint32_t amount, const char* addr, int port) +{ //May take a second try if device is busy - for (unsigned i = 0; i < 2; i++) { + for (unsigned i = 0; i < 4; i++) { if (_parser.send("AT+CIPSEND=%d,%d,\"%s\",%d", 1, amount, addr, port) - && _parser.recv(">") - && (_parser.write((char*)data, (int)amount) >= 0) - && _parser.recv("SEND OK")) { + && _parser.recv(">") + && (_parser.write((char*)data, (int)amount) >= 0) + && _parser.recv("SEND OK")) { return true; } } @@ -102,25 +112,27 @@ return false; } -int32_t ESP8266::recv(void *data, uint32_t amount, char* IP, int* port) { +int32_t ESP8266::recv(void *data, uint32_t amount, char* IP, int* port) +{ uint32_t linkId; uint32_t recv_amount; if (!(_parser.recv("+IPD,%d,%d,%[^\,],%d:", &linkId, &recv_amount, IP, port) - && linkId == 2 - && recv_amount <= amount - && _parser.read((char*)data, recv_amount))) { + && linkId == 2 + && recv_amount <= amount + && _parser.read((char*)data, recv_amount))) { return -1; } return recv_amount; } -bool ESP8266::close(int id) { +bool ESP8266::close(int id) +{ //May take a second try if device is busy for (unsigned i = 0; i < 2; i++) { if (_parser.send("AT+CIPCLOSE=%d", id) - && _parser.recv("OK")) { + && _parser.recv("OK")) { return true; } } @@ -128,15 +140,26 @@ return false; } -void ESP8266::setTimeout(uint32_t timeout_ms) { +void ESP8266::setTimeout(uint32_t timeout_ms) +{ _parser.setTimeout(timeout_ms); } -bool ESP8266::readable() { +bool ESP8266::readable() +{ return _serial.readable(); } -bool ESP8266::writeable() { +bool ESP8266::writeable() +{ return _serial.writeable(); } +bool ESP8266::setupAP() +{ + return _parser.send("AT+CWSAP_CUR=\"RobotClapeyronAP\",\"passpass123\",5,3") + && _parser.recv("OK") + && open(1,localOutPort) + && open(2,localInPort); +} +
diff -r 72756a2b1a87 -r d53cfe3998bc ESP8266.h --- a/ESP8266.h Wed Jun 27 13:43:43 2018 +0000 +++ b/ESP8266.h Sat Jul 07 10:49:49 2018 +0000 @@ -134,6 +134,9 @@ * Checks if data can be written */ bool writeable(); + + //TODO section + bool setupAP(); private: BufferedSerial _serial;