无法在两个ESP8266(客户端/服务器)上使用Arduino WIFI库接收/发送多条消息

时间:2018-09-20 00:44:28

标签: server client wifi iot arduino-esp8266

我正在尝试使用Arduino WIFI库以客户端/服务器格式使用以下代码使两个或多个ESP8266(NodeMCU)彼此通信。
本质上,我想要的是类似下面的对话:

客户端:服务器在吗?

服务器:我在这里

服务器:向我发送临时阅读

客户:温度读数-72华氏度

服务器:做点什么

客户端:完成

我已经能够从客户端读取打印到服务器的第一行,但是第二行没有通过。服务器打印或写到客户端的行似乎也不起作用。我敢肯定,这可能是我对wifi通讯的工作方式不甚了解,或者是我不掌握的代码功能。

我只发布void循环代码,因为其余代码工作正常。我曾根据有关该主题的研究尝试过在数十种不同的设置(在不同的位置添加延迟,刷新,停止和重新连接等)中修改代码,但是我却缺少一些东西。

客户侧

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

客户端发送温度:Acknowledged1(这是从客户端读取第一行)

从客户端2.1:1(这表示第二行未读取)。

这只是一遍又一遍地重复。所以,我知道连接是基于第一读进行的,但是我不明白的是为什么我不能从客户端获得第二行,或者为什么我不能(在客户端)接收服务器的内容打印或写入。

0 个答案:

没有答案