首页 > 解决方案 > WiFiClient.Read() 为每个发送的字符返回 1

问题描述

我正在尝试使用 TCP 将数据发送到 ESP32。该程序是用 arduino IDE 编写的。为了发送数据,我使用了一个名为 Packet Sender 的应用程序。该程序应将数据打印到串行并返回到 WiFiCLient。

每当我向 ESP32 发送数据时,它会为每个发送的字节打印“1”。“已接收数据”消息已正确发送。

我正在使用此代码

#include <WiFi.h>

const uint ServerPort = 23;
WiFiServer Server(ServerPort);
WiFiClient RemoteClient;

const char *SSID = "SSID";
const char *WiFiPassword = "Password";

void ConnectToWifi()
{
  WiFi.mode(WIFI_STA);
  WiFi.begin(SSID, WiFiPassword);
  Serial.print("Connecting to "); Serial.println(SSID);
 
  uint8_t i = 0;
  while (WiFi.status() != WL_CONNECTED)
  {
    Serial.print('.');
    delay(500);
 
    if ((++i % 16) == 0)
    {
      Serial.println(F(" still trying to connect"));
    }
  }
 
  Serial.print(F("Connected. My IP address is: "));
  Serial.println(WiFi.localIP());
}

void CheckForConnections()
{
  if (Server.hasClient())
  {
    Serial.println("Client spoted"); 
    if (RemoteClient.connected())
    {
      Serial.println("Connection rejected");
      Server.available().stop();
    }
    else
    {
      Serial.println("Connection accepted");
      RemoteClient = Server.available();
    }
  }
}

void setup() {
  Serial.begin(9600);
 
  ConnectToWifi();
  
  Server.begin();
}

void loop() {
 // RemoteClient = Server.available();
 CheckForConnections();
  if(RemoteClient)
  {
    uint8_t ch;
    bool newDataReceived = false;

    while(ch = RemoteClient.read() != -1 ){
      Serial.print(ch);
      RemoteClient.write(ch);
      newDataReceived = true;
    }
    if(newDataReceived){
      Serial.println();
      RemoteClient.print("Received data");
    } 
  }
}

感谢您的回答,雅库布

标签: arduinoesp32

解决方案


while (ch = RemoteClient.read() != -1 )

编译器将其解释为:

ch = (RemoteClient.read() != -1)

右侧部分评估为 TRUE 或 FALSE,即。1 或 0。TRUE 的 1 是您看到的打印内容。

因此,添加括号以使其执行您想要的操作:

(ch = (RemoteClient.read()) != -1)


推荐阅读