ESP отправка данных в Arduino

Я пытаюсь отправить данные с esp на arduino с помощью serial, используя следующие коды :

особенно :

server.on("/drive",HTTP_GET, handleDrive);
void handleDrive() 
{
    server.send(200,"text/html", "Drive!");
    String sendToArduino = "";
    for (int i=0;i<server.args();i++) 
    {
   sendToArduino = sendToArduino+server.argName(i)+"="+sendToArduino.arg(i)+"&";
    }
    Serial.println(sendToArduino);
}

и на arduino :

Serial.begin(9600);
esp8266.begin(115200);


if (esp8266.available()) 
{
   String  readString="";
   while (esp8266.available()) 
   {
     delay(2); 
     char c = esp8266.read();  
     readString += c;
   }
}

но когда я отправляю данные из esp в arduino, я получаю их с "шумом".

Пример : "переменная 1=1234" я получаю ее на arduino "переменнаяb@e=12" Что я могу сделать, чтобы убедиться, что то, что я отправляю, совпадает с тем, что есть в arduino ?

, 👍1

Обсуждение

Две вещи: 1. правильно прочитайте серийный номер (https://majenko.co.uk/blog/reading-serial-arduino), и 2. с какой скоростью передачи данных вы общаетесь?, @Majenko

Serial.begin(9600); esp8266.begin(115200); в arduino, @user863873

Извините, что это за задержка(2)? Вы отправляете один байт из ESP примерно за 87us и заставляете читать его каждые 2 мс?, @frarugi87


1 ответ


1

Во-первых, вам нужно написать более надежную процедуру последовательного чтения на Arduino. В нынешнем виде вашей рутине повезло, что вы вообще получаете то, что делаете. Вам нужно написать процедуру, которая не заботится о времени, а вместо этого заботится о завершающем символе строки, которую вы получаете.

  • Вот статья, которую я написал обо всем этом.

Во-вторых, вы не можете надежно обмениваться данными с помощью программного обеспечения на скорости 115200 бод. В то время как Arduino способен принимать байт с такой скоростью передачи данных, используя битовый стук, обычно между последовательными байтами недостаточно времени, чтобы позволить Arduino хранить то, что он только что получил, и поэтому он начинает получать часть следующего байта, повреждая как его, так и следующий байт. Это и есть причина коррупции, которую вы видите.

Вы должны либо замедлить скорость передачи данных в бодах (9600-хороший выбор), либо отправлять данные по одному байту за раз и добавлять задержку между каждым байтом (несколько банально...).

,