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)
Revision:
10:131675c17372
Parent:
6:5176e0864078
Parent:
7:3152fcc74390
Child:
9:f2439377c172
--- a/Wifly/Wifly.h	Fri Nov 08 21:27:08 2013 +0000
+++ b/Wifly/Wifly.h	Tue Jun 03 18:41:15 2014 +0000
@@ -44,11 +44,14 @@
     TCP = (1 << 1)
 };
 
+/**
+ * The Wifly class
+ */
 class Wifly
 {
 
 public:
-    /*
+    /**
     * Constructor
     *
     * @param tx mbed pin to use for tx line of Serial interface
@@ -61,77 +64,82 @@
     */
     Wifly(  PinName tx, PinName rx, PinName reset, PinName tcp_status, const char * ssid, const char * phrase, Security sec);
 
-    /*
+    /**
     * Connect the wifi module to the ssid contained in the constructor.
     *
     * @return true if connected, false otherwise
     */
     bool join();
 
-    /*
+    /**
     * Disconnect the wifly module from the access point
     *
-    * @ returns true if successful
+    * @return true if successful
     */
     bool disconnect();
 
-    /*
+    /**
     * Open a tcp connection with the specified host on the specified port
     *
     * @param host host (can be either an ip address or a name. If a name is provided, a dns request will be established)
     * @param port port
-    * @ returns true if successful
+    * @return true if successful
     */
     bool connect(const char * host, int port);
 
 
-    /*
+    /**
     * Set the protocol (UDP or TCP)
     *
     * @param p protocol
-    * @ returns true if successful
+    * @return true if successful
     */
     bool setProtocol(Protocol p);
 
-    /*
+    /**
     * Reset the wifi module
     */
     void reset();
+    
+    /**
+    * Reboot the wifi module
+    */
+    bool reboot();
 
-    /*
+    /**
     * Check if characters are available
     *
     * @return number of available characters
     */
     int readable();
 
-    /*
+    /**
     * Check if characters are available
     *
     * @return number of available characters
     */
     int writeable();
 
-    /*
+    /**
     * Check if a tcp link is active
     *
-    * @returns true if successful
+    * @return true if successful
     */
     bool is_connected();
 
-    /*
+    /**
     * Read a character
     *
     * @return the character read
     */
     char getc();
 
-    /*
+    /**
     * Flush the buffer
     */
     void flush();
 
-    /*
+    /**
     * Write a character
     *
     * @param the character which will be written
@@ -139,28 +147,28 @@
     int putc(char c);
 
 
-    /*
+    /**
     * To enter in command mode (we can configure the module)
     *
     * @return true if successful, false otherwise
     */
     bool cmdMode();
 
-    /*
+    /**
     * To exit the command mode
     *
     * @return true if successful, false otherwise
     */
     bool exit();
 
-    /*
+    /**
     * Close a tcp connection
     *
-    * @ returns true if successful
+    * @return true if successful
     */
     bool close();
 
-    /*
+    /**
     * Send a string to the wifi module by serial port. This function desactivates the user interrupt handler when a character is received to analyze the response from the wifi module.
     * Useful to send a command to the module and wait a response.
     *
@@ -174,16 +182,25 @@
     */
     int send(const char * str, int len, const char * ACK = NULL, char * res = NULL, int timeout = DEFAULT_WAIT_RESP_TIMEOUT);
 
-    /*
+    /**
     * Send a command to the wify module. Check if the module is in command mode. If not enter in command mode
     *
     * @param str string to be sent
     * @param ACK string which must be acknowledge by the wifi module. If ACK == NULL, no string has to be acknoledged. (default: "NO")
     * @param res this field will contain the response from the wifi module, result of a command sent. This field is available only if ACK = "NO" AND res != NULL (default: NULL)
     *
-    * @returns true if successful
+    * @return 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
+    *
+    * @return true if the module is using dhcp
+    */
+    bool isDHCP() {
+        return state.dhcp;
+    }
 
     bool gethostbyname(const char * host, char * ip);