2024-10-29 16:55:26 +03:00
..
2024-10-29 16:55:26 +03:00
2024-10-29 16:37:47 +03:00

Документация 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. Настройте код в соответствии с вашими конкретными потребностями.