BLE 低功耗蓝牙通信・零基础完整教程)
ESP32 手机直连 无 WiFi 无路由 点灯控制一、核心概念超通俗BLE低功耗蓝牙不用 WiFi、不用路由器、不用 MQTT 服务器通信方式手机 ←→ ESP32 直接点对点距离一般 10~20 米用途智能灯、手环、蓝牙遥控、近距离控制二、学习目标无需任何网络手机蓝牙直接连 ESP32实现手机发指令ESP32 控制板载 LED 亮 / 灭三、验收标准手机蓝牙调试器搜索到ESP32-BLE成功连接发送ON→ 灯亮发送OFF→ 灯灭✅ 完成四、ESP32 BLE 完整代码直接上传可用cpp运行// 必须引入 BLE 库 #include BLEDevice.h #include BLEServer.h #include BLEUtils.h #include BLE2902.h // LED 引脚ESP32 板载灯 #define LED_PIN 2 // BLE 配置 // 设备名称手机搜到的名字 #define BLE_DEVICE_NAME ESP32-BLE-LED // 服务UUID不用改复制即可 #define SERVICE_UUID 4fafc201-1fb5-459e-8fcc-c5c9c331914b // 特征值UUID收发数据通道 #define CHARACTERISTIC_UUID beb5483e-36e1-4688-b7f5-ea07361b26a8 // 全局变量 BLEServer* pServer NULL; BLECharacteristic* pCharacteristic NULL; bool deviceConnected false; bool oldDeviceConnected false; // 连接回调类 class MyServerCallbacks: public BLEServerCallbacks { void onConnect(BLEServer* pServer) { deviceConnected true; Serial.println(手机已连接); }; void onDisconnect(BLEServer* pServer) { deviceConnected false; Serial.println(手机已断开); } }; // 接收数据回调类 class MyCharacteristicCallbacks: public BLECharacteristicCallbacks { void onWrite(BLECharacteristic* pCharacteristic) { std::string value pCharacteristic-getValue(); if (value.length() 0) { Serial.print(收到手机指令); Serial.println(value.c_str()); // 指令判断 if (value ON) { digitalWrite(LED_PIN, HIGH); Serial.println(执行开灯); } else if (value OFF) { digitalWrite(LED_PIN, LOW); Serial.println(执行关灯); } } } }; // 初始化 void setup() { Serial.begin(115200); pinMode(LED_PIN, OUTPUT); digitalWrite(LED_PIN, LOW); // 1. 创建 BLE 设备 BLEDevice::init(BLE_DEVICE_NAME); // 2. 创建 BLE 服务 pServer BLEDevice::createServer(); pServer-setCallbacks(new MyServerCallbacks()); BLEService *pService pServer-createService(SERVICE_UUID); // 3. 创建数据通道 pCharacteristic pService-createCharacteristic( CHARACTERISTIC_UUID, BLECharacteristic::PROPERTY_READ | BLECharacteristic::PROPERTY_WRITE ); pCharacteristic-setCallbacks(new MyCharacteristicCallbacks()); pCharacteristic-setValue(Hello BLE); // 4. 启动服务 开启广播 pService-start(); BLEAdvertising *pAdvertising BLEDevice::getAdvertising(); pAdvertising-addServiceUUID(SERVICE_UUID); BLEDevice::startAdvertising(); Serial.println(); Serial.println(BLE 已启动); Serial.println(设备名 String(BLE_DEVICE_NAME)); Serial.println(等待手机连接...); } // 主循环 void loop() { // 断线自动重启广播 if (!deviceConnected oldDeviceConnected) { delay(500); pServer-startAdvertising(); oldDeviceConnected deviceConnected; } if (deviceConnected !oldDeviceConnected) { oldDeviceConnected deviceConnected; } delay(20); }五、手机调试软件免费好用安卓 /iOS 通用nRF Connect最专业BLE 调试助手最简单六、操作步骤必看上传代码到 ESP32打开手机蓝牙打开BLE 调试助手搜索设备ESP32-BLE-LED点击连接找到Write 写入通道发送ON→ 灯亮OFF→ 灯灭七、核心原理一句话ESP32 作为 BLE 服务器广播自己手机作为 BLE 客户端搜索并连接数据通过UUID 通道直接传输不用 WiFi、不用服务器、不用外网八、和 MQTT 的区别表格方式是否需要网络距离用途MQTT需要 WiFi/4G全球远程远程控制、数据上传BLE不需要10~20 米近距离直连、配网、遥控九、你已完成的目标✅ 无需路由器✅ 手机蓝牙直连 ESP32✅ 无线控制灯光✅ 达到验收标准总结你现在已经学会了物联网两大核心通信MQTT远程全球控制BLE近距离直连控制