忘记过去,超越自己
- ❤️ 博客主页 单片机菜鸟哥,一个野生非专业硬件IOT爱好者 ❤️
- ❤️ 本篇创建记录 2023-09-25 ❤️
- ❤️ 本篇更新记录 2023-09-25 ❤️
- 🎉 欢迎关注 🔎点赞 👍收藏 ⭐️留言📝
- 🙏 此博客均由博主单独编写,不存在任何商业团队运营,如发现错误,请留言轰炸哦!及时修正!感谢支持!
- 🔥 Arduino ESP8266教程累计帮助过超过1W+同学入门学习硬件网络编程,入选过选修课程,刊登过无线电杂志 🔥零基础从入门到熟悉Arduino平台下开发ESP8266,同时会涉及网络编程知识。专栏文章累计超过60篇,分为基础篇、网络篇、应用篇、高级篇,涵盖ESP8266大部分开发技巧。
快速导航
单片机菜鸟的博客快速索引(快速找到你要的)
如果觉得有用,麻烦点赞收藏,您的支持是博主创作的动力。
文章目录
- 1. 前言
- 2. 参考资料
- 3. App源码
- 4. ESP32 BLE测试代码
- 5. Arduino测试结果
1. 前言
最近在玩玩esp32 ble相关知识点,需要调试内容,所以干脆就查阅相关资料写了一个app。
app下载链接,0积分下载,亲测可用
BLE调试助手APP
2. 参考资料
使用到了FastBLE
https://github.com/Jasonchenlijian/FastBle
3. App源码
需要app源码同学直接留言邮箱,见到处理。
4. ESP32 BLE测试代码
把以下代码烧录到ESP32-C3或者有BLE功能的ESP32即可。
#include <BLEDevice.h>
#include <BLEServer.h>
#include <BLEUtils.h>
#include <BLE2902.h>BLECharacteristic *pCharacteristicRead;
BLECharacteristic *pCharacteristicNotify;
BLECharacteristic *pCharacteristicWrite;
BLEServer *pServer;bool deviceConnected = false;
char BLEbuf[32] = {0};
uint32_t cnt = 0;#define SERVICE_UUID "6E400001-B5A3-F393-E0A9-E50E24DCCA9E" // UART service UUID
#define CHARACTERISTIC_UUID_RX "6E400002-B5A3-F393-E0A9-E50E24DCCA9E"
#define CHARACTERISTIC_UUID_TX "6E400003-B5A3-F393-E0A9-E50E24DCCA9E"
#define CHARACTERISTIC_UUID_READ "6E400003-B5A3-F393-E0A9-E50E24DCCA9F"class MyServerCallbacks: public BLEServerCallbacks {void onConnect(BLEServer* pServer) {deviceConnected = true;};void onDisconnect(BLEServer* pServer) {deviceConnected = false;}
};class MyWriteCallbacks: public BLECharacteristicCallbacks {void onWrite(BLECharacteristic *pCharacteristic) {std::string rxValue = pCharacteristic->getValue();if (rxValue.length() > 0) {Serial.print("------>Received Value: ");Serial.println(rxValue.c_str());
// for (int i = 0; i < rxValue.length(); i++) {
// Serial.print(rxValue[i]);
// }Serial.println();if (rxValue.find("A") != -1) {Serial.print("Rx A!");}else if (rxValue.find("B") != -1) {Serial.print("Rx B!");}Serial.println();}}
};
void setup() {Serial.begin(115200);// 创建一个ble设备BLEDevice::init("BLE_TEST");BLEDevice::setMTU(100);// 创建一个ble服务器pServer = BLEDevice::createServer();pServer->setCallbacks(new MyServerCallbacks());// 创建一个ble服务BLEService *pService = pServer->createService(SERVICE_UUID);// 创建一个ble特征,用于通知对方pCharacteristicNotify = pService->createCharacteristic(CHARACTERISTIC_UUID_TX, BLECharacteristic::PROPERTY_NOTIFY);// 添加一个特征描述符pCharacteristicNotify->addDescriptor(new BLE2902());// 创建一个只读ble特征pCharacteristicRead = pService->createCharacteristic(CHARACTERISTIC_UUID_READ, BLECharacteristic::PROPERTY_READ);memset(BLEbuf, 0, 32);memcpy(BLEbuf, (char*)"只读数据!", 32);pCharacteristicRead->setValue(BLEbuf);// 创建一个ble特征,用于收到对方数据pCharacteristicWrite = pService->createCharacteristic(CHARACTERISTIC_UUID_RX, BLECharacteristic::PROPERTY_WRITE);pCharacteristicWrite->setCallbacks(new MyWriteCallbacks());// 启动服务器pService->start();// 启动广播pServer->getAdvertising()->start();Serial.println("Waiting a client connection to notify...");Serial.print("MTU:");Serial.println(BLEDevice::getMTU());
}void loop() {if (deviceConnected) {memset(BLEbuf, 0, 32);memcpy(BLEbuf, (char*)"Hello BLE APP!", 32);pCharacteristicNotify->setValue(BLEbuf);pCharacteristicNotify->notify(); // Send the value to the app!Serial.print("*** Sent Value: ");Serial.print(BLEbuf);Serial.println(" ***");} else {pServer->getAdvertising()->start();Serial.println("Waiting a client connection to notify...");}delay(5000);
}
5. Arduino测试结果
整体过程是通路的,后面即可在上面进行业务开发。