Підключення інтернет шилда W5500 до ESP32

Підключення W5500 до ESЗ32, отримання точного часу по NTP та веб сервер з виводом інформації про ESP на сторінку.

 WIZnet W5500 – це вбудований Ethernet-контролер з підключенням TCP/IP, 10/100 Ethernet MAC і PHY. Cтек TCP/IP підтримує TCP, UDP, IPv4, ICMP, ARP, IGMP і PPPoE. Підтримка роботи з декількома сокетами одночасно. Інтерфес підключення SPI.

w5500-top
W5500 pinout

Підключення W5500 до ESP32

ESP32W5500
GPIO18SCK
GPIO19MISO
GPIO23MOSI
GPIO5CS
ENABLERST
5V5V
GNDGND

В даному прикладі будем використовувати NTPClient для отримання точного часу мережі. NTP сервіс точного часу.

Код програми

Приклад з DHCP.

#include <Arduino.h>
#include <SPI.h>
#include <Ethernet.h>
#include <NTPClient.h>

#define ETHERNET_CS_PIN 5

uint8_t mac_ethernet[6] = {'\0'};
const long utcOffsetInSeconds = 7200 + 3600;  //  UTC +2    літній час +1

EthernetUDP ethClient;

NTPClient timeClient(ethClient, "pool.ntp.org", utcOffsetInSeconds);

void ethernet_mac(uint8_t *_mac)
{
    uint8_t mac_this[6];
    if (esp_base_mac_addr_get(mac_this) != ESP_OK)
    {
        esp_efuse_mac_get_default(mac_this);
        for (int i = 0; i < 6; i++)
        {
            _mac[i] = mac_this[i];
            if (i == 5)
            {
                _mac[i] = mac_this[i] + 1;
            }
        }
    }
}

void setup()
{
    Serial.begin(115200);
    ethernet_mac(mac_ethernet);
    Ethernet.init(ETHERNET_CS_PIN);
    Ethernet.begin(mac_ethernet, 1000, 1000);
    Serial.println(Ethernet.localIP());
    timeClient.begin();
}

void print_time()
{
    if (!timeClient.update())
    {
        Serial.println("Error get time !");
        return;
    }

    Serial.print(timeClient.getHours());
    Serial.print(":");
    Serial.print(timeClient.getMinutes());
    Serial.print(":");
    Serial.println(timeClient.getSeconds());
}

void loop()
{
    static unsigned int timer = 0;

    if ((millis() - timer) > 1000)
    {
        timer = millis();
        print_time();
    }

    Ethernet.maintain();
}

Код програми з статичною IP адресою

IP адресу та шлюз (gateway) задйте свої.

#include <Arduino.h>
#include <SPI.h>
#include <Ethernet.h>
#include <NTPClient.h>

#define ETHERNET_CS_PIN 5

uint8_t mac_ethernet[6] = {'\0'};

IPAddress ip(192, 168, 1, 18);
IPAddress gateway(192, 168, 1, 1);
IPAddress subnet(255, 255, 255, 0);
IPAddress dns(8, 8, 8, 8);

const long utcOffsetInSeconds = 7200 + 3600; //  UTC +2    літній час +1

EthernetUDP ethClient;

NTPClient timeClient(ethClient, "pool.ntp.org", utcOffsetInSeconds);

void ethernet_mac(uint8_t *_mac)
{
    uint8_t mac_this[6];
    if (esp_base_mac_addr_get(mac_this) != ESP_OK)
    {
        esp_efuse_mac_get_default(mac_this);
        for (int i = 0; i < 6; i++)
        {
            _mac[i] = mac_this[i];
            if (i == 5)
            {
                _mac[i] = mac_this[i] + 1;
            }
        }
    }
}

void setup()
{
    Serial.begin(115200);
    ethernet_mac(mac_ethernet);
    Ethernet.init(ETHERNET_CS_PIN);
    Ethernet.begin(mac_ethernet, ip, dns, gateway, subnet);
    Serial.println(Ethernet.localIP());
    timeClient.begin();
}

void print_time()
{
    if (!timeClient.update())
    {
        Serial.println("Error get time !");
        return;
    }

    Serial.print(timeClient.getHours());
    Serial.print(":");
    Serial.print(timeClient.getMinutes());
    Serial.print(":");
    Serial.println(timeClient.getSeconds());
}

void loop()
{
    static unsigned int timer = 0;

    if ((millis() - timer) > 1000)
    {
        timer = millis();
        print_time();
    }
}

Даний код отримує точний час по NTP протоколу та виводить його у термінал серійного порту.

Наступний приклад створює веб сервер та виводить на сторінку час та інформацію про ESP.

#include <>

ESP32 підключення до Wi-Fi 

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *