Не удается получить / отправить несколько сообщений с помощью библиотеки Arduino WIFI на двух ESP8266 (клиент / сервер) - PullRequest
0 голосов
/ 20 сентября 2018

Я пытаюсь заставить два или более 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 (это подтверждение того, что вторая строка не читает).

Это просто повторяется снова и снова.Итак, я знаю, что соединение работает на основе первого чтения, но я не понимаю, почему я не могу получить вторую строку от клиента или почему я не могу получить (на стороне клиента) какой серверпечатает или пишет в него.

...