Android 与 ESP-01 WIFI模块通信
ESP-01 配置为 AP 模式
ESP-01 配置为 AP 模式后,Android 设备可以连接到 ESP-01 创建的 WiFi 热点,然后通过 TCP 进行通信。
ESP-01 端代码
#include <SoftwareSerial.h>SoftwareSerial espSerial(2, 3); // RX, TXvoid setup() {Serial.begin(9600);espSerial.begin(115200);// 配置 ESP-01 为 AP 模式sendATCommand("AT+CWMODE=2", 2000);sendATCommand("AT+CWSAP=\"ESP01\",\"12345678\",11,3", 2000); // 设置热点名称和密码sendATCommand("AT+CIPMUX=1", 2000); // 开启多连接模式sendATCommand("AT+CIPSERVER=1,8080", 2000); // 开启服务器,端口为 8080
}void loop() {if (espSerial.available()) {String data = espSerial.readString();Serial.println("Received from Android: " + data);// 可以在这里处理接收到的数据}
}void sendATCommand(String command, unsigned long timeout) {espSerial.println(command);unsigned long startTime = millis();while (millis() - startTime < timeout) {if (espSerial.available()) {String response = espSerial.readString();Serial.println("ESP Response: " + response);}}
}
Android 端代码
Android 端通过 TCP 客户端连接到 ESP-01 的服务器。
Android 端代码
package com.example.esp01communication;import android.app.AlertDialog;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;import androidx.appcompat.app.AppCompatActivity;import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.Socket;public class MainActivity extends AppCompatActivity {private static final String TAG = "MainActivity";private TextView textView;private Socket socket;private BufferedReader bufferedReader;private OutputStream outputStream;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);textView = findViewById(R.id.Show_Text);}public void connectToESP(View view) {new Thread(() -> {try {socket = new Socket("192.168.4.1", 8080); // ESP-01 的 IP 地址和端口bufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));outputStream = socket.getOutputStream();runOnUiThread(() -> Toast.makeText(MainActivity.this, "Connected to ESP-01", Toast.LENGTH_SHORT).show());receiveData();} catch (Exception e) {Log.e(TAG, "Error connecting to ESP-01", e);runOnUiThread(() -> Toast.makeText(MainActivity.this, "Connection failed", Toast.LENGTH_SHORT).show());}}).start();}public void sendData(View view) {new Thread(() -> {try {outputStream.write("Hello from Android".getBytes());runOnUiThread(() -> Toast.makeText(MainActivity.this, "Data sent", Toast.LENGTH_SHORT).show());} catch (Exception e) {Log.e(TAG, "Error sending data", e);}}).start();}private void receiveData() {new Thread(() -> {try {String data;while ((data = bufferedReader.readLine()) != null) {runOnUiThread(() -> {textView.setText("Received: " + data);showAlertDialog(data);});}} catch (Exception e) {Log.e(TAG, "Error receiving data", e);}}).start();}private void showAlertDialog(String data) {AlertDialog.Builder builder = new AlertDialog.Builder(this);builder.setTitle("Data Received");builder.setMessage(data);builder.setPositiveButton("OK", (dialog, which) -> dialog.dismiss());AlertDialog dialog = builder.create();dialog.show();}@Overrideprotected void onDestroy() {super.onDestroy();try {if (socket != null) {socket.close();}} catch (Exception e) {Log.e(TAG, "Error closing socket", e);}}
}
说明
-
ESP-01 配置:
-
ESP-01 配置为 AP 模式,创建一个 WiFi 热点,Android 设备连接到该热点。
-
ESP-01 开启 TCP 服务器,监听端口 8080。
-
-
Android 端:
-
使用
Socket
连接到 ESP-01 的 IP 地址和端口。 -
通过
OutputStream
发送数据,通过BufferedReader
接收数据
-