21
21
*/
22
22
23
23
#include < ESP8266WiFi.h>
24
+ #include < WiFiUdp.h>
24
25
25
26
#define SSID " ssid"
26
27
#define PSK " psk"
27
28
28
- #define FQDN " www.google.com" // with both IPv4 & IPv6 addresses
29
- #define FQDN6 " par21s04-in-x04.1e100.net" // does not resolve in IPv4 (wanted: better example)
29
+ #define FQDN F ( " www.google.com" ) // with both IPv4 & IPv6 addresses
30
+ #define FQDN6 F ( " par21s04-in-x04.1e100.net" ) // does not resolve in IPv4 (wanted: better example)
30
31
#define STATUSDELAY_MS 30000
32
+ #define TCP_PORT 23
33
+ #define UDP_PORT 1111
31
34
32
- WiFiServer statusServer (23 );
35
+ <
8000
div class="diff-text-inner">WiFiServer statusServer (TCP_PORT);
36
+ WiFiUDP udp;
33
37
34
38
void fqdn (Print& out, const String& fqdn) {
35
- out.print (" resolving " );
39
+ out.print (F ( " resolving " ) );
36
40
out.print (fqdn);
37
- out.print (" : " );
41
+ out.print (F ( " : " ) );
38
42
IPAddress result;
39
43
if (WiFi.hostByName (fqdn.c_str (), result)) {
40
44
result.printTo (out);
41
45
out.println ();
42
46
} else
43
- out.println (" timeout or not found" );
47
+ out.println (F ( " timeout or not found" ) );
44
48
}
45
49
46
50
void status (Print& out) {
47
51
out.println ();
48
52
49
- out.print (" address= " );
53
+ out.print (F ( " address= " ) );
50
54
WiFi.localIP ().printTo (out);
51
55
out.println ();
52
- out.print (" gateway= " );
56
+ out.print (F ( " gateway= " ) );
53
57
WiFi.gatewayIP ().printTo (out);
54
58
out.println ();
55
- out.print (" netmask= " );
59
+ out.print (F ( " netmask= " ) );
56
60
WiFi.subnetMask ().printTo (out);
57
61
out.println ();
58
62
59
63
for (int i = 0 ; i < 3 ; i++) {
60
- out.print (" dns" );
64
+ out.print (F ( " dns" ) );
61
65
out.print (i);
62
- out.print (" = " );
66
+ out.print (F ( " = " ) );
63
67
WiFi.dnsIP (i).printTo (out);
64
68
out.println ();
65
69
}
66
70
67
71
#if LWIP_IPV6
68
- out.println (" Try me at these addresses (with 'telnet <addr>'):" );
69
- out.print (" IPv6 link-scope(intranet)= " );
72
+ out.println (F (" Try me at these addresses:" ));
73
+ out.println (F (" (with 'telnet <addr>')" ));
74
+ out.println (F (" (with 'nc -u <addr> 1111')" ));
75
+ out.print (F (" IPv6 link-scope(intranet)= " ));
70
76
WiFi.localIP6Link ().printTo (out);
71
77
out.println ();
72
- out.print (" IPV6 global-scope(internet)= " );
78
+ out.print (F ( " IPV6 global-scope(internet)= " ) );
73
79
WiFi.localIP6Global ().printTo (out);
74
80
out.println ();
75
81
#endif
@@ -87,22 +93,29 @@ void setup() {
87
93
Serial.println ();
88
94
Serial.println (ESP.getFullVersion ());
89
95
96
+ WiFi.setSleepMode (WIFI_NONE_SLEEP);
90
97
WiFi.mode (WIFI_STA);
91
98
WiFi.begin (SSID, PSK);
92
99
while (WiFi.status () != WL_CONNECTED)
93
100
{
94
101
Serial.print (' .' );
95
102
delay (500 );
96
103
}
97
- Serial.println (" connected" );
104
+ Serial.println (F ( " connected: " ) );
98
105
99
106
statusServer.begin ();
107
+ udp.begin (UDP_PORT);
108
+
109
+ Serial.print (F (" TCP server on port " ));
110
+ Serial.print (TCP_PORT);
111
+ Serial.print (F (" - UDP server on port " ));
112
+ Serial.println (UDP_PORT);
100
113
}
101
114
102
115
unsigned long statusTimeMs = 0 ;
103
116
104
117
void loop () {
105
-
118
+
106
119
if (statusServer.hasClient ()) {
107
120
WiFiClient cli = statusServer.available ();
108
121
cli.setNoDelay (0 ); // should be default, was not default
@@ -111,6 +124,34 @@ void loop() {
111
124
cli.stop ();
112
125
}
113
126
127
+ // if there's data available, read a packet
128
+ int packetSize = udp.parsePacket ();
129
+ if (packetSize) {
130
+ Serial.print (F (" udp received " ));
131
+ Serial.print (packetSize);
132
+ Serial.print (F (" bytes from " ));
133
+ udp.remoteIP ().printTo (Serial);
134
+ Serial.print (F (" :" ));
135
+ Serial.println (udp.remotePort ());
136
+
137
+ char * buffer = (char *)malloc (packetSize + 1 );
138
+ if (buffer) {
139
+ udp.read (buffer, packetSize);
140
+ buffer[packetSize] = 0 ;
141
+ Serial.println (F (" Contents:" ));
142
+ Serial.println (buffer);
143
+
144
+ // send a reply, to the IP address and port that sent us the packet we received
145
+ udp.beginPacket (udp.remoteIP (), udp.remotePort ());
146
+ udp.write (buffer, packetSize);
147
+ udp.endPacket ();
148
+ free (buffer);
149
+ } else {
150
+ Serial.println (F (" udp: malloc failed" ));
151
+ while (udp.read () >= 0 );
152
+ }
153
+ }
154
+
114
155
unsigned long now = millis ();
115
156
if (now > statusTimeMs) {
116
157
statusTimeMs = now + STATUSDELAY_MS;
0 commit comments