• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

ESP32 Ble - 微信小程序蓝牙数据通信测试

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

 

近期做了一个项目需要用到微信小程序蓝牙与ESP32进行配网及数据设置,因此在一个前辈提供的demo上进行一部分优化和修改,踩了一些坑,因此记录一下

 

 ESP32 代码:

  1 // 包含所必需的库
  2 #include <BLEDevice.h>
  3 #include <BLEServer.h>
  4 #include <BLEUtils.h>
  5 #include <BLE2902.h>
  6 
  7 BLEServer *pServer = NULL;
  8 BLECharacteristic *pTxCharacteristic;
  9 bool deviceConnected = false;
 10 bool oldDeviceConnected = false;
 11 
 12 char BLEbuf[32] = {0};
 13 String data = "";
 14 
 15 // 定义收发服务的UUID(唯一标识)
 16 #define SERVICE_UUID           "6E400001-B5A3-F393-E0A9-E50E24DCCA9E" 
 17 // RX串口标识
 18 #define CHARACTERISTIC_UUID_RX "6E400002-B5A3-F393-E0A9-E50E24DCCA9E"
 19 // TX串口标识
 20 #define CHARACTERISTIC_UUID_TX "6E400003-B5A3-F393-E0A9-E50E24DCCA9E"
 21 
 22 
 23 class MyServerCallbacks: public BLEServerCallbacks {
 24     void onConnect(BLEServer* pServer) {
 25       deviceConnected = true;
 26     };
 27 
 28     void onDisconnect(BLEServer* pServer) {
 29       deviceConnected = false;
 30     }
 31 };
 32 
 33 class MyCallbacks: public BLECharacteristicCallbacks {
 34     void onWrite(BLECharacteristic *pCharacteristic) {
 35       std::string rxValue = pCharacteristic->getValue();
 36 
 37       if (rxValue.length() > 0) {
 38         Serial.println("*********");
 39         Serial.print("Received Value: ");
 40         for (int i = 0; i < rxValue.length(); i++){
 41                 Serial.print(rxValue[i]);
 42             }
 43         Serial.println();
 44         data =rxValue.c_str();
 45         //Serial.println(data);
 46         Serial.println("*********");
 47         Serial.println();    
 48       }
 49     }
 50 };
 51 
 52 // setup()在复位或上电后运行一次:
 53 void setup() {
 54   Serial.begin(115200);
 55   // 初始化蓝牙设备
 56   BLEDevice::init("ESP32 test");
 57   // 为蓝牙设备创建服务器
 58   pServer = BLEDevice::createServer();
 59   pServer->setCallbacks(new MyServerCallbacks());
 60   // 基于SERVICE_UUID来创建一个服务
 61   BLEService *pService = pServer->createService(SERVICE_UUID);
 62   pTxCharacteristic = pService->createCharacteristic(
 63                                         CHARACTERISTIC_UUID_TX,
 64                                         BLECharacteristic::PROPERTY_NOTIFY
 65                                     );                      
 66   pTxCharacteristic->addDescriptor(new BLE2902());
 67   BLECharacteristic * pRxCharacteristic = pService->createCharacteristic(
 68                                              CHARACTERISTIC_UUID_RX,
 69                                             BLECharacteristic::PROPERTY_WRITE
 70                                         );
 71   pRxCharacteristic->setCallbacks(new MyCallbacks());
 72   // 开启服务
 73   pService->start();
 74   // 开启通知
 75   pServer->getAdvertising()->start();
 76   Serial.println("Waiting a client connection to notify...");    
 77   Serial.println();
 78 }
 79 
 80 // loop()一直循环执行:
 81 void loop() {
 82 
 83     if (deviceConnected==1&data.length()>0) {
 84         memset(BLEbuf, 0, 32);
 85         memcpy(BLEbuf, data.c_str(), 32); 
 86         Serial.println(BLEbuf); 
 87         
 88         pTxCharacteristic->setValue(BLEbuf);   //收到数据后返回数据
 89         pTxCharacteristic->notify();
 90         data = "";  //返回数据后进行清空,否则一直发送data
 91     }
 92 
 93     // 没有新连接时
 94     if (!deviceConnected && oldDeviceConnected) {
 95         // 给蓝牙堆栈准备数据的时间
 96         delay(500); 
 97         pServer->startAdvertising(); 
 98         // 重新开始广播
 99         Serial.println("start advertising");
100         oldDeviceConnected = deviceConnected;
101     }
102     // 正在连接时
103     if (deviceConnected && !oldDeviceConnected) {
104         // 正在连接时进行的操作
105         oldDeviceConnected = deviceConnected;
106     }
107 }

 

 

小程序的代码需要有几个需要注意的地方:

 1. 启用低功耗蓝牙设备特征值变化时的 notify 功能,订阅特征值。注意:必须设备的特征值支持notify或者indicate才可以成功调用。另外,必须先启用notifyBLECharacteristicValueChange才能监听到设备characteristicValueChange事件

 

  

 

 2.数据发送时所发的CHARACTERISTIC_UUID一定要与ESP32端的ID对应,否则会发送失败。

1 #define CHARACTERISTIC_UUID_RX "6E400002-B5A3-F393-E0A9-E50E24DCCA9E"  // RX串口标识

 

 

 

 

 

小程序源代码地址:

https://gitee.com/hejinlv/WeChat-Ble-To-ESP32-Ble/tree/master

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
微信小程序蓝牙模块发布时间:2022-07-18
下一篇:
promise封装小程序的蓝牙类发布时间:2022-07-18
热门推荐
    热门话题
    阅读排行榜

    扫描微信二维码

    查看手机版网站

    随时了解更新最新资讯

    139-2527-9053

    在线客服(服务时间 9:00~18:00)

    在线QQ客服
    地址:深圳市南山区西丽大学城创智工业园
    电邮:jeky_zhao#qq.com
    移动电话:139-2527-9053

    Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap