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

Commit 6dab754

Browse files
authored
v1.6.3 to add WebSockets examples
#### Releases v1.6.3 1. Add `Async_WebSocketsServer`, `Async_HttpBasicAuth` and `MQTT` examples
1 parent 417426a commit 6dab754

File tree

10 files changed

+1313
-0
lines changed

10 files changed

+1313
-0
lines changed
Lines changed: 185 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,185 @@
1+
/****************************************************************************************************************************
2+
Async_HttpBasicAuth.ino
3+
4+
For W5500 LwIP Ethernet in ESP32 (ESP32 + W5500)
5+
6+
AsyncWebServer_ESP32_W5500 is a library for the LwIP Ethernet W5500 in ESP32 to run AsyncWebServer
7+
8+
Based on and modified from ESPAsyncWebServer (https://github.com/me-no-dev/ESPAsyncWebServer)
9+
Built by Khoi Hoang https://github.com/khoih-prog/AsyncWebServer_ESP32_W5500
10+
Licensed under GPLv3 license
11+
*****************************************************************************************************************************/
12+
13+
#if !( defined(ESP32) )
14+
#error This code is designed for (ESP32 + W5500) to run on ESP32 platform! Please check your Tools->Board setting.
15+
#endif
16+
17+
#include <Arduino.h>
18+
19+
#define _ASYNC_WEBSERVER_LOGLEVEL_ 4
20+
21+
// Enter a MAC address and IP address for your controller below.
22+
#define NUMBER_OF_MAC 20
23+
24+
byte mac[][NUMBER_OF_MAC] =
25+
{
26+
{ 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0x01 },
27+
{ 0xDE, 0xAD, 0xBE, 0xEF, 0xBE, 0x02 },
28+
{ 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0x03 },
29+
{ 0xDE, 0xAD, 0xBE, 0xEF, 0xBE, 0x04 },
30+
{ 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0x05 },
31+
{ 0xDE, 0xAD, 0xBE, 0xEF, 0xBE, 0x06 },
32+
{ 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0x07 },
33+
{ 0xDE, 0xAD, 0xBE, 0xEF, 0xBE, 0x08 },
34+
{ 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0x09 },
35+
{ 0xDE, 0xAD, 0xBE, 0xEF, 0xBE, 0x0A },
36+
{ 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0x0B },
37+
{ 0xDE, 0xAD, 0xBE, 0xEF, 0xBE, 0x0C },
38+
{ 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0x0D },
39+
{ 0xDE, 0xAD, 0xBE, 0xEF, 0xBE, 0x0E },
40+
{ 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0x0F },
41+
{ 0xDE, 0xAD, 0xBE, 0xEF, 0xBE, 0x10 },
42+
{ 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0x11 },
43+
{ 0xDE, 0xAD, 0xBE, 0xEF, 0xBE, 0x12 },
44+
{ 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0x13 },
45+
{ 0xDE, 0xAD, 0xBE, 0xEF, 0xBE, 0x14 },
46+
};
47+
48+
// Select the IP address according to your local network
49+
IPAddress myIP(192, 168, 2, 232);
50+
IPAddress myGW(192, 168, 2, 1);
51+
IPAddress mySN(255, 255, 255, 0);
52+
53+
// Google DNS Server IP
54+
IPAddress myDNS(8, 8, 8, 8);
55+
56+
//////////////////////////////////////////////////////////
57+
58+
// Optional values to override default settings
59+
// Don't change unless you know what you're doing
60+
//#define ETH_SPI_HOST SPI3_HOST
61+
//#define SPI_CLOCK_MHZ 25
62+
63+
// Must connect INT to GPIOxx or not working
64+
//#define INT_GPIO 4
65+
66+
//#define MISO_GPIO 19
67+
//#define MOSI_GPIO 23
68+
//#define SCK_GPIO 18
69+
//#define CS_GPIO 5
70+
71+
//////////////////////////////////////////////////////////
72+
73+
#include <AsyncWebServer_ESP32_W5500.h>
74+
75+
AsyncWebServer server(80);
76+
77+
const char* www_username = "admin";
78+
const char* www_password = "esp32_w5500";
79+
80+
void setup()
81+
{
82+
Serial.begin(115200);
83+
84+
while (!Serial && millis() < 5000);
85+
86+
delay(200);
87+
88+
Serial.print("\nStart Async_HTTPBasicAuth on ");
89+
Serial.print(ARDUINO_BOARD);
90+
Serial.print(" with ");
91+
Serial.println(SHIELD_TYPE);
92+
Serial.println(ASYNC_WEBSERVER_ESP32_W5500_VERSION);
93+
94+
AWS_LOGWARN(F("Default SPI pinout:"));
95+
AWS_LOGWARN1(F("SPI_HOST:"), ETH_SPI_HOST);
96+
AWS_LOGWARN1(F("MOSI:"), MOSI_GPIO);
97+
AWS_LOGWARN1(F("MISO:"), MISO_GPIO);
98+
AWS_LOGWARN1(F("SCK:"), SCK_GPIO);
99+
AWS_LOGWARN1(F("CS:"), CS_GPIO);
100+
AWS_LOGWARN1(F("INT:"), INT_GPIO);
101+
AWS_LOGWARN1(F("SPI Clock (MHz):"), SPI_CLOCK_MHZ);
102+
AWS_LOGWARN(F("========================="));
103+
104+
///////////////////////////////////
105+
106+
// To be called before ETH.begin()
107+
ESP32_W5500_onEvent();
108+
109+
// start the ethernet connection and the server:
110+
// Use DHCP dynamic IP and random mac
111+
uint16_t index = millis() % NUMBER_OF_MAC;
112+
113+
//bool begin(int MISO_GPIO, int MOSI_GPIO, int SCLK_GPIO, int CS_GPIO, int INT_GPIO, int SPI_CLOCK_MHZ,
114+
// int SPI_HOST, uint8_t *W5500_Mac = W5500_Default_Mac);
115+
//ETH.begin( MISO_GPIO, MOSI_GPIO, SCK_GPIO, CS_GPIO, INT_GPIO, SPI_CLOCK_MHZ, ETH_SPI_HOST );
116+
ETH.begin( MISO_GPIO, MOSI_GPIO, SCK_GPIO, CS_GPIO, INT_GPIO, SPI_CLOCK_MHZ, ETH_SPI_HOST, mac[index] );
117+
118+
// Static IP, leave without this line to get IP via DHCP
119+
//bool config(IPAddress local_ip, IPAddress gateway, IPAddress subnet, IPAddress dns1 = 0, IPAddress dns2 = 0);
120+
//ETH.config(myIP, myGW, mySN, myDNS);
121+
122+
ESP32_W5500_waitForConnect();
123+
124+
///////////////////////////////////
125+
126+
server.on("/", HTTP_GET, [](AsyncWebServerRequest * request)
127+
{
128+
if (!request->authenticate(www_username, www_password))
129+
{
130+
return request->requestAuthentication();
131+
}
132+
133+
request->send(200, "text/plain", "Login OK");
134+
});
135+
136+
server.begin();
137+
138+
Serial.print(F("Async_HttpBasicAuth started @ IP : "));
139+
Serial.println(ETH.localIP());
140+
141+
Serial.print(F("Open http://"));
142+
Serial.print(ETH.localIP());
143+
Serial.println(F("/ in your browser to see it working"));
144+
145+
Serial.print(F("Login using username = "));
146+
Serial.print(www_username);
147+
Serial.print(F(" and password = "));
148+
Serial.println(www_password);
149+
}
150+
151+
void heartBeatPrint()
152+
{
153+
static int num = 1;
154+
155+
Serial.print(F("."));
156+
157+
if (num == 80)
158+
{
159+
Serial.println();
160+
num = 1;
161+
}
162+
else if (num++ % 10 == 0)
163+
{
164+
Serial.print(F(" "));
165+
}
166+
}
167+
168+
void check_status()
169+
{
170+
static unsigned long checkstatus_timeout = 0;
171+
172+
#define STATUS_CHECK_INTERVAL 10000L
173+
174+
// Send status report every STATUS_REPORT_INTERVAL (60) seconds: we don't need to send updates frequently if there is no status change.
175+
if ((millis() > checkstatus_timeout) || (checkstatus_timeout == 0))
176+
{
177+
heartBeatPrint();
178+
checkstatus_timeout = millis() + STATUS_CHECK_INTERVAL;
179+
}
180+
}
181+
182+
void loop()
183+
{
184+
check_status();
185+
}

0 commit comments

Comments
 (0)