admin管理员组文章数量:1794759
APP Invertor 制作BLE蓝牙APP 控制esp32蓝牙小车
APP Invertor蓝牙小车制作
- 1、插件下载
- 1.1、导入插件
- 2、APP界面展示
- 2.1 、可视化编程
- 3、esp32 蓝牙代码
- 4、实测效果
- 4.1 APP控制端
- 4.2 蓝牙接收端
BLE插件下载:BluetoothLE 截至目前插件最新是version 20200828
1.1、导入插件 2、APP界面展示界面由文本框、按键、标签结合相应的布局构成。
2.1 、可视化编程初始化,连接蓝牙: 需要说明一下,收发服务的UUID 是不同的2个值,定义在esp32 代码里面。 接收数据以及按键: 里面的特征UUID在发送端和接收端是不同的,不要混淆使用。 代码里面UUID: 定义于ESP32代码里面。
3、esp32 蓝牙代码这个代码里面仅仅有蓝牙接收和发送数据部分,没有实例小车运行代码。小车的控制信号都已经收到了,实例小车的运行只需要根据收到的信号,做出不同的反应就可以。
// 包含所必需的库 #include <BLEDevice.h> #include <BLEServer.h> #include <BLEUtils.h> #include <BLE2902.h> BLEServer *pServer = NULL; BLECharacteristic *pTxCharacteristic; bool deviceConnected = false; bool oldDeviceConnected = false; char BLEbuf[32] = {0}; String data = ""; // 定义收发服务的UUID(唯一标识) #define SERVICE_UUID "6E400001-B5A3-F393-E0A9-E50E24DCCA9E" // RX串口标识 #define CHARACTERISTIC_UUID_RX "6E400002-B5A3-F393-E0A9-E50E24DCCA9E" // TX串口标识 #define CHARACTERISTIC_UUID_TX "6E400003-B5A3-F393-E0A9-E50E24DCCA9E" class MyServerCallbacks: public BLEServerCallbacks { void onConnect(BLEServer* pServer) { deviceConnected = true; }; void onDisconnect(BLEServer* pServer) { deviceConnected = false; } }; class MyCallbacks: public BLECharacteristicCallbacks { void onWrite(BLECharacteristic *pCharacteristic) { std::string rxValue = pCharacteristic->getValue(); if (rxValue.length() > 0) { Serial.println("*********"); //接收数据 Serial.print("Received Value: "); for (int i = 0; i < rxValue.length(); i++){ Serial.print(rxValue[i]); } Serial.println(); data =rxValue.c_str(); //Serial.println(data); Serial.println("*********"); Serial.println(); } } }; // setup()在复位或上电后运行一次: void setup() { Serial.begin(115200); Serial.println("1- Download and install an BLE scanner app in your phone"); Serial.println("2- Scan for BLE devices in the app"); Serial.println("3- Connect to MyESP32"); Serial.println("4- Go to CUSTOM CHARACTERISTIC in CUSTOM SERVICE and write something"); Serial.println("5- See the magic =)"); // 初始化蓝牙设备 BLEDevice::init("MyESP32"); // 为蓝牙设备创建服务器 pServer = BLEDevice::createServer(); pServer->setCallbacks(new MyServerCallbacks()); // 基于SERVICE_UUID来创建一个服务 BLEService *pService = pServer->createService(SERVICE_UUID); pTxCharacteristic = pService->createCharacteristic( CHARACTERISTIC_UUID_TX, BLECharacteristic::PROPERTY_NOTIFY ); pTxCharacteristic->addDescriptor(new BLE2902()); BLECharacteristic * pRxCharacteristic = pService->createCharacteristic( CHARACTERISTIC_UUID_RX, BLECharacteristic::PROPERTY_WRITE ); pRxCharacteristic->setCallbacks(new MyCallbacks()); // 开启服务 pService->start(); // 开启通知 pServer->getAdvertising()->start(); Serial.println("Waiting a client connection to notify..."); Serial.println(); } // loop()一直循环执行: void loop() { if (deviceConnected==1&data.length()>0) { memset(BLEbuf, 0, 32); memcpy(BLEbuf, data.c_str(), 32);//数据赋值 Serial.println(BLEbuf); pTxCharacteristic->setValue(BLEbuf); //收到数据后返回数据 pTxCharacteristic->notify(); data = ""; //返回数据后进行清空,否则一直发送data } // 没有新连接时 if (!deviceConnected && oldDeviceConnected) { // 给蓝牙堆栈准备数据的时间 delay(500); pServer->startAdvertising(); // 重新开始广播 Serial.println("start advertising"); oldDeviceConnected = deviceConnected; } // 正在连接时 if (deviceConnected && !oldDeviceConnected) { // 正在连接时进行的操作 oldDeviceConnected = deviceConnected; } } 4、实测效果 4.1 APP控制端APP控制端在连接蓝牙之前需要手机自带的蓝牙提前配对。
4.2 蓝牙接收端自此一个简单的蓝牙APP控制小车的基本代码和框架就出来了。
版权声明:本文标题:APP Invertor 制作BLE蓝牙APP 控制esp32蓝牙小车 内容由林淑君副主任自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.xiehuijuan.com/baike/1686472514a71334.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论