首页 > 解决方案 > 使用 Android 从 ESP32 Socket 服务器接收数据

问题描述

我正在尝试使用 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 代码是否写入并且它确实发送了消息。有什么我想念的吗?

标签: javac++socketsesp32

解决方案


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

      client.writeln('A');

或者

      client.write("A\n");

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


推荐阅读