Добрый день! Имеется вот такой код: Код (C++): #include <ESP8266WiFi.h> #include <WiFiUDP.h> #include <stdio.h> WiFiUDP UDP; const char* ssid = "DESKTOP-P0OPNR2 4337"; const char* password = "12345678"; boolean wifiConnected = false; unsigned int localPort = 8888; boolean udpConnected = false; char packetBuffer[UDP_TX_PACKET_MAX_SIZE]; const int BufSize = 128; String inputSTM_UART; char BufFromSTM[BufSize]; char BufFromPC[BufSize]; void setup() { Serial.begin(9600); Serial1.begin(9600); pinMode(D0, OUTPUT); wifiConnected = connectWifi(); if (wifiConnected) { udpConnected = connectUDP(); } } void loop() { if (wifiConnected) { if (udpConnected) { int packetSize = UDP.parsePacket(); if (packetSize) { GetFromPcSendToStm(); } GetFromStmSendToPc(); delay(20); } } } void GetFromPcSendToStm() { UDP.read(BufFromPC, UDP_TX_PACKET_MAX_SIZE); Serial.println(BufFromPC); delay(20); } void GetFromStmSendToPc() { digitalWrite(D0, HIGH); while (Serial.available()) { //Serial.readString().toCharArray(BufFromSTM, BufSize); //Serial.readBytes(BufFromSTM, BufSize); Serial.readBytesUntil('\n', BufFromSTM, BufSize); //Serial1.println(BufFromSTM); UDP.beginPacket(UDP.remoteIP(), UDP.remotePort()); UDP.write(BufFromSTM); UDP.endPacket(); delay(20); } digitalWrite(D0, LOW); } boolean connectUDP() { boolean state = false; if (UDP.begin(localPort) == 1) { state = true; } return state; } boolean connectWifi() { boolean state = true; int i = 0; WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); if (i > 10) { state = false; break; } i++; } return state; } Принцип такой: с ПК я отправляю на ESP команды движения (см. функцию GetFromPcSendToStm) и переотправляю их на STM32 - эта часть работает безупречно. Затем, STM32 катит, опрашивает датчики и отправляет данные на ESP (см. функцию GetFromStmSendToPc), а та должна переслать данные на ПК. И вот тут начинается беда: по WiFi ПК не получает вообще ничего! Я начал грешить на отсылку STMкой или на прием ESPшкой. Как известно, у ESP есть еще один UART, который не умеет принимать, но умеет передавать. Я задействовал его и слал по нему те же данные, что и по WiFi - все приходило, жалоб нет. Т.е. косяк именно в передаче ESPшкой по WiFi. Попробовал переписать одну из функций, переставив одну строку: Код (C++): void loop() { if (wifiConnected) { if (udpConnected) { int packetSize = UDP.parsePacket(); if (packetSize) { GetFromPcSendToStm(); GetFromStmSendToPc(); } delay(20); } } } Теперь ПК принимает данные от ESP, но только 1 штуку на каждую отправленную ПК команду. Т.е. если я с ПК отправлю 3 раза команду ехать вперед, то получу 3 строки с данными датчиков! Но, по моему плану (см. функцию GetFromStmSendToPc()), ESP должна слать строки до тех пор, пока ее буфер не опустошится. Пожалуйста, подскажите, что я делаю не так?
Чет у вас какой-то странный код. Зачем вы нагородили всё это добро с if (wifiConnected) итд? Почему у вас делеи везде натыканы ненужные? Почему бы не прописать хардкодом всё это дело? Почему не проверяете, что оно вам там вернуло? Почему вы вообще используете UDP, а не TCP?