Я пытаюсь заставить два или более ESP8266 (NodeMCU) обмениваться данными друг с другом, используя приведенный ниже код в формате клиент / сервер с использованием библиотеки Arduino WIFI.
По сути, мне нужно что-то вроде следующегоразговор:
клиент: сервер ты здесь?
сервер: я здесь
сервер: отправь мне Temp Reading
клиент: Temp чтение -72 градуса F
сервер: что-то сделать
клиент: выполнено
Я смог прочитать первую строку, напечатанную на сервере с клиента, но вторую строкуне приходитСтрока, напечатанная или написанная сервером клиенту, также не работает.Я уверен, что это либо что-то, чего я не понимаю о том, как работает Wi-Fi-коммуникация, либо что-то о функциях кода, которые я не понимаю.
Я публикую только код void loop, как остатоккода работает просто отлично.Я пытался изменить код в десятках различных настроек (добавление задержек в разных местах, сброс, остановка и повторное подключение и т. Д.), Основываясь на исследованиях по этой теме, но я что-то упустил.
СТОРОНА КЛИЕНТА
void loop () {
digitalWrite(ledPin,LOW);
client.connect(server, 80); // Connection to the server
Serial.println(".");
//to server
client.println("1\r"); // sends the message to the server
//from server
String answer = client.readStringUntil('\r');
//to server
client.flush();
delay(5000);
client.println("2\r");
digitalWrite(ledPin, HIGH);
delay(2000); // client will trigger the communication after two seconds
}
СТОРОНА СЕРВЕРА
void loop () {
WiFiClient client = server.available();
if (client){
while (client.connected()) {
if (client.available()>0){
digitalWrite(ledPin, HIGH); // to show the communication only (inverted logic)
Serial.println(".");
//to server
String request = client.readStringUntil('\r'); // receives the message from the client
Serial.println(request);
//................................................
if (request == "1") {
Serial.print("Client Sending Temp: Acknowledged"); Serial.println(request);
} else {
Serial.print("Client Sending Temp: Failed"); Serial.println(request);
}
server.write("Send Temp Reading");
//................................................
if (request == "2") {
Serial.print("From client 2.2: "); Serial.println(request);
digitalWrite(ledPin, HIGH);
} else {
Serial.print("From client 2.1: "); Serial.println(request);
}
//................................................
client.flush();
client.stop(); // terminates the connection with the client
}
}
}
}
В последовательном мониторе все, что я получаю, это:
.
1
Клиент отправляет Temp: Acknowledged1 (это чтение первой строки от клиента)
От клиента 2.1: 1 (это подтверждение того, что вторая строка не читает).
Это просто повторяется снова и снова.Итак, я знаю, что соединение работает на основе первого чтения, но я не понимаю, почему я не могу получить вторую строку от клиента или почему я не могу получить (на стороне клиента) какой серверпечатает или пишет в него.