• 【app篇】可拖拽BLE遥控app简单版本


    可拖拽配置蓝牙控制app

    忘记过去,超越自己

    • ❤️ 博客主页 单片机菜鸟哥,一个野生非专业硬件IOT爱好者 ❤️
    • ❤️ 本篇创建记录 2023-09-26 ❤️
    • ❤️ 本篇更新记录 2023-09-26 ❤️
    • 🎉 欢迎关注 🔎点赞 👍收藏 ⭐️留言📝
    • 🙏 此博客均由博主单独编写,不存在任何商业团队运营,如发现错误,请留言轰炸哦!及时修正!感谢支持!
    • 🔥 Arduino ESP8266教程累计帮助过超过1W+同学入门学习硬件网络编程,入选过选修课程,刊登过无线电杂志 🔥零基础从入门到熟悉Arduino平台下开发ESP8266,同时会涉及网络编程知识。专栏文章累计超过60篇,分为基础篇、网络篇、应用篇、高级篇,涵盖ESP8266大部分开发技巧。

    快速导航
    单片机菜鸟的博客快速索引(快速找到你要的)

    如果觉得有用,麻烦点赞收藏,您的支持是博主创作的动力。

    1. 前言

    写app也快10年了,最近在玩玩esp32 ble相关知识点。对于物联网来说,经常有各种控制UI页面,那么可不可以说弄一个拖拽的简单app。说干就干!!!!!
    app下载链接,0积分下载,亲测可用

    BLE调试助手APP

    2. 参考资料

    使用到了一个网友开源的拖拽框架,在这基础上修改了部分代码达到现在的效果。

    3. App源码

    需要app源码同学直接留言邮箱,见到处理。
    在这里插入图片描述

    4. ESP32 BLE测试代码

    把以下代码烧录到ESP32-C3或者有BLE功能的ESP32即可。

    #include 
    #include 
    #include 
    #include 
    
    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);
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100

    5. Arduino测试结果

    在这里插入图片描述

    整体过程是通路的,后面即可在上面进行业务开发。

  • 相关阅读:
    Word脚注如何插入?1分钟学会!
    【华为机试真题 JAVA】一种字符串压缩表示的解压-100
    【算法|动态规划No.25】leetcode LCR 020. 回文子串
    datart:Invalid database configuration. Datart is running in demo mode
    【SelectIO】bitslice原语学习记录
    Java并发-ThreadLocal的使用
    Flink CDC介绍及原理
    梯度(gradient)、散度(divergence)与旋度(rotation)
    【附源码】计算机毕业设计JAVA红河旅游信息服务系统
    00 后搞视频号月入过万,怎么做?
  • 原文地址:https://blog.csdn.net/dpjcn1990/article/details/133309123