167 lines
5.1 KiB
C++
167 lines
5.1 KiB
C++
/****************************************************************************************************************************
|
|
WebClient.ino - Simple Arduino web server sample for Ethernet shield
|
|
|
|
For Ethernet shields using ESP32_W5500 (ESP32 + W5500)
|
|
|
|
WebServer_ESP32_W5500 is a library for the ESP32 with Ethernet W5500 to run WebServer
|
|
|
|
Based on and modified from ESP32-IDF https://github.com/espressif/esp-idf
|
|
Built by Khoi Hoang https://github.com/khoih-prog/WebServer_ESP32_W5500
|
|
Licensed under GPLv3 license
|
|
*****************************************************************************************************************************/
|
|
|
|
#if !( defined(ESP32) )
|
|
#error This code is designed for (ESP32 + W5500) to run on ESP32 platform! Please check your Tools->Board setting.
|
|
#endif
|
|
|
|
#define DEBUG_ETHERNET_WEBSERVER_PORT Serial
|
|
|
|
// Debug Level from 0 to 4
|
|
#define _ETHERNET_WEBSERVER_LOGLEVEL_ 3
|
|
|
|
//////////////////////////////////////////////////////////
|
|
|
|
// Optional values to override default settings
|
|
// Don't change unless you know what you're doing
|
|
//#define ETH_SPI_HOST SPI3_HOST
|
|
//#define SPI_CLOCK_MHZ 25
|
|
|
|
// Must connect INT to GPIOxx or not working
|
|
//#define INT_GPIO 4
|
|
|
|
//#define MISO_GPIO 19
|
|
//#define MOSI_GPIO 23
|
|
//#define SCK_GPIO 18
|
|
//#define CS_GPIO 5
|
|
|
|
//////////////////////////////////////////////////////////
|
|
|
|
#include <WebServer_ESP32_W5500.h>
|
|
|
|
// Enter a MAC address and IP address for your controller below.
|
|
#define NUMBER_OF_MAC 20
|
|
|
|
byte mac[][NUMBER_OF_MAC] =
|
|
{
|
|
{ 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0x01 },
|
|
{ 0xDE, 0xAD, 0xBE, 0xEF, 0xBE, 0x02 },
|
|
{ 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0x03 },
|
|
{ 0xDE, 0xAD, 0xBE, 0xEF, 0xBE, 0x04 },
|
|
{ 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0x05 },
|
|
{ 0xDE, 0xAD, 0xBE, 0xEF, 0xBE, 0x06 },
|
|
{ 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0x07 },
|
|
{ 0xDE, 0xAD, 0xBE, 0xEF, 0xBE, 0x08 },
|
|
{ 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0x09 },
|
|
{ 0xDE, 0xAD, 0xBE, 0xEF, 0xBE, 0x0A },
|
|
{ 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0x0B },
|
|
{ 0xDE, 0xAD, 0xBE, 0xEF, 0xBE, 0x0C },
|
|
{ 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0x0D },
|
|
{ 0xDE, 0xAD, 0xBE, 0xEF, 0xBE, 0x0E },
|
|
{ 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0x0F },
|
|
{ 0xDE, 0xAD, 0xBE, 0xEF, 0xBE, 0x10 },
|
|
{ 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0x11 },
|
|
{ 0xDE, 0xAD, 0xBE, 0xEF, 0xBE, 0x12 },
|
|
{ 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0x13 },
|
|
{ 0xDE, 0xAD, 0xBE, 0xEF, 0xBE, 0x14 },
|
|
};
|
|
|
|
// Select the IP address according to your local network
|
|
IPAddress myIP(192, 168, 2, 232);
|
|
IPAddress myGW(192, 168, 2, 1);
|
|
IPAddress mySN(255, 255, 255, 0);
|
|
|
|
// Google DNS Server IP
|
|
IPAddress myDNS(8, 8, 8, 8);
|
|
|
|
char server[] = "arduino.tips";
|
|
|
|
// Initialize the Ethernet client object
|
|
WiFiClient client;
|
|
|
|
void setup()
|
|
{
|
|
Serial.begin(115200);
|
|
|
|
while (!Serial && (millis() < 5000));
|
|
|
|
Serial.print(F("\nStart WebClient on "));
|
|
Serial.print(ARDUINO_BOARD);
|
|
Serial.print(F(" with "));
|
|
Serial.println(SHIELD_TYPE);
|
|
Serial.println(WEBSERVER_ESP32_W5500_VERSION);
|
|
|
|
ET_LOGWARN(F("Default SPI pinout:"));
|
|
ET_LOGWARN1(F("SPI_HOST:"), ETH_SPI_HOST);
|
|
ET_LOGWARN1(F("MOSI:"), MOSI_GPIO);
|
|
ET_LOGWARN1(F("MISO:"), MISO_GPIO);
|
|
ET_LOGWARN1(F("SCK:"), SCK_GPIO);
|
|
ET_LOGWARN1(F("CS:"), CS_GPIO);
|
|
ET_LOGWARN1(F("INT:"), INT_GPIO);
|
|
ET_LOGWARN1(F("SPI Clock (MHz):"), SPI_CLOCK_MHZ);
|
|
ET_LOGWARN(F("========================="));
|
|
|
|
///////////////////////////////////
|
|
|
|
// To be called before ETH.begin()
|
|
ESP32_W5500_onEvent();
|
|
|
|
// start the ethernet connection and the server:
|
|
// Use DHCP dynamic IP and random mac
|
|
//bool begin(int MISO_GPIO, int MOSI_GPIO, int SCLK_GPIO, int CS_GPIO, int INT_GPIO, int SPI_CLOCK_MHZ,
|
|
// int SPI_HOST, uint8_t *W6100_Mac = W6100_Default_Mac);
|
|
ETH.begin( MISO_GPIO, MOSI_GPIO, SCK_GPIO, CS_GPIO, INT_GPIO, SPI_CLOCK_MHZ, ETH_SPI_HOST );
|
|
//ETH.begin( MISO_GPIO, MOSI_GPIO, SCK_GPIO, CS_GPIO, INT_GPIO, SPI_CLOCK_MHZ, ETH_SPI_HOST, mac[millis() % NUMBER_OF_MAC] );
|
|
|
|
// Static IP, leave without this line to get IP via DHCP
|
|
//bool config(IPAddress local_ip, IPAddress gateway, IPAddress subnet, IPAddress dns1 = 0, IPAddress dns2 = 0);
|
|
// KH, Dynamic not OK yet
|
|
//ETH.config(myIP, myGW, mySN, myDNS);
|
|
|
|
ESP32_W5500_waitForConnect();
|
|
|
|
///////////////////////////////////
|
|
|
|
Serial.println();
|
|
Serial.println(F("Starting connection to server..."));
|
|
|
|
// if you get a connection, report back via serial
|
|
if (client.connect(server, 80))
|
|
{
|
|
Serial.println(F("Connected to server"));
|
|
// Make a HTTP request
|
|
client.println(F("GET /asciilogo.txt HTTP/1.1"));
|
|
client.println(F("Host: arduino.tips"));
|
|
client.println(F("Connection: close"));
|
|
client.println();
|
|
}
|
|
}
|
|
|
|
void printoutData()
|
|
{
|
|
// if there are incoming bytes available
|
|
// from the server, read them and print them
|
|
while (client.available())
|
|
{
|
|
char c = client.read();
|
|
Serial.write(c);
|
|
Serial.flush();
|
|
}
|
|
}
|
|
|
|
void loop()
|
|
{
|
|
printoutData();
|
|
|
|
// if the server's disconnected, stop the client
|
|
if (!client.connected())
|
|
{
|
|
Serial.println();
|
|
Serial.println(F("Disconnecting from server..."));
|
|
client.stop();
|
|
|
|
// do nothing forever
|
|
while (true)
|
|
yield();
|
|
}
|
|
}
|