我正在尝试使用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(这表示第二行未读取)。
这只是一遍又一遍地重复。所以,我知道连接是基于第一读进行的,但是我不明白的是为什么我不能从客户端获得第二行,或者为什么我不能(在客户端)接收服务器的内容打印或写入。