使用 Android 从 ESP32 套接字服务器接收数据
Recieve Data from ESP32 Socket Server with Android
我正在尝试使用 Android 应用程序从我的 ESP32 接收数据。从我的 phone 发送数据不是问题。我只是什么也没得到。它没有显示异常,也没有显示消息。
到目前为止我的代码:
//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 代码是否写入并且确实发送了消息。
有什么我错过的吗?
您的 Android 代码正在调用 input.readLine()
但您的 ESP32 代码仅发送单个字符,而不是一行,因此客户端当然不会显示任何输入。尝试发送一条线。
client.writeln('A');
或
client.write("A\n");
第二个版本中的字符串可能需要"A\r\n"
;我不是 100% 清楚 Android 会认为什么是行终止符。
我正在尝试使用 Android 应用程序从我的 ESP32 接收数据。从我的 phone 发送数据不是问题。我只是什么也没得到。它没有显示异常,也没有显示消息。 到目前为止我的代码:
//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 代码是否写入并且确实发送了消息。 有什么我错过的吗?
您的 Android 代码正在调用 input.readLine()
但您的 ESP32 代码仅发送单个字符,而不是一行,因此客户端当然不会显示任何输入。尝试发送一条线。
client.writeln('A');
或
client.write("A\n");
第二个版本中的字符串可能需要"A\r\n"
;我不是 100% 清楚 Android 会认为什么是行终止符。