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");
}
@Serial_Name, 👍0
Обсуждение1 ответ
Символы новой строки из println (\r\n) остаются в буфере последовательного ввода, и вы читаете их с помощью Serial.readStringUntil(':');
. тогда строка будет не "серво", а "\r\nсерво"
если вы подождете одну секунду с отправкой, \r\n будут отброшены, поскольку время ожидания readStringUntil истекает через одну секунду после их чтения.
И как это исправить?, @Serial_Name
Большое спасибо! Все работает нормально. Я просто меняю «Serial.println» на «Serial.print»., @Serial_Name
- Ведомое устройство Arduino с двумя мастерами, использующими одну и ту же шину I2C?
- Использовать NodeMCU 12E (ESP8266) в качестве экрана Wi-Fi для Arduino Nano
- Как запрограммировать Esp8266 удаленно через Wi-Fi?
- I2C master/slave максимальный размер сообщения requestEvent
- Самая быстрая связь от NodeMCU до Arduino Nano
- Задержка в веб-сокете
- MPU6050 Проблема с NodeMCU
- Как спрогнозировать размер батареи, необходимый для проекта?
В Arduino IDE нажмите «Ctrl» + «T», чтобы ваш код было легче читать., @MatsK
Что это означает: «Но если я попытаюсь отправить без задержки или с задержкой <одной секунды, то Arduino увидит данные, но ничего не сделает», не могли бы вы уточнить?, @MatsK
@MatsK, когда NodeMcu отправляет что-то на Arduino - встроенный светодиод на нем мигает, @Serial_Name
«ничего не делает» — это двойное отрицание… оно означает «что-то делает»… неясно, что вы подразумеваете под этим утверждением, @jsotola