Enable use of wired Ethernet modules as first-class LWIP citizens. All networking classes like MDNS, WebServer, HTTPClient, WiFiClient, and OTA can use a wired Ethernet adapter just like built-in WiFi. Two examples updated to show proper use. Uses the Async Context support built into the Pico SDK. When running on the Pico it will use the CYW43 async instance. Uses modified wired Ethernet drivers, thanks Nicholas Humfrey! Note, the classic, non-LWIP integrated `Ethernet` and related libraries should still work fine (but not be able to use WebServer/HTTPS/etc.) Fixes #775
96 lines
2.1 KiB
Arduino
96 lines
2.1 KiB
Arduino
/*
|
|
This sketch establishes a TCP connection to a "quote of the day" service.
|
|
It sends a "hello" message, and then prints received data.
|
|
*/
|
|
|
|
#include <WiFi.h>
|
|
|
|
#ifndef STASSID
|
|
#define STASSID "your-ssid"
|
|
#define STAPSK "your-password"
|
|
#endif
|
|
|
|
const char* ssid = STASSID;
|
|
const char* password = STAPSK;
|
|
|
|
const char* host = "djxmmx.net";
|
|
const uint16_t port = 17;
|
|
|
|
WiFiMulti multi;
|
|
|
|
void setup() {
|
|
Serial.begin(115200);
|
|
|
|
// We start by connecting to a WiFi network
|
|
|
|
Serial.println();
|
|
Serial.println();
|
|
Serial.print("Connecting to ");
|
|
Serial.println(ssid);
|
|
|
|
multi.addAP(ssid, password);
|
|
|
|
if (multi.run() != WL_CONNECTED) {
|
|
Serial.println("Unable to connect to network, rebooting in 10 seconds...");
|
|
delay(10000);
|
|
rp2040.reboot();
|
|
}
|
|
|
|
Serial.println("");
|
|
Serial.println("WiFi connected");
|
|
Serial.println("IP address: ");
|
|
Serial.println(WiFi.localIP());
|
|
}
|
|
|
|
void loop() {
|
|
static bool wait = false;
|
|
|
|
Serial.print("connecting to ");
|
|
Serial.print(host);
|
|
Serial.print(':');
|
|
Serial.println(port);
|
|
|
|
// Use WiFiClient class to create TCP connections
|
|
WiFiClient client;
|
|
if (!client.connect(host, port)) {
|
|
Serial.println("connection failed");
|
|
delay(5000);
|
|
return;
|
|
}
|
|
|
|
// This will send a string to the server
|
|
Serial.println("sending data to server");
|
|
if (client.connected()) {
|
|
client.println("hello from RP2040");
|
|
}
|
|
|
|
// wait for data to be available
|
|
unsigned long timeout = millis();
|
|
while (client.available() == 0) {
|
|
if (millis() - timeout > 5000) {
|
|
Serial.println(">>> Client Timeout !");
|
|
client.stop();
|
|
delay(60000);
|
|
return;
|
|
}
|
|
}
|
|
|
|
// Read all the lines of the reply from server and print them to Serial
|
|
Serial.println("receiving from remote server");
|
|
// not testing 'client.connected()' since we do not need to send data here
|
|
while (client.available()) {
|
|
char ch = static_cast<char>(client.read());
|
|
Serial.print(ch);
|
|
}
|
|
|
|
// Close the connection
|
|
Serial.println();
|
|
Serial.println("closing connection");
|
|
client.stop();
|
|
|
|
if (wait) {
|
|
delay(300000); // execute once every 5 minutes, don't flood remote service
|
|
}
|
|
wait = true;
|
|
}
|