ESP8266 driver using the NodeMCU interface

Dependencies:   BufferedSerial

Dependents:   esp8266_nodeMCU1 esp8266_2_thingspeak1 Solarator_0-0-2 IoTBurglar_and_Fire_AlarmSystem ... more

Fork of ESP8266Interface by ESP8266

This is an alternative implementation of the ESP8266 driver that uses the NodeMCU firmware. The NodeMCU firmware provides a slightly larger feature set than the default firmware through a Lua interpreter.

Note

This library is currently in Alpha. It is not feature complete and has some bugs, proceed with caution. Fixes and patches are welcome!

Interface changes

  • SSID and passphrase moved out of ESP8266Interface constructor and to ESP8266Interface::connect
  • ESP8266Interface constructor provides optional timeout parameter to specify how long to wait for network operations

Note

NodeMCU defaults to a baud rate of 9600 instead of 115200 used by the default firmware.

Firmware

To install the NodeMCU firmware, follow the instructions on the Firmware Update wiki page using the nodemcu_integer_0.9.6-dev_20150406.bin binary at address 0x00000 instead of boot_v1.1.bin and user1.bin.

Since the NodeMCU firmware defaults to a baud rate of 9600, the Serial Passthrough program can be used to get direct access to the Lua interpreter running on the ESP8266.

Status

Working features:

  • TCP Client
  • UDP Client Transmit (Currently only UDP Server can recieve messages)
  • Single Connection at a time
  • Station Mode (Connects to AP)
  • DNS Lookups

To be implemented:

  • TCP Server
  • UDP Server
  • UDP Client recieve
  • Multiple Connections tracked through Lua variables
  • AP Mode (Act as access point)
  • IPV6 support (Existing issue with NodeMCU)

Files at this revision

API Documentation at this revision

Comitter:
samux
Date:
Thu Dec 20 15:08:58 2012 +0000
Parent:
3:9aa05e19c62e
Child:
5:81e264dbbf03
Commit message:
proper join after reboot - increase size flush

Changed in this revision

Socket/TCPSocketServer.cpp Show annotated file Show diff for this revision Revisions of this file
Socket/UDPSocket.cpp Show annotated file Show diff for this revision Revisions of this file
Wifly/Wifly.cpp Show annotated file Show diff for this revision Revisions of this file
Wifly/Wifly.h Show annotated file Show diff for this revision Revisions of this file
--- a/Socket/TCPSocketServer.cpp	Thu Dec 20 10:37:52 2012 +0000
+++ b/Socket/TCPSocketServer.cpp	Thu Dec 20 15:08:58 2012 +0000
@@ -41,8 +41,13 @@
     wifi->reboot();
     
     // connect the network
-    if (!wifi->sendCommand("join\r", "Associated", NULL, 5000))
-        return -1;
+    if (wifi->isDHCP()) {
+        if (!wifi->sendCommand("join\r", "DHCP=ON", NULL, 10000))
+            return -1;
+    } else {
+        if (!wifi->sendCommand("join\r", "Associated", NULL, 10000))
+            return -1;
+    }
         
     // exit
     wifi->exit();
--- a/Socket/UDPSocket.cpp	Thu Dec 20 10:37:52 2012 +0000
+++ b/Socket/UDPSocket.cpp	Thu Dec 20 15:08:58 2012 +0000
@@ -39,14 +39,33 @@
 {
     char cmd[17];
     
-    // set udp protocol
-    wifi->setProtocol(UDP);
-    
     // set local port
     sprintf(cmd, "set i l %d\r", port);
     if (!wifi->sendCommand(cmd, "AOK"))
         return -1;
+        
+    // save
+    if (!wifi->sendCommand("save\r", "Stor"))
+        return -1;
+    
+    // reboot
+    wifi->reboot();
+    
+    // set udp protocol
+    wifi->setProtocol(UDP);
+    
+    // connect the network
+    if (wifi->isDHCP()) {
+        if (!wifi->sendCommand("join\r", "DHCP=ON", NULL, 10000))
+            return -1;
+    } else {
+        if (!wifi->sendCommand("join\r", "Associated", NULL, 10000))
+            return -1;
+    }
+        
+    // exit
     wifi->exit();
+    wifi->flush();
     return 0;
 }
 
--- a/Wifly/Wifly.cpp	Thu Dec 20 10:37:52 2012 +0000
+++ b/Wifly/Wifly.cpp	Thu Dec 20 15:08:58 2012 +0000
@@ -80,11 +80,11 @@
             continue;
 
         // set time
-        if (!sendCommand("set c t 20\r", "AOK"))
+        if (!sendCommand("set c t 30\r", "AOK"))
             continue;
 
         // set size
-        if (!sendCommand("set c s 128\r", "AOK"))
+        if (!sendCommand("set c s 1024\r", "AOK"))
             continue;
 
         // red led on when tcp connection active
@@ -188,11 +188,9 @@
             break;
         case UDP:
             // set ip flags: udp auto pairing enabled
-            if (!sendCommand("set i f 0x40\r", "AOK"))
-                return false;
             if (!sendCommand("set i h 0.0.0.0\r", "AOK"))
                 return false;
-            if (!sendCommand("set i r 0\r", "AOK"))
+            if (!sendCommand("set i f 0x40\r", "AOK"))
                 return false;
             break;
     }
--- a/Wifly/Wifly.h	Thu Dec 20 10:37:52 2012 +0000
+++ b/Wifly/Wifly.h	Thu Dec 20 15:08:58 2012 +0000
@@ -188,6 +188,15 @@
     * @returns true if successful
     */
     bool sendCommand(const char * cmd, const char * ack = NULL, char * res = NULL, int timeout = DEFAULT_WAIT_RESP_TIMEOUT);
+    
+    /*
+    * Return true if the module is using dhcp
+    *
+    * @returns true if the module is using dhcp
+    */
+    bool isDHCP() {
+        return state.dhcp;
+    }
 
     bool gethostbyname(const char * host, char * ip);