Документация EthernetMaketServer
EthernetMaketServer — это класс, предназначенный для упрощения серверных операций с использованием библиотеки Ethernet. Он позволяет обрабатывать входящие подключения клиентов и эффективно обрабатывать данные.
Инициализация
Для инициализации EthernetMaketServer необходимо указать порт, на котором сервер будет слушать входящие подключения. Вот как это можно настроить:
#include <EthernetMaket.h>
// Определяем пин CS для W5500 и порт сервера
#define W5500_CS_PIN PA2
#define SERVER_PORT 1337
// Определяем MAC и IP адреса
byte mac[] = {0xDA, 0x7A, 0xFF, 0x00, 0x00, 0x00};
byte ip[] = {192, 168, 254, 254};
// Определяем шлюз и маску подсети
uint8_t gateway[] = {192, 168, 0, 1};
uint8_t subnet[] = {255, 255, 0, 0};
// Создаем экземпляр EthernetMaketServer
EthernetMaketServer server(SERVER_PORT);
void setup() {
    Serial.begin(115200);
    // Инициализация SPI и Ethernet
    SPI.begin();
    pinMode(W5500_CS_PIN, OUTPUT);
    digitalWrite(W5500_CS_PIN, HIGH);
    Ethernet.setCsPin(W5500_CS_PIN);
    Ethernet.init();
    Ethernet.begin(mac, ip, subnet, gateway, gateway);
    // Запуск сервера
    server.begin();
    Serial.print("Сервер запущен на ");
    Serial.println(Ethernet.localIP());
}
void loop() {
    server.tick();
}
Использование Колбэка
Вы можете задать функцию-колбэк для обработки входящих подключений клиентов. Эта функция будет вызываться всякий раз, когда клиент подключается и отправляет данные.
void serverHandler(EthernetClient client) {
    byte buf[BUFFERSIZE];
    int len = client.read(buf, sizeof(buf));
    // Обработка полученных данных
    // ...
    // Отправка ответа клиенту
    client.write("response data");
    if(/* соединение больше не нужно */){
        client.stop();
    }
}
void setup() {
    // ... (код инициализации)
    // Установка обработчика сервера
    server.setServerHandler(serverHandler);
}
Использование Без Колбэка
Если вы предпочитаете обрабатывать подключения клиентов без колбэка, вы можете напрямую проверять доступных клиентов в функции loop().
void loop() {
    for (int sock = 0; sock < MAX_SOCK_NUM; sock++) {
        EthernetMaketClient client = server.available(sock);
        if (client.connected() && client.available() > 0) {
            // Обработка подключения клиента
            byte buf[BUFFERSIZE];
            int len = client.read(buf, sizeof(buf));
            // Обработка полученных данных
            // ...
            // Отправка ответа клиенту
            client.write("response data");
            if(/* соединение больше не нужно */){
                client.stop();
            }
        }
    }
}
Дополнительные Заметки
- Убедитесь, что пин CS и сетевые настройки (MAC, IP, шлюз, маска подсети) правильно настроены для вашей сети.
- Метод tick()должен вызываться регулярно вloop(), чтобы обрабатывать входящие подключения и данные.
- Функция serverHandlerдолжна быть разработана для обработки конкретного протокола или формата данных, который вы используете.
Эта документация предоставляет базовый обзор того, как использовать класс EthernetMaketServer. Настройте код в соответствии с вашими конкретными потребностями.