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