【问题标题】:Recieve Data from ESP32 Socket Server with Android使用 Android 从 ESP32 Socket 服务器接收数据
【发布时间】:2021-07-30 06:32:07
【问题描述】:

我正在尝试使用 Android 应用从我的 ESP32 接收数据。从我的手机发送数据不是问题。我只是什么都得不到。它没有显示异常,也没有显示消息。 到目前为止我的代码:

//In the onCreate method:
Connection connection = new Connection();
connection.execute();

//The Connection:
class Connection extends AsyncTask<Void,Void,Void> {
        String msg;

        @Override
        protected Void doInBackground(Void...params){
            try{
                client = new Socket("ESP32-1",80);
                input = new BufferedReader(new InputStreamReader(client.getInputStream()));
                System.out.println(input.readLine());
            }catch (UnknownHostException e){
                e.printStackTrace();
            }catch (IOException e){
                e.printStackTrace();
            }

            while (true) {
                try {
                    msg=input.readLine();
                } catch (IOException e) {
                    e.printStackTrace();
                }
                System.out.println(msg);
            }
        }
    }

权限:

<uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

ESP32(在 Arduino IDE 中):

#include <WiFi.h>

const char* ssid="Jack-2.4";
const char* password="QayWsxEdcRfv123456#"; 

WiFiServer server(80);

void setup() {
  
  //Server
  Serial.begin(115200);
  Serial.println("start");
  
  delay(1000);
 
  WiFi.begin(ssid, password);
 
  while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
    Serial.println("Connecting to WiFi..");
  }
 
  Serial.println("Connected to the WiFi network");
  Serial.println(WiFi.localIP());
 
  server.begin();
}

void loop() {
  WiFiClient client = server.available();
 
  if (client) {
    Serial.println("Client connected");
 
    while (client.connected()) {
      client.write('A');
      delay(500);
    }
  }
}

我检查了 ESP32 代码是否写入并且确实发送了消息。 有什么我错过的吗?

【问题讨论】:

    标签: java c++ sockets esp32


    【解决方案1】:

    您的 Android 代码正在调用 input.readLine(),但您的 ESP32 代码只发送一个字符,而不是一行,因此客户端当然不会显示任何输入。尝试发送一条线路。

          client.writeln('A');
    

    或

          client.write("A\n");
    

    第二个版本中的字符串可能需要为"A\r\n";我不是 100% 清楚 Android 会认为什么是行终止符。

    【讨论】:

    • 函数writeln() 不存在。但是client.write("A\n"); 完美运行。
    • 但是我该怎么办write(myVariable \n)?
    • 我只需要先写变量“\n”:client.write(char);,然后在下一行:client.wirte("\n");
    • 是的!你明白了。
    猜你喜欢
    • 2016-07-24
    • 1970-01-01
    • 1970-01-01
    • 2021-11-19
    • 1970-01-01
    • 1970-01-01
    • 2015-07-31
    • 1970-01-01
    • 2020-09-17
    相关资源
    最近更新 更多