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)
Revision 12:c5f0eac67a8a, committed 2014-10-08
- Comitter:
- michaeljkoster
- Date:
- Wed Oct 08 19:57:58 2014 +0000
- Parent:
- 11:fc3d86645d23
- Child:
- 13:41098c907200
- Commit message:
- Debug
Changed in this revision
--- a/Socket/UDPSocket.cpp Tue Jun 03 18:43:14 2014 +0000
+++ b/Socket/UDPSocket.cpp Wed Oct 08 19:57:58 2014 +0000
@@ -21,6 +21,8 @@
#include <string>
#include <algorithm>
+extern Serial pc;
+
UDPSocket::UDPSocket()
{
endpoint_configured = false;
@@ -40,29 +42,30 @@
char cmd[17];
// set local port
- sprintf(cmd, "set i l %d\r", port);
- if (!wifi->sendCommand(cmd, "AOK"))
- return -1;
+ sprintf(cmd, "set i l %d\n\r", port);
+ if (!wifi->sendCommand(cmd, "AOK")){
+ pc.printf("bind to port failed\r\n");
+ return -1;}
// save
- if (!wifi->sendCommand("save\r", "Stor"))
- return -1;
+ //if (!wifi->sendCommand("save\n\r", "Stor"))
+ //return -1;
// reboot
- wifi->reboot();
+ //wifi->reboot();
// set udp protocol
- wifi->setProtocol(UDP);
-
+ //wifi->setProtocol(UDP);
+ /*
// connect the network
if (wifi->isDHCP()) {
- if (!wifi->sendCommand("join\r", "DHCP=ON", NULL, 10000))
+ if (!wifi->sendCommand("join\n\r", "DHCP=ON", NULL, 10000))
return -1;
} else {
- if (!wifi->sendCommand("join\r", "Associated", NULL, 10000))
+ if (!wifi->sendCommand("join\n\r", "Associated", NULL, 10000))
return -1;
}
-
+ */
// exit
wifi->exit();
wifi->flush();
@@ -104,7 +107,8 @@
break;
}
}
- }
+ pc.printf("UDPsocket::receiveFrom: %d bytes\r\n", nb_available);
+ }
tmr.start();
@@ -135,12 +139,12 @@
host = ep.get_address();
if (host[0] != '\0') {
// set host
- sprintf(cmd, "set i h %s\r", host);
+ sprintf(cmd, "set i h %s\r\n", host);
if (!wifi->sendCommand(cmd, "AOK"))
return false;
// set remote port
- sprintf(cmd, "set i r %d\r", ep.get_port());
+ sprintf(cmd, "set i r %d\r\n", ep.get_port());
if (!wifi->sendCommand(cmd, "AOK"))
return false;
@@ -161,7 +165,7 @@
string addr;
int port;
if (!endpoint_read) {
- if (!wifi->sendCommand("get ip\r", NULL, recv))
+ if (!wifi->sendCommand("get ip\r\n", NULL, recv))
return false;
wifi->exit();
str = recv;
--- 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();
--- a/WiflyInterface.cpp Tue Jun 03 18:43:14 2014 +0000
+++ b/WiflyInterface.cpp Wed Oct 08 19:57:58 2014 +0000
@@ -41,7 +41,7 @@
{
char * match = 0;
if (!ip_set) {
- if (!sendCommand("get ip a\r", NULL, ip_string))
+ if (!sendCommand("get ip a\r\n", NULL, ip_string))
return NULL;
exit();
flush();
ESP8266

Adafruit Huzzah