#include #include // Настройки для W5500 #define W5500_CS_PIN PA2 // Пин для CS #define SERVER_PORT 1337 // Порт на сервере byte mac[] = {0xDA, 0x7A, 0xFF, 0x00, 0x00, 0x00}; // MAC-адрес сервера byte ip[] = {192, 168, 254, 254}; // IP-адрес сервера uint8_t gateway[] = {192, 168, 0, 1}; // Шлюз uint8_t subnet[] = {255, 255, 0, 0}; // Маска подсети EthernetMaketServer server(SERVER_PORT); // Создаем сервер на указанном порту unsigned long previousMillis = 0; // Время последней отправки const long interval = 1750; // Интервал отправки данных (1.75 секунды) uint32_t packetCounter = 0; uint32_t ttt; void serverHandler(EthernetClient client) { //! delay(10); // Ожидание окончания принятых данных, переделать в завершение по пакету финализации byte buf[512]; int len = client.read(buf, sizeof(buf)); Serial.print("sock: "); Serial.println(client.getSocketNumber()); processReceivedData(buf, len); // // Обработка каждого 4-байтового пакета // for (int i = 0; i < len; i += 4) // { // int packetLen = min(4, len - i); // Определяем длину текущего пакета // processReceivedData(buf + i, packetLen); // for (uint8_t j = 0; j < 3; j++) // { // sendResponse(client, *(uint32_t *)(buf + i)); // } // packetCounter++; // } //!----------------- Serial.println("DONE"); // client.stop(); Serial.println(); Serial.println(); } void setup() { Serial.begin(115200); // Инициализация SPI и Ethernet SPI.begin(); pinMode(W5500_CS_PIN, OUTPUT); pinMode(LED_BUILTIN, OUTPUT); digitalWrite(W5500_CS_PIN, HIGH); // Инициализация Ethernet Ethernet.setCsPin(W5500_CS_PIN); // Установка пина CS для W5500 Ethernet.init(); Ethernet.begin(mac, ip, subnet, gateway, gateway); // Запуск сервера server.begin(); server.setServerHandler(serverHandler); Serial.print("Server is running at "); Serial.println(Ethernet.localIP()); } void loop() { server.tick(); uint32_t currentMillis = millis(); if (currentMillis - ttt > 75) { digitalToggle(PC13); ttt = currentMillis; // Обновляем время } } // Обработка полученных данных void processReceivedData(byte *data, int len) { Serial.print("Received data: "); for (int i = 0; i < len; i++) { Serial.print(data[i], HEX); Serial.print(" "); } Serial.println(); } // Отправка ответа клиенту volatile void sendResponse(EthernetClient &client, uint32_t packetCount) { byte response[16]; // Заполняем массив данных for (int i = 0; i < 15; i++) { response[i] = (i + packetCount) % 256; // Пример данных } // Вычисление контрольной суммы uint8_t checksum = 0; for (int i = 0; i < 15; i++) { checksum += response[i]; } response[15] = checksum; // Установка контрольной суммы // Отправка данных клиенту client.write(response, sizeof(response)); Serial.print("Send response: "); for (int i = 0; i < 16; i++) { Serial.print(response[i], HEX); Serial.print(" "); } Serial.println(); }