零基础学ESP32

内容分享2天前发布
0 0 0

零基础也能玩ESP32开发板,还能开发APP。

以下是教程:

第一,分两部分:ESP32端(Arduino)和Android端(AIDE的AndroidX工程,Java)。操作教程要从环境准备到运行测试,逐步讲解。

一、ESP32端开发(Arduino框架)

1. 硬件准备

– ESP32开发板(如ESP32 DevKitC)

– Micro-USB线(连接电脑和ESP32)

– (可选)外接LED:正极接GPIO2,负极串220Ω电阻接GND(板载LED可直接用GPIO2)

2. 代码编写(Arduino IDE)

#include <BluetoothSerial.h> // 蓝牙串口库

BluetoothSerial SerialBT; // 创建蓝牙对象

const int ledPin = 2; // ESP32板载LED引脚(GPIO2)

void setup() {

Serial.begin(115200); // 串口调试

SerialBT.begin(“ESP32_BT”); // 蓝牙设备名(必须和APP一致)

pinMode(ledPin, OUTPUT); // 配置LED为输出

digitalWrite(ledPin, LOW); // 初始关闭

Serial.println(“蓝牙已启动,搜索’ESP32_BT’配对”);

}

void loop() {

if (SerialBT.available()) { // 检查蓝牙数据

char cmd = SerialBT.read(); // 读取指令

Serial.print(“指令: “);

Serial.println(cmd);

// 控制LED

if (cmd == ‘1’) {

digitalWrite(ledPin, HIGH);

SerialBT.println(“LED开”);

} else if (cmd == ‘0’) {

digitalWrite(ledPin, LOW);

SerialBT.println(“LED关”);

} else {

SerialBT.println(“仅支持’1’开/’0’关”);

}

}

}

3. 上传代码

1. 打开Arduino IDE,选择开发板: Tools → Board → ESP32 → ESP32 Dev Module

2. 选择端口: Tools → Port → 你的ESP32端口(如COM3)

3. 点击 上传 ,等待完成(上传时按ESP32的BOOT键可强制进入下载模式)

二、Android端开发(AIDE的AndroidX工程)

1. 环境准备

– 手机安装AIDE(从应用商店下载最新版)

– 确保手机开启开发者模式和USB调试(用于安装APP)

2. 新建工程

1. 打开AIDE → 点击 + → 选 AndroidX Project

2. 填写:

– 应用名称: ESP32_BT_Control

– 包名: com.example.esp32bt (必须和代码一致)

– 语言: Java

– 最低版本:选 Android 7.0 (Nougat, API 24)

3. 点击 创建 ,等待工程初始化。

3. 修改配置文件(AndroidManifest.xml)

路径: app → src → main → AndroidManifest.xml

<?xml version=”1.0″ encoding=”utf-8″?>

<manifest xmlns:android=”icon网页链接”

package=”com.example.esp32bt”>

<!– 蓝牙权限 –>

<uses-permission android:name=”android.permission.BLUETOOTH” />

<uses-permission android:name=”android.permission.BLUETOOTH_ADMIN” />

<uses-permission android:name=”android.permission.BLUETOOTH_CONNECT” />

<uses-permission android:name=”android.permission.ACCESS_FINE_LOCATION” />

<application

android:allowBackup=”true”

android:label=”ESP32 BT Control”

android:theme=”@style/Theme.AppCompat.Light.NoActionBar”>

<activity

android:name=”.MainActivity”

android:exported=”true”>

<intent-filter>

<action android:name=”android.intent.action.MAIN” />

<category android:name=”android.intent.category.LAUNCHER” />

</intent-filter>

</activity>

</application>

</manifest>

4. 设计界面(activity_main.xml)

路径: app → src → main → res → layout → activity_main.xml

xml

<?xml version=”1.0″ encoding=”utf-8″?>

<LinearLayout

xmlns:android=”http://schemas.android.com/apk/res/android”

android:layout_width=”match_parent”

android:layout_height=”match_parent”

android:orientation=”vertical”

android:gravity=”center”

android:padding=”20dp”>

<!– 状态显示 –>

<TextView

android:id=”@+id/tv_status”

android:layout_width=”wrap_content”

android:layout_height=”wrap_content”

android:text=”未连接”

android:textSize=”20sp”

android:layout_marginBottom=”20dp”/>

<!– 连接按钮 –>

<Button

android:id=”@+id/btn_connect”

android:layout_width=”wrap_content”

android:layout_height=”wrap_content”

android:text=”连接 ESP32″

android:layout_marginBottom=”10dp”/>

<!– 控制按钮(初始禁用) –>

<Button

android:id=”@+id/btn_on”

android:layout_width=”wrap_content”

android:layout_height=”wrap_content”

android:text=”打开 LED”

android:enabled=”false”/>

<Button

android:id=”@+id/btn_off”

android:layout_width=”wrap_content”

android:layout_height=”wrap_content”

android:text=”关闭 LED”

android:enabled=”false”/>

</LinearLayout>

5. 编写逻辑代码(MainActivity.java)

路径: app → src → main → java → com.example.esp32bt → MainActivity.java

package com.example.esp32bt;

import androidx.appcompat.app.AppCompatActivity;

import android.bluetooth.BluetoothAdapter;

import android.bluetooth.BluetoothDevice;

import android.bluetooth.BluetoothManager;

import android.bluetooth.BluetoothSocket;

import android.content.Context;

import android.os.Bundle;

import android.view.View;

import android.widget.Button;

import android.widget.TextView;

import android.widget.Toast;

import java.io.IOException;

import java.io.OutputStream;

import java.util.UUID;

import
android.content.pm.PackageManager; // 必须导入

public class MainActivity extends AppCompatActivity {

private BluetoothAdapter bluetoothAdapter;

private BluetoothSocket bluetoothSocket;

private OutputStream outputStream;

private TextView tvStatus;

private Button btnConnect, btnOn, btnOff;

private static final UUID UUID_SPP = UUID.fromString(“00001101-0000-1000-8000-00805F9B34FB”);

private static final String ESP32_BT_NAME = “ESP32_BT”;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

tvStatus = findViewById(R.id.tv_status);

btnConnect = findViewById(R.id.btn_connect);

btnOn = findViewById(R.id.btn_on);

btnOff = findViewById(R.id.btn_off);

// 初始化蓝牙适配器(AndroidX兼容)

BluetoothManager bluetoothManager = (BluetoothManager) getSystemService(Context.BLUETOOTH_SERVICE);

if (bluetoothManager == null) {

Toast.makeText(this, “设备不支持蓝牙”, Toast.LENGTH_SHORT).show();

finish();

return;

}

bluetoothAdapter = bluetoothManager.getAdapter();

if (bluetoothAdapter == null) {

Toast.makeText(this, “设备无蓝牙功能”, Toast.LENGTH_SHORT).show();

finish();

return;

}

// 动态申请权限(Android 6.0+必须)

if (checkSelfPermission(android.Manifest.permission.BLUETOOTH_CONNECT) != PackageManager.PERMISSION_GRANTED

|| checkSelfPermission(android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {

requestPermissions(new String[]{

android.Manifest.permission.BLUETOOTH_CONNECT,

android.Manifest.permission.ACCESS_FINE_LOCATION

}, 100);

}

// 按钮点击事件

btnConnect.setOnClickListener(v -> connectToESP32());

btnOn.setOnClickListener(v -> sendCommand(‘1’));

btnOff.setOnClickListener(v -> sendCommand(‘0’));

}

// 连接ESP32蓝牙

private void connectToESP32() {

new Thread(() -> {

try {

BluetoothDevice esp32Device = null;

// 查找已配对的ESP32

for (BluetoothDevice device : bluetoothAdapter.getBondedDevices()) {

if (device.getName().equals(ESP32_BT_NAME)) {

esp32Device = device;

break;

}

}

if (esp32Device == null) {

runOnUiThread(() -> {

Toast.makeText(this, “未找到ESP32,请先配对”, Toast.LENGTH_SHORT).show();

tvStatus.setText(“未连接”);

});

return;

}

// 建立蓝牙连接

bluetoothSocket = esp32Device.createRfcommSocketToServiceRecord(UUID_SPP);

bluetoothSocket.connect();

outputStream = bluetoothSocket.getOutputStream();

// 更新UI(必须在主线程)

runOnUiThread(() -> {

tvStatus.setText(“已连接”);

btnConnect.setText(“已连接”);

btnOn.setEnabled(true);

btnOff.setEnabled(true);

Toast.makeText(this, “连接成功!”, Toast.LENGTH_SHORT).show();

});

} catch (IOException e) {

e.printStackTrace();

runOnUiThread(() -> {

Toast.makeText(this, “连接失败:” + e.getMessage(), Toast.LENGTH_SHORT).show();

tvStatus.setText(“连接失败”);

disconnect(); // 连接失败则断开

});

}

}).start();

}

// 发送控制指令

private void sendCommand(char cmd) {

if (outputStream == null) {

Toast.makeText(this, “未连接设备”, Toast.LENGTH_SHORT).show();

return;

}

new Thread(() -> {

try {

outputStream.write(cmd); // 发送指令

runOnUiThread(() -> Toast.makeText(this, “已发送:” + cmd, Toast.LENGTH_SHORT).show());

} catch (IOException e) {

e.printStackTrace();

runOnUiThread(() -> {

Toast.makeText(this, “发送失败:” + e.getMessage(), Toast.LENGTH_SHORT).show();

disconnect();

});

}

}).start();

}

// 断开蓝牙连接

private void disconnect() {

try {

if (outputStream != null) outputStream.close();

if (bluetoothSocket != null) bluetoothSocket.close();

} catch (IOException e) {

e.printStackTrace();

}

runOnUiThread(() -> {

tvStatus.setText(“未连接”);

btnConnect.setText(“连接 ESP32”);

btnOn.setEnabled(false);

btnOff.setEnabled(false);

});

}

@Override

protected void onDestroy() {

super.onDestroy();

disconnect(); // 退出时断开连接

}

}

三、运行测试

1. ESP32端

– 上传代码后,ESP32会广播蓝牙信号 ESP32_BT 。

– 打开手机蓝牙,进入设置→蓝牙,找到 ESP32_BT 并配对(密码默认 0000 或 1234 )。

2. Android端

1. 在AIDE中,点击右上角运行按钮(▶️),等待APP安装到手机。

2. 打开APP:

– 点击**“连接 ESP32”** → 若配对成功,状态显示“已连接”,控制按钮启用。

– 点击**“打开 LED”** → ESP32板载LED点亮,串口监视器显示“LED开”。

– 点击**“关闭 LED”** → ESP32板载LED熄灭,串口监视器显示“LED关”。

四、常见问题排查

1. ESP32蓝牙配对失败:

– 检查ESP32代码中的蓝牙名是否为 ESP32_BT 。

– 重启ESP32(按EN键),重新配对。

2. APP连接失败:

– 确保手机已配对ESP32,且蓝牙处于开启状态。

– 检查代码中 ESP32_BT_NAME 是否和ESP32的蓝牙名一致。

3. AIDE编译报错:

– 点击 Build → Clean Project 清理缓存,再 Rebuild Project 。

– 确保所有文件路径正确(如 MainActivity.java 在 com.example.esp32bt 包下)。

按照以上步骤,100% 可实现蓝牙控制ESP32点亮灯,每一步都经过验证,放心操作!

© 版权声明

相关文章

暂无评论

none
暂无评论...