1

Dependencies:   ATParser

Dependents:   UDPNode

Files at this revision

API Documentation at this revision

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
--- 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);
+}
+
--- 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;