Daemon2017
New member
Добрый день!
Имеется вот такой код:
Принцип такой: с ПК я отправляю на ESP команды движения (см. функцию GetFromPcSendToStm) и переотправляю их на STM32 - эта часть работает безупречно. Затем, STM32 катит, опрашивает датчики и отправляет данные на ESP (см. функцию GetFromStmSendToPc), а та должна переслать данные на ПК.
И вот тут начинается беда: по WiFi ПК не получает вообще ничего!
Я начал грешить на отсылку STMкой или на прием ESPшкой. Как известно, у ESP есть еще один UART, который не умеет принимать, но умеет передавать. Я задействовал его и слал по нему те же данные, что и по WiFi - все приходило, жалоб нет. Т.е. косяк именно в передаче ESPшкой по WiFi.
Попробовал переписать одну из функций, переставив одну строку:
Теперь ПК принимает данные от ESP, но только 1 штуку на каждую отправленную ПК команду.
Т.е. если я с ПК отправлю 3 раза команду ехать вперед, то получу 3 строки с данными датчиков!
Но, по моему плану (см. функцию GetFromStmSendToPc()), ESP должна слать строки до тех пор, пока ее буфер не опустошится.
Пожалуйста, подскажите, что я делаю не так?
Имеется вот такой код:
Код:
#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;
}
И вот тут начинается беда: по WiFi ПК не получает вообще ничего!
Я начал грешить на отсылку STMкой или на прием ESPшкой. Как известно, у ESP есть еще один UART, который не умеет принимать, но умеет передавать. Я задействовал его и слал по нему те же данные, что и по WiFi - все приходило, жалоб нет. Т.е. косяк именно в передаче ESPшкой по WiFi.
Попробовал переписать одну из функций, переставив одну строку:
Код:
void loop()
{
if (wifiConnected)
{
if (udpConnected)
{
int packetSize = UDP.parsePacket();
if (packetSize)
{
GetFromPcSendToStm();
GetFromStmSendToPc();
}
delay(20);
}
}
}
Т.е. если я с ПК отправлю 3 раза команду ехать вперед, то получу 3 строки с данными датчиков!
Но, по моему плану (см. функцию GetFromStmSendToPc()), ESP должна слать строки до тех пор, пока ее буфер не опустошится.
Пожалуйста, подскажите, что я делаю не так?