Skip to content
This repository was archived by the owner on Feb 4, 2023. It is now read-only.

Commit 7e2045c

Browse files
authored
v1.1.0 for ESP32_S2/C3 & LwIP Ethernet
### Releases v1.1.0 1. Add support to `ESP32S2/C3` boards using `LwIP W5500 or ENC28J60 Ethernet`
1 parent e37105e commit 7e2045c

21 files changed

+49520
-81
lines changed

Images/ESP32S2_DEV.png

352 KB
Loading

Images/ESP32_C3_DevKitC_02.png

205 KB
Loading

changelog.md

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
1-
# AsyncDNSServer_ESP32_Ethernet Library
1+
# AsyncUDP_ESP32_SC_Ethernet
22

3-
[![arduino-library-badge](https://www.ardu-badge.com/badge/AsyncDNSServer_ESP32_Ethernet.svg?)](https://www.ardu-badge.com/AsyncDNSServer_ESP32_Ethernet)
4-
[![GitHub release](https://img.shields.io/github/release/khoih-prog/AsyncDNSServer_ESP32_Ethernet.svg)](https://github.com/khoih-prog/AsyncDNSServer_ESP32_Ethernet/releases)
3+
4+
[![arduino-library-badge](https://www.ardu-badge.com/badge/AsyncUDP_ESP32_SC_Ethernet.svg?)](https://www.ardu-badge.com/AsyncUDP_ESP32_SC_Ethernet)
5+
[![GitHub release](https://img.shields.io/github/release/khoih-prog/AsyncUDP_ESP32_SC_Ethernet.svg)](https://github.com/khoih-prog/AsyncUDP_ESP32_SC_Ethernet/releases)
56
[![contributions welcome](https://img.shields.io/badge/contributions-welcome-brightgreen.svg?style=flat)](#Contributing)
6-
[![GitHub issues](https://img.shields.io/github/issues/khoih-prog/AsyncDNSServer_ESP32_Ethernet.svg)](http://github.com/khoih-prog/AsyncDNSServer_ESP32_Ethernet/issues)
7+
[![GitHub issues](https://img.shields.io/github/issues/khoih-prog/AsyncUDP_ESP32_SC_Ethernet.svg)](http://github.com/khoih-prog/AsyncUDP_ESP32_SC_Ethernet/issues)
78

89

910
<a href="https://www.buymeacoffee.com/khoihprog6" title="Donate to my libraries using BuyMeACoffee"><img src="https://cdn.buymeacoffee.com/buttons/v2/default-yellow.png" alt="Donate to my libraries using BuyMeACoffee" style="height: 50px !important;width: 181px !important;" ></a>
@@ -16,14 +17,21 @@
1617
## Table of Contents
1718

1819
* [Changelog](#changelog)
19-
* [Initial Releases v1.0.0](#initial-releases-v100)
20+
* [Releases v2.1.0](#releases-v210)
21+
* [Initial Releases v2.0.0](#initial-releases-v200)
2022

2123
---
2224
---
2325

2426
## Changelog
2527

26-
### Initial Releases v1.0.0
28+
### Releases v2.1.0
29+
30+
1. Add support to `ESP32S2/C3` boards using `LwIP W5500 or ENC28J60 Ethernet`
31+
32+
### Initial Releases v2.0.0
33+
34+
1. Initial coding to port [AsyncUDP](https://github.com/espressif/arduino-esp32/tree/master/libraries/AsyncUDP) to ESP32_S3 boards using `LwIP W5500 or ENC28J60 Ethernet`
35+
2. Bump up to v2.0.0 to sync with [AsyncUDP v2.0.0](https://github.com/espressif/arduino-esp32/tree/master/libraries/AsyncUDP)
2736

28-
1. Initial coding to support `ESP32/S2/S3/C3` boards using `LwIP W5500 or ENC28J60 Ethernet`
2937

Lines changed: 287 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,287 @@
1+
/****************************************************************************************************************************
2+
Async_UdpClient.ino
3+
4+
AsyncUDP_ESP32_SC_Ethernet is a Async UDP library for the ESP32_SC_Ethernet (ESP32S2/S3/C3 + LwIP W5500 / ENC28J60)
5+
6+
Based on and modified from ESPAsyncUDP Library (https://github.com/me-no-dev/ESPAsyncUDP)
7+
Built by Khoi Hoang https://github.com/khoih-prog/AsyncUDP_ESP32_SC_Ethernet
8+
Licensed under GPLv3 license
9+
*****************************************************************************************************************************/
10+
11+
#if !( defined(ESP32) )
12+
#error This code is designed for (ESP32S2/S3/C3 + LwIP W5500 or ENC28J60) to run on ESP32 platform! Please check your Tools->Board setting.
13+
#endif
14+
15+
#include <Arduino.h>
16+
17+
#define USING_W5500 true
18+
#define USING_ENC28J60 false
19+
20+
#if !USING_W5500 && !USING_ENC28J60
21+
#undef USING_W5500
22+
#define USING_W5500 true
23+
#endif
24+
25+
#define ASYNC_UDP_ESP32_SC_ETHERNET_DEBUG_PORT Serial
26+
27+
// Use from 0 to 4. Higher number, more debugging messages and memory usage.
28+
#define _ASYNC_UDP_ESP32_SC_ETHERNET_LOGLEVEL_ 4
29+
30+
//////////////////////////////////////////////////////////
31+
32+
#if USING_W5500
33+
34+
// For ESP32_S3
35+
// Optional values to override default settings
36+
// Don't change unless you know what you're doing
37+
//#define ETH_SPI_HOST SPI3_HOST
38+
//#define SPI_CLOCK_MHZ 25
39+
40+
// Must connect INT to GPIOxx or not working
41+
//#define INT_GPIO 4
42+
43+
//#define MISO_GPIO 13
44+
//#define MOSI_GPIO 11
45+
//#define SCK_GPIO 12
46+
//#define CS_GPIO 10
47+
48+
// For ESP32_C3
49+
// Optional values to override default settings
50+
// Don't change unless you know what you're doing
51+
//#define ETH_SPI_HOST SPI2_HOST
52+
//#define SPI_CLOCK_MHZ 25
53+
54+
// Must connect INT to GPIOxx or not working
55+
//#define INT_GPIO 10
56+
57+
//#define MISO_GPIO 5
58+
//#define MOSI_GPIO 6
59+
//#define SCK_GPIO 4
60+
//#define CS_GPIO 7
61+
62+
//////////////////////////////////////////////////////////
63+
64+
#else // #if USING_W5500
65+
66+
//////////////////////////////////////////////////////////
67+
68+
// For ENC28J60
69+
70+
// Optional values to override default settings
71+
// Don't change unless you know what you're doing
72+
//#define ETH_SPI_HOST SPI2_HOST
73+
//#define SPI_CLOCK_MHZ 8
74+
75+
// Must connect INT to GPIOxx or not working
76+
//#define INT_GPIO 4
77+
78+
//#define MISO_GPIO 13
79+
//#define MOSI_GPIO 11
80+
//#define SCK_GPIO 12
81+
//#define CS_GPIO 10
82+
83+
//////////////////////////////////////////////////////////
84+
85+
#endif // #if USING_W5500
86+
87+
//////////////////////////////////////////////////////////
88+
89+
#include <AsyncUDP_ESP32_SC_Ethernet.h>
90+
91+
IPAddress remoteIPAddress = IPAddress(192, 168, 2, 112);
92+
93+
#define UDP_REMOTE_PORT 5698
94+
95+
/////////////////////////////////////////////
96+
97+
// Enter a MAC address and IP address for your controller below.
98+
#define NUMBER_OF_MAC 20
99+
100+
byte mac[][NUMBER_OF_MAC] =
101+
{
102+
{ 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0x01 },
103+
{ 0xDE, 0xAD, 0xBE, 0xEF, 0xBE, 0x02 },
104+
{ 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0x03 },
105+
{ 0xDE, 0xAD, 0xBE, 0xEF, 0xBE, 0x04 },
106+
{ 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0x05 },
107+
{ 0xDE, 0xAD, 0xBE, 0xEF, 0xBE, 0x06 },
108+
{ 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0x07 },
109+
{ 0xDE, 0xAD, 0xBE, 0xEF, 0xBE, 0x08 },
110+
{ 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0x09 },
111+
{ 0xDE, 0xAD, 0xBE, 0xEF, 0xBE, 0x0A },
112+
{ 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0x0B },
113+
{ 0xDE, 0xAD, 0xBE, 0xEF, 0xBE, 0x0C },
114+
{ 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0x0D },
115+
{ 0xDE, 0xAD, 0xBE, 0xEF, 0xBE, 0x0E },
116+
{ 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0x0F },
117+
{ 0xDE, 0xAD, 0xBE, 0xEF, 0xBE, 0x10 },
118+
{ 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0x11 },
119+
{ 0xDE, 0xAD, 0xBE, 0xEF, 0xBE, 0x12 },
120+
{ 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0x13 },
121+
{ 0xDE, 0xAD, 0xBE, 0xEF, 0xBE, 0x14 },
122+
};
123+
124+
// Select the IP address according to your local network
125+
IPAddress myIP(192, 168, 2, 232);
126+
IPAddress myGW(192, 168, 2, 1);
127+
IPAddress mySN(255, 255, 255, 0);
128+
129+
// Google DNS Server IP
130+
IPAddress myDNS(8, 8, 8, 8);
131+
132+
/////////////////////////////////////////////
133+
134+
AsyncUDP udp;
135+
136+
void parsePacket(AsyncUDPPacket packet)
137+
{
138+
Serial.print("UDP Packet Type: ");
139+
Serial.print(packet.isBroadcast() ? "Broadcast" : packet.isMulticast() ? "Multicast" : "Unicast");
140+
Serial.print(", From: ");
141+
Serial.print(packet.remoteIP());
142+
Serial.print(":");
143+
Serial.print(packet.remotePort());
144+
Serial.print(", To: ");
145+
Serial.print(packet.localIP());
146+
Serial.print(":");
147+
Serial.print(packet.localPort());
148+
Serial.print(", Length: ");
149+
Serial.print(packet.length());
150+
Serial.print(", Data: ");
151+
Serial.write(packet.data(), packet.length());
152+
Serial.println();
153+
//reply to the client
154+
packet.printf("Got %u bytes of data", packet.length());
155+
}
156+
157+
#if USING_W5500
158+
159+
void initEthernet()
160+
{
161+
UDP_LOGWARN(F("Default SPI pinout:"));
162+
UDP_LOGWARN1(F("SPI_HOST:"), ETH_SPI_HOST);
163+
UDP_LOGWARN1(F("MOSI:"), MOSI_GPIO);
164+
UDP_LOGWARN1(F("MISO:"), MISO_GPIO);
165+
UDP_LOGWARN1(F("SCK:"), SCK_GPIO);
166+
UDP_LOGWARN1(F("CS:"), CS_GPIO);
167+
UDP_LOGWARN1(F("INT:"), INT_GPIO);
168+
UDP_LOGWARN1(F("SPI Clock (MHz):"), SPI_CLOCK_MHZ);
169+
UDP_LOGWARN(F("========================="));
170+
171+
///////////////////////////////////
172+
173+
// To be called before ETH.begin()
174+
ESP32_W5500_onEvent();
175+
176+
// start the ethernet connection and the server:
177+
// Use DHCP dynamic IP and random mac
178+
uint16_t index = millis() % NUMBER_OF_MAC;
179+
180+
//bool begin(int MISO_GPIO, int MOSI_GPIO, int SCLK_GPIO, int CS_GPIO, int INT_GPIO, int SPI_CLOCK_MHZ,
181+
// int SPI_HOST, uint8_t *W5500_Mac = W5500_Default_Mac);
182+
//ETH.begin( MISO_GPIO, MOSI_GPIO, SCK_GPIO, CS_GPIO, INT_GPIO, SPI_CLOCK_MHZ, ETH_SPI_HOST );
183+
ETH.begin( MISO_GPIO, MOSI_GPIO, SCK_GPIO, CS_GPIO, INT_GPIO, SPI_CLOCK_MHZ, ETH_SPI_HOST, mac[index] );
184+
185+
// Static IP, leave without this line to get IP via DHCP
186+
//bool config(IPAddress local_ip, IPAddress gateway, IPAddress subnet, IPAddress dns1 = 0, IPAddress dns2 = 0);
187+
//ETH.config(myIP, myGW, mySN, myDNS);
188+
189+
ESP32_W5500_waitForConnect();
190+
191+
///////////////////////////////////
192+
}
193+
194+
#else
195+
196+
void initEthernet()
197+
{
198+
UDP_LOGWARN(F("Default SPI pinout:"));
199+
UDP_LOGWARN1(F("SPI_HOST:"), ETH_SPI_HOST);
200+
UDP_LOGWARN1(F("MOSI:"), MOSI_GPIO);
201+
UDP_LOGWARN1(F("MISO:"), MISO_GPIO);
202+
UDP_LOGWARN1(F("SCK:"), SCK_GPIO);
203+
UDP_LOGWARN1(F("CS:"), CS_GPIO);
204+
UDP_LOGWARN1(F("INT:"), INT_GPIO);
205+
UDP_LOGWARN1(F("SPI Clock (MHz):"), SPI_CLOCK_MHZ);
206+
UDP_LOGWARN(F("========================="));
207+
208+
///////////////////////////////////
209+
210+
// To be called before ETH.begin()
211+
ESP32_ENC_onEvent();
212+
213+
// start the ethernet connection and the server:
214+
// Use DHCP dynamic IP and random mac
215+
uint16_t index = millis() % NUMBER_OF_MAC;
216+
217+
//bool begin(int MISO_GPIO, int MOSI_GPIO, int SCLK_GPIO, int CS_GPIO, int INT_GPIO, int SPI_CLOCK_MHZ,
218+
// int SPI_HOST, uint8_t *ENC28J60_Mac = ENC28J60_Default_Mac);
219+
//ETH.begin( MISO_GPIO, MOSI_GPIO, SCK_GPIO, CS_GPIO, INT_GPIO, SPI_CLOCK_MHZ, ETH_SPI_HOST );
220+
ETH.begin( MISO_GPIO, MOSI_GPIO, SCK_GPIO, CS_GPIO, INT_GPIO, SPI_CLOCK_MHZ, ETH_SPI_HOST, mac[index] );
221+
222+
// Static IP, leave without this line to get IP via DHCP
223+
//bool config(IPAddress local_ip, IPAddress gateway, IPAddress subnet, IPAddress dns1 = 0, IPAddress dns2 = 0);
224+
//ETH.config(myIP, myGW, mySN, myDNS);
225+
226+
ESP32_ENC_waitForConnect();
227+
228+
///////////////////////////////////
229+
}
230+
231+
#endif
232+
233+
////////////////////////////////////
234+
235+
void setup()
236+
{
237+
Serial.begin(115200);
238+
239+
while (!Serial && (millis() < 5000));
240+
241+
delay(500);
242+
243+
Serial.print(F("\nStart Async_UDPClient on "));
244+
Serial.print(ARDUINO_BOARD);
245+
Serial.print(F(" with "));
246+
Serial.println(SHIELD_TYPE);
247+
248+
#if USING_W5500
249+
Serial.println(WEBSERVER_ESP32_SC_W5500_VERSION);
250+
#else
251+
Serial.println(WEBSERVER_ESP32_SC_ENC_VERSION);
252+
#endif
253+
254+
Serial.println(ASYNC_UDP_ESP32_SC_ETHERNET_VERSION);
255+
256+
Serial.setDebugOutput(true);
257+
258+
///////////////////////////////////
259+
260+
initEthernet();
261+
262+
///////////////////////////////////
263+
264+
// Client address
265+
Serial.print("Async_UDPClient started @ IP address: ");
266+
Serial.println(ETH.localIP());
267+
268+
if (udp.connect(remoteIPAddress, UDP_REMOTE_PORT))
269+
{
270+
Serial.println("UDP connected");
271+
272+
udp.onPacket([](AsyncUDPPacket packet)
273+
{
274+
parsePacket( packet);
275+
});
276+
277+
//Send unicast
278+
udp.print("Hello Server!");
279+
}
280+
}
281+
282+
void loop()
283+
{
284+
delay(10000);
285+
//Send broadcast on port UDP_REMOTE_PORT = 1234
286+
udp.broadcastTo("Anyone here?", UDP_REMOTE_PORT);
287+
}

0 commit comments

Comments
 (0)