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: Socket/UDPSocket.cpp
- Revision:
- 12:c5f0eac67a8a
- Parent:
- 4:0bcec6272784
- Child:
- 13:41098c907200
--- 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;
ESP8266

Adafruit Huzzah