forked from esp8266/Arduino
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
make WiFi/Ethernet interface compatible with Arduino Ethernet API (es…
…p8266#8645) * make WiFi/Ethernet interface compatible with Arduino Ethernet API provide some minimaly adapted examples from legacy * move ethernet compat globals to EthernetCompat.h * LegacyEthernet: add UDP example * adjust comments Co-authored-by: Max Prokhorov <[email protected]>
- Loading branch information
Showing
7 changed files
with
590 additions
and
2 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
126 changes: 126 additions & 0 deletions
126
libraries/lwIP_Ethernet/examples/LegacyAdvancedChatServer/LegacyAdvancedChatServer.ino
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,126 @@ | ||
/* | ||
Advanced Chat Server | ||
A more advanced server that distributes any incoming messages | ||
to all connected clients but the client the message comes from. | ||
To use, telnet to your device's IP address and type. | ||
You can see the client's input in the serial monitor as well. | ||
Using an Arduino Wiznet Ethernet shield. | ||
Circuit: | ||
* Ethernet Wiznet5500/Wiznet5100/ENC28J60 on esp8266 | ||
created 18 Dec 2009 | ||
by David A. Mellis | ||
modified 9 Apr 2012 | ||
by Tom Igoe | ||
redesigned to make use of operator== 25 Nov 2013 | ||
by Norbert Truchsess | ||
*/ | ||
|
||
// specific to esp8266 w/lwIP | ||
#include <EthernetCompat.h> | ||
ArduinoWiznet5500lwIP Ethernet(/*SS*/ 16); // <== adapt to your hardware | ||
// ArduinoWiznet5100lwIP Ethernet(/*SS*/ 16); // <== adapt to your hardware | ||
// ArduinoENC28J60lwIP Ethernet(/*SS*/ 16); // <== adapt to your hardware | ||
|
||
|
||
|
||
// Enter a MAC address and IP address for your controller below. | ||
// The IP address will be dependent on your local network. | ||
// gateway and subnet are optional: | ||
byte notNeededButAllowed_mac[] = { | ||
0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED | ||
}; | ||
byte* mac = nullptr; // automatic mac | ||
IPAddress ip(192, 168, 1, 177); | ||
IPAddress myDns(192, 168, 1, 1); | ||
IPAddress gateway(192, 168, 1, 1); | ||
IPAddress subnet(255, 255, 0, 0); | ||
|
||
|
||
// telnet defaults to port 23 | ||
EthernetServer server(23); | ||
|
||
EthernetClient clients[8]; | ||
|
||
void setup() { | ||
// You can use Ethernet.init(pin) to configure the CS pin | ||
// Ethernet.init(10); // Most Arduino shields | ||
// Ethernet.init(5); // MKR ETH shield | ||
// Ethernet.init(0); // Teensy 2.0 | ||
// Ethernet.init(20); // Teensy++ 2.0 | ||
// Ethernet.init(15); // ESP8266 with Adafruit Featherwing Ethernet | ||
// Ethernet.init(33); // ESP32 with Adafruit Featherwing Ethernet | ||
// // esp8266 w/lwIP: SS set in Ethernet constructor | ||
|
||
// initialize the Ethernet device | ||
Ethernet.begin(mac, ip, myDns, gateway, subnet); | ||
|
||
// Open serial communications and wait for port to open: | ||
Serial.begin(9600); | ||
while (!Serial) { | ||
; // wait for serial port to connect. Needed for native USB port only | ||
} | ||
|
||
// Check for Ethernet hardware present | ||
if (Ethernet.hardwareStatus() == EthernetNoHardware) { | ||
Serial.println("Ethernet shield was not found. Sorry, can't run without hardware. :("); | ||
while (true) { | ||
delay(1); // do nothing, no point running without Ethernet hardware | ||
} | ||
} | ||
if (Ethernet.linkStatus() == LinkOFF) { | ||
Serial.println("Ethernet cable is not connected."); | ||
} | ||
|
||
// start listening for clients | ||
server.begin(); | ||
|
||
Serial.print("Chat server address:"); | ||
Serial.println(Ethernet.localIP()); | ||
} | ||
|
||
void loop() { | ||
// check for any new client connecting, and say hello (before any incoming data) | ||
EthernetClient newClient = server.accept(); | ||
if (newClient) { | ||
for (byte i = 0; i < 8; i++) { | ||
if (!clients[i]) { | ||
Serial.print("We have a new client #"); | ||
Serial.println(i); | ||
newClient.print("Hello, client number: "); | ||
newClient.println(i); | ||
// Once we "accept", the client is no longer tracked by EthernetServer | ||
// so we must store it into our list of clients | ||
clients[i] = newClient; | ||
break; | ||
} | ||
} | ||
} | ||
|
||
// check for incoming data from all clients | ||
for (byte i = 0; i < 8; i++) { | ||
if (clients[i] && clients[i].available() > 0) { | ||
// read bytes from a client | ||
byte buffer[80]; | ||
int count = clients[i].read(buffer, 80); | ||
// write the bytes to all other connected clients | ||
for (byte j = 0; j < 8; j++) { | ||
if (j != i && clients[j].connected()) { | ||
clients[j].write(buffer, count); | ||
} | ||
} | ||
} | ||
} | ||
|
||
// stop any clients which disconnect | ||
for (byte i = 0; i < 8; i++) { | ||
if (clients[i] && !clients[i].connected()) { | ||
Serial.print("disconnect client #"); | ||
Serial.println(i); | ||
clients[i].stop(); | ||
} | ||
} | ||
} |
105 changes: 105 additions & 0 deletions
105
libraries/lwIP_Ethernet/examples/LegacyChatServer/LegacyChatServer.ino
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,105 @@ | ||
/* | ||
Chat Server | ||
A simple server that distributes any incoming messages to all | ||
connected clients. To use, telnet to your device's IP address and type. | ||
You can see the client's input in the serial monitor as well. | ||
Using an Arduino Wiznet Ethernet shield. | ||
Circuit: | ||
* Ethernet Wiznet5500/Wiznet5100/ENC28J60 on esp8266 | ||
created 18 Dec 2009 | ||
by David A. Mellis | ||
modified 9 Apr 2012 | ||
by Tom Igoe | ||
*/ | ||
|
||
|
||
// specific to esp8266 w/lwIP | ||
#include <EthernetCompat.h> | ||
ArduinoWiznet5500lwIP Ethernet(/*SS*/ 16); // <== adapt to your hardware | ||
// ArduinoWiznet5100lwIP Ethernet(/*SS*/ 16); // <== adapt to your hardware | ||
// ArduinoENC28J60lwIP Ethernet(/*SS*/ 16); // <== adapt to your hardware | ||
|
||
|
||
|
||
// Enter a MAC address and IP address for your controller below. | ||
// The IP address will be dependent on your local network. | ||
// gateway and subnet are optional: | ||
byte notNeededButAllowed_mac[] = { | ||
0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED | ||
}; | ||
byte* mac = nullptr; // automatic mac | ||
IPAddress ip(192, 168, 1, 177); | ||
IPAddress myDns(192, 168, 1, 1); | ||
IPAddress gateway(192, 168, 1, 1); | ||
IPAddress subnet(255, 255, 0, 0); | ||
|
||
|
||
// telnet defaults to port 23 | ||
EthernetServer server(23); | ||
bool alreadyConnected = false; // whether or not the client was connected previously | ||
|
||
void setup() { | ||
// You can use Ethernet.init(pin) to configure the CS pin | ||
// Ethernet.init(10); // Most Arduino shields | ||
// Ethernet.init(5); // MKR ETH shield | ||
// Ethernet.init(0); // Teensy 2.0 | ||
// Ethernet.init(20); // Teensy++ 2.0 | ||
// Ethernet.init(15); // ESP8266 with Adafruit Featherwing Ethernet | ||
// Ethernet.init(33); // ESP32 with Adafruit Featherwing Ethernet | ||
// // esp8266 w/lwIP: SS set in Ethernet constructor | ||
|
||
// initialize the ethernet device | ||
Ethernet.begin(mac, ip, myDns, gateway, subnet); | ||
|
||
// Open serial communications and wait for port to open: | ||
Serial.begin(9600); | ||
while (!Serial) { | ||
; // wait for serial port to connect. Needed for native USB port only | ||
} | ||
|
||
// Check for Ethernet hardware present | ||
if (Ethernet.hardwareStatus() == EthernetNoHardware) { | ||
Serial.println("Ethernet shield was not found. Sorry, can't run without hardware. :("); | ||
while (true) { | ||
delay(1); // do nothing, no point running without Ethernet hardware | ||
} | ||
} | ||
if (Ethernet.linkStatus() == LinkOFF) { | ||
Serial.println("Ethernet cable is not connected."); | ||
} | ||
|
||
// start listening for clients | ||
server.begin(); | ||
|
||
Serial.print("Chat server address:"); | ||
Serial.println(Ethernet.localIP()); | ||
} | ||
|
||
void loop() { | ||
// wait for a new client: | ||
EthernetClient client = server.available(); | ||
|
||
// when the client sends the first byte, say hello: | ||
if (client) { | ||
if (!alreadyConnected) { | ||
// clear out the input buffer: | ||
client.flush(); | ||
Serial.println("We have a new client"); | ||
client.println("Hello, client!"); | ||
alreadyConnected = true; | ||
} | ||
|
||
if (client.available() > 0) { | ||
// read the bytes incoming from the client: | ||
char thisChar = client.read(); | ||
// echo the bytes back to the client: | ||
server.write(thisChar); | ||
// echo the bytes to the server as well: | ||
Serial.write(thisChar); | ||
} | ||
} | ||
} |
101 changes: 101 additions & 0 deletions
101
libraries/lwIP_Ethernet/examples/LegacyDhcpAddressPrinter/LegacyDhcpAddressPrinter.ino
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,101 @@ | ||
/* | ||
DHCP-based IP printer | ||
This sketch uses the DHCP extensions to the Ethernet library | ||
to get an IP address via DHCP and print the address obtained. | ||
using an Arduino Wiznet Ethernet shield. | ||
Circuit: | ||
* Ethernet Wiznet5500/Wiznet5100/ENC28J60 on esp8266 | ||
created 12 April 2011 | ||
modified 9 Apr 2012 | ||
by Tom Igoe | ||
modified 02 Sept 2015 | ||
by Arturo Guadalupi | ||
*/ | ||
|
||
// specific to esp8266 w/lwIP | ||
#include <EthernetCompat.h> | ||
ArduinoWiznet5500lwIP Ethernet(/*SS*/ 16); // <== adapt to your hardware | ||
// ArduinoWiznet5100lwIP Ethernet(/*SS*/ 16); // <== adapt to your hardware | ||
// ArduinoENC28J60lwIP Ethernet(/*SS*/ 16); // <== adapt to your hardware | ||
|
||
|
||
// Enter a MAC address for your controller below. | ||
// Newer Ethernet shields have a MAC address printed on a sticker on the shield | ||
byte notNeededButAllowed_mac[] = { | ||
0x00, 0xAA, 0xBB, 0xCC, 0xDE, 0x02 | ||
}; | ||
byte* mac = nullptr; // automatic mac | ||
|
||
void setup() { | ||
// You can use Ethernet.init(pin) to configure the CS pin | ||
// Ethernet.init(10); // Most Arduino shields | ||
// Ethernet.init(5); // MKR ETH shield | ||
// Ethernet.init(0); // Teensy 2.0 | ||
// Ethernet.init(20); // Teensy++ 2.0 | ||
// Ethernet.init(15); // ESP8266 with Adafruit Featherwing Ethernet | ||
// Ethernet.init(33); // ESP32 with Adafruit Featherwing Ethernet | ||
// // esp8266 w/lwIP: SS set in Ethernet constructor | ||
|
||
|
||
// Open serial communications and wait for port to open: | ||
Serial.begin(9600); | ||
while (!Serial) { | ||
; // wait for serial port to connect. Needed for native USB port only | ||
} | ||
|
||
// start the Ethernet connection: | ||
Serial.println("Initialize Ethernet with DHCP:"); | ||
if (Ethernet.begin(mac) == 0) { | ||
Serial.println("Failed to configure Ethernet using DHCP"); | ||
if (Ethernet.hardwareStatus() == EthernetNoHardware) { | ||
Serial.println("Ethernet shield was not found. Sorry, can't run without hardware. :("); | ||
} else if (Ethernet.linkStatus() == LinkOFF) { | ||
Serial.println("Ethernet cable is not connected."); | ||
} | ||
// no point in carrying on, so do nothing forevermore: | ||
while (true) { | ||
delay(1); | ||
} | ||
} | ||
// print your local IP address: | ||
Serial.print("My IP address: "); | ||
Serial.println(Ethernet.localIP()); | ||
} | ||
|
||
void loop() { | ||
switch (Ethernet.maintain()) { | ||
case 1: | ||
// renewed fail | ||
Serial.println("Error: renewed fail"); | ||
break; | ||
|
||
case 2: | ||
// renewed success | ||
Serial.println("Renewed success"); | ||
// print your local IP address: | ||
Serial.print("My IP address: "); | ||
Serial.println(Ethernet.localIP()); | ||
break; | ||
|
||
case 3: | ||
// rebind fail | ||
Serial.println("Error: rebind fail"); | ||
break; | ||
|
||
case 4: | ||
// rebind success | ||
Serial.println("Rebind success"); | ||
// print your local IP address: | ||
Serial.print("My IP address: "); | ||
Serial.println(Ethernet.localIP()); | ||
break; | ||
|
||
default: | ||
// nothing happened | ||
break; | ||
} | ||
} |
Oops, something went wrong.