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
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)
Diff: Wifly/Wifly.cpp
- Revision:
- 12:c5f0eac67a8a
- Parent:
- 11:fc3d86645d23
--- a/Wifly/Wifly.cpp Tue Jun 03 18:43:14 2014 +0000
+++ b/Wifly/Wifly.cpp Wed Oct 08 19:57:58 2014 +0000
@@ -40,6 +40,8 @@
#define MAX_TRY_JOIN 3
+extern Serial pc;
+
Wifly * Wifly::inst;
Wifly::Wifly( PinName tx, PinName rx, PinName _reset, PinName tcp_status, const char * ssid, const char * phrase, Security sec):
@@ -72,65 +74,65 @@
for (int i= 0; i < MAX_TRY_JOIN; i++) {
// no auto join
- if (!sendCommand("set w j 0\r", "AOK"))
+ if (!sendCommand("set w j 0\r\n", "AOK"))
continue;
//no echo
- if (!sendCommand("set u m 1\r", "AOK"))
+ if (!sendCommand("set u m 1\r\n", "AOK"))
continue;
// set time
- if (!sendCommand("set c t 30\r", "AOK"))
+ if (!sendCommand("set c t 30\r\n", "AOK"))
continue;
// set size
- if (!sendCommand("set c s 1024\r", "AOK"))
+ if (!sendCommand("set c s 1024\r\n", "AOK"))
continue;
// red led on when tcp connection active
- if (!sendCommand("set s i 0x40\r", "AOK"))
+ if (!sendCommand("set s i 0x40\r\n", "AOK"))
continue;
// no string sent to the tcp client
- if (!sendCommand("set c r 0\r", "AOK"))
+ if (!sendCommand("set c r 0\r\n", "AOK"))
continue;
// tcp protocol
- if (!sendCommand("set i p 2\r", "AOK"))
+ if (!sendCommand("set i p 2\r\n", "AOK"))
continue;
// tcp retry
- if (!sendCommand("set i f 0x7\r", "AOK"))
+ if (!sendCommand("set i f 0x7\r\n", "AOK"))
continue;
// set dns server
- if (!sendCommand("set d n rn.microchip.com\r", "AOK"))
+ if (!sendCommand("set d n rn.microchip.com\r\n", "AOK"))
continue;
//dhcp
- sprintf(cmd, "set i d %d\r", (state.dhcp) ? 1 : 0);
+ sprintf(cmd, "set i d %d\r\n", (state.dhcp) ? 1 : 0);
if (!sendCommand(cmd, "AOK"))
continue;
// ssid
- sprintf(cmd, "set w s %s\r", ssid);
+ sprintf(cmd, "set w s %s\r\n", ssid);
if (!sendCommand(cmd, "AOK", NULL, 1000))
continue;
//auth
- sprintf(cmd, "set w a %d\r", state.sec);
+ sprintf(cmd, "set w a %d\r\n", state.sec);
if (!sendCommand(cmd, "AOK"))
continue;
// if no dhcp, set ip, netmask and gateway
if (!state.dhcp) {
- DBG("not dhcp\r");
+ DBG("not dhcp\r\n");
sprintf(cmd, "set i a %s\r\n", ip);
if (!sendCommand(cmd, "AOK"))
continue;
- sprintf(cmd, "set i n %s\r", netmask);
+ sprintf(cmd, "set i n %s\r\n", netmask);
if (!sendCommand(cmd, "AOK"))
continue;
@@ -142,16 +144,16 @@
//key step
if (state.sec != NONE) {
if (state.sec == WPA)
- sprintf(cmd, "set w p %s\r", phrase);
+ sprintf(cmd, "set w p %s\r\n", phrase);
else if (state.sec == WEP_128)
- sprintf(cmd, "set w k %s\r", phrase);
+ sprintf(cmd, "set w k %s\r\n", phrase);
if (!sendCommand(cmd, "AOK", NULL, 1000))
continue;
}
//join the network
- sprintf(cmd, "join\r");
+ sprintf(cmd, "join\r\n");
if (!sendCommand(cmd, "Associated", NULL, 3000))
continue;
@@ -159,11 +161,11 @@
continue;
if (state.dhcp) {
- if (!sendCommand("get i\r", "DHCP=ON", NULL, 3000))
+ if (!sendCommand("get i\r\n", "DHCP=ON", NULL, 3000))
continue;
}
- if (!sendCommand("save\r", "Stor"))
+ if (!sendCommand("save\r\n", "Stor"))
continue;
exit();
@@ -180,21 +182,22 @@
{
// use udp auto pairing
char cmd[20];
- sprintf(cmd, "set i p %d\r", p);
+ sprintf(cmd, "set i p %d\r\n", p);
if (!sendCommand(cmd, "AOK"))
return false;
switch(p) {
case TCP:
// set ip flags: tcp retry enabled
- if (!sendCommand("set i f 0x07\r", "AOK"))
+ if (!sendCommand("set i f 0x07\r\n", "AOK"))
return false;
break;
case UDP:
// set ip flags: udp auto pairing enabled
- if (!sendCommand("set i h 0.0.0.0\r", "AOK"))
+ if (!sendCommand("set i h 0.0.0.0\r\n", "AOK"))
return false;
- if (!sendCommand("set i f 0x40\r", "AOK"))
+ if (!sendCommand("set i f 0x40\r\n", "AOK"))
+// if (!sendCommand("set i f 0x00\r\n", "AOK")) // TEST turn off autopairing
return false;
break;
}
@@ -221,7 +224,7 @@
char cmd[20];
// try to open
- sprintf(cmd, "open %s %d\r", host, port);
+ sprintf(cmd, "open %s %d\r\n", host, port);
if (sendCommand(cmd, "OPEN", NULL, 10000)) {
state.tcp = true;
state.cmd_mode = false;
@@ -233,7 +236,7 @@
if (strstr(rcv, "OPEN") == NULL) {
if (strstr(rcv, "Connected") != NULL) {
wait(0.25);
- if (!sendCommand("close\r", "CLOS"))
+ if (!sendCommand("close\r\n", "CLOS"))
return false;
wait(0.25);
if (!sendCommand(cmd, "OPEN", NULL, 10000))
@@ -274,7 +277,7 @@
// dns needed
else {
nb_digits = 0;
- sprintf(cmd, "lookup %s\r", host);
+ sprintf(cmd, "lookup %s\r\n", host);
if (!sendCommand(cmd, NULL, rcv))
return false;
@@ -363,7 +366,7 @@
bool Wifly::reboot()
{
// if already in cmd mode, return
- if (!sendCommand("reboot\r"))
+ if (!sendCommand("reboot\r\n"))
return false;
wait(0.3);
@@ -379,7 +382,7 @@
return true;
wait(0.25);
- if (!sendCommand("close\r", "CLOS"))
+ if (!sendCommand("close\r\n", "CLOS"))
return false;
exit();
@@ -400,7 +403,7 @@
flush();
if (!state.cmd_mode)
return true;
- if (!sendCommand("exit\r", "EXIT"))
+ if (!sendCommand("exit\r\n", "EXIT"))
return false;
state.cmd_mode = false;
flush();
ESP8266

Adafruit Huzzah