Arduino не видит данные от nodemcu

Я пытаюсь отправить данные из NodeMCU в Arduino nano.

Если я попытаюсь отправить данные с задержкой в одну секунду, все будет работать нормально.

Но если я попытаюсь отправить без задержки или с задержкой менее одной секунды, то arduino видит данные, но ничего не делает.

Нано-скетч Arduino:

#include <Servo.h> 

Servo servo1; 

int servo = 6; 
int engine = 5; 

void setup() { 
Serial.begin(9600); 
analogWrite(servo, 67); 
servo1.attach(8); 
} 

void loop() { 
if (Serial.available()) { 
String model = Serial.readStringUntil(':'); 
i 

f (model.equals("engine")){ 
String value = Serial.readStringUntil('c'); 
int power = value.toInt(); 
analogWrite(engine, power); 
} 
if (model.equals("servo")){ 
String value_servo = Serial.readStringUntil('c'); 
int power_servo = value_servo.toInt(); 
servo1.write(power_servo); 
} 
} 
}

Скетч NodeMCU:

#include <ESP8266WiFi.h> 
#include <WiFiClient.h> 
#include <ESP8266WebServer.h> 
#include <ESP8266mDNS.h> 

const char* ssid = "my_wifi_ssid"; 
const char* password = "my_wifi_password"; 

ESP8266WebServer server(80); 


void get_vars(){ 
if (server.argName(0) == "engine"){ 
server.send(200, "text/plain", "Reading engine. Value: "+server.arg(0)); 
Serial.println("engine:"+server.arg(0)+"c"); 
} 
if (server.argName(0) == "servo"){ 
server.send(200, "text/plain", "Reading engine. Value: "+server.arg(0)); 
Serial.println("servo:"+server.arg(0)+"c"); 
} 
} 

void setup(void){ 
main_stuff(); 
} 

void loop(void){ 
server.handleClient(); 
} 


void main_stuff(){ 
Serial.begin(9600); 
WiFi.mode(WIFI_STA); 
WiFi.begin(ssid, password); 
Serial.println(""); 

// Ожидаем соединения
while (WiFi.status() != WL_CONNECTED) { 
delay(100); 
Serial.print("."); 
} 
Serial.println(""); 
Serial.print("Connected to "); 
Serial.println(ssid); 
Serial.print("IP address: "); 
Serial.println(WiFi.localIP()); 

if (MDNS.begin("esp8266")) { 
Serial.println("MDNS responder started"); 
} 

server.onNotFound(get_vars); 

server.begin(); 
Serial.println("HTTP server started"); 

}

, 👍0

Обсуждение

В Arduino IDE нажмите «Ctrl» + «T», чтобы ваш код было легче читать., @MatsK

Что это означает: «Но если я попытаюсь отправить без задержки или с задержкой <одной секунды, то Arduino увидит данные, но ничего не сделает», не могли бы вы уточнить?, @MatsK

@MatsK, когда NodeMcu отправляет что-то на Arduino - встроенный светодиод на нем мигает, @Serial_Name

«ничего не делает» — это двойное отрицание… оно означает «что-то делает»… неясно, что вы подразумеваете под этим утверждением, @jsotola


1 ответ


1

Символы новой строки из println (\r\n) остаются в буфере последовательного ввода, и вы читаете их с помощью Serial.readStringUntil(':');. тогда строка будет не "серво", а "\r\nсерво"

если вы подождете одну секунду с отправкой, \r\n будут отброшены, поскольку время ожидания readStringUntil истекает через одну секунду после их чтения.

,

И как это исправить?, @Serial_Name

Большое спасибо! Все работает нормально. Я просто меняю «Serial.println» на «Serial.print»., @Serial_Name