#include <QNEthernet.h>
using namespace qindesign::network;
constexpr uint32_t kDHCPTimeout = 10000;
constexpr uint16_t kPort = 5000;
EthernetUDP udp;
// Program setup.
void setup() {
Serial.begin(115200);
while (!Serial && millis() < 4000) {
// Wait for Serial to initialize
}
stdPrint = &Serial; // Make printf work (a QNEthernet feature)
printf("Starting...\n");
uint8_t mac[6];
Ethernet.macAddress(mac);
printf("MAC = %02x:%02x:%02x:%02x:%02x:%02x\n",
mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]);
printf("Starting Ethernet with DHCP...\n");
if (!Ethernet.begin()) {
printf("Failed to start Ethernet\n");
return;
}
if (!Ethernet.waitForLocalIP(kDHCPTimeout)) {
printf("Failed to get IP address from DHCP\n");
return;
}
IPAddress ip = Ethernet.localIP();
printf(" Local IP = %u.%u.%u.%u\n", ip[0], ip[1], ip[2], ip[3]);
ip = Ethernet.subnetMask();
printf(" Subnet mask = %u.%u.%u.%u\n", ip[0], ip[1], ip[2], ip[3]);
ip = Ethernet.gatewayIP();
printf(" Gateway = %u.%u.%u.%u\n", ip[0], ip[1], ip[2], ip[3]);
ip = Ethernet.dnsServerIP();
printf(" DNS = %u.%u.%u.%u\n", ip[0], ip[1], ip[2], ip[3]);
udp.begin(kPort);
printf("Receiving UDP packets on port %u...\n", kPort);
}
// Main program loop.
void loop() {
static int counter = 0;
int size = udp.parsePacket();
if (size > 0) {
printf("%d: size=%d\n", (++counter), size);
}
}