【app篇】写个简单的BLE调试app,练练手,同时为后续调试ESP32 BLE做个支持

news2024/11/19 9:27:09

忘记过去,超越自己

  • ❤️ 博客主页 单片机菜鸟哥,一个野生非专业硬件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测试结果

在这里插入图片描述
整体过程是通路的,后面即可在上面进行业务开发。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1039492.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

5、Nacos服务注册服务端源码分析(四)之NotifyCenter

上篇我们讲server端处理服务注册源码时&#xff0c;遇到了一个关键类NotifyCenter&#xff0c;本篇就主要来分析下这个类。 NotifyCenter 这个类所在包&#xff1a;nacos-common /*** Unified Event Notify Center.*/通过类注释可以看出来这个类是一个统一的事件通知中心&am…

PHP8中的构造方法和析构方法-PHP8知识详解

今日分享的内容是php8中的构造方法和析构方法&#xff0c;我们把构造方法和析构方法这两个方法分开来讲&#xff1a; 1、构造方法 构造方法存在于每个声明的类中&#xff0c;主要作用是执行一些初始化任务。如果类中没有直接声明构造方法&#xff0c;那么类会默认地生成一个没…

仿网吧游戏菜单-超好用

GG软件菜单(X64)仿网吧菜单: https://url75.ctfile.com/f/1834175-943877085-2d844a?p6775 (访问密码: 6775)

如何将前后端分离的项目部署在服务器上

宝塔Linux部署&#xff1a; 因为要部署前端我们先下个nigx Tomcat,下载这个只是为了java&#xff0c;它里面包含java的 前端 在去添加站点&#xff0c;域名暂时是自己的公网 然后打开新建的站点&#xff0c;把里面的文件全删掉&#xff0c;再把自己的前端dist里的文件全选拖…

高速USB转8路RS422串口

基于480Mbps 高速USB转8路串口芯片CH348&#xff0c;可以为各类主机扩展出8个独立的串口。使用厂商提供的VCP串口驱动程序&#xff0c;可支持Windows、Linux、Android、macOS等操作系统。使用单个CH348芯片即可实现USB一拖八串口转接产品&#xff0c;高速USB收发器和控制器、高…

SpringCloud 简单的了解

什么是SpringCloud ? 基于 Spring Boot 的 Spring 集成应用程序&#xff0c;它利用 Spring Boot 的开发便利性简化了分布式系统的开发&#xff0c;提供与外部系统的集成。 如服务注册与发现、配置中心、负载均衡、断路器、消息总线、数据监控等&#xff1b;换句话说&#xff…

拼多多商品详情数据接口

拼多多商品详情接口的具体内容。获取拼多多商品详情&#xff0c;可以参考如下方式&#xff1a; item_get_app-根据ID取商品详情原数据接口包括&#xff1a;标题&#xff0c;价格&#xff0c;促销价&#xff0c;优惠券&#xff0c;库存&#xff0c;销量&#xff0c;详情图片&am…

Android开发之状态栏的设置

Android页面开发通常是根据UI设计进行&#xff0c;真机会遇到顶部状态栏和页面背景色或背景图片不协调的情况&#xff0c;这时候需要对状态栏进行设置。默认状态栏是有固定高度和背景色的&#xff0c;基本上我们需要将状态栏背景色设置透明并且图标能够在页面显示&#xff0c;下…

【项目实战】Linux系统下jar包自启动

什么是jar包自启动 在Linux系统中&#xff0c;"jar包自启动"是指通过配置将Java程序打包成可执行的Jar文件&#xff0c;并设置其在系统启动时自动运行。以下是与jar包自启动相关的一些概念&#xff1a; Jar文件&#xff1a;Jar&#xff08;Java Archive&#xff09…

Postgresql事务测试

参考一个事务中 可以查询自己未提交的数据吗_最详细MySQL事务隔离级别及原理讲解&#xff01;&#xff08;二&#xff09;-CSDN博客 一个事务中 可以查询自己未提交的数据吗_趣说数据库事务隔离级别与原理_weixin_39747293的博客-CSDN博客 【MySql&#xff1a;当前读与快照读…

虚拟机与物理机之寄生贴贴

虚拟机 虚拟机指通过【软件模拟的】、【具有完整硬件系统功能的】、【运行在一个完全隔离环境中的】完整计算机【系统】。它是一个系统&#xff0c;一个挂在物理机上的系统&#xff0c;也就是“寄生”在别人身上的东西。可以称为“寄生兽” 物理机 物理机&#xff0c;是真实…

uni-app使用HBuilder X编辑器本地打包apk步骤说明

1.下载安装Android Studio 下载地址官方地址&#xff1a;Android Studio 下载文件归档 | Android 开发者 | Android Developers 安装Android SDK和Google USB Driver即可&#xff0c;后者主要是为了后期使用USB设置的&#xff0c;如果不需要可以不点。 2.下载uni-app提供…

适合新手自学的网络安全基础技能“蓝宝书”:《CTF那些事儿》

CTF比赛是快速提升网络安全实战技能的重要途径&#xff0c;已成为各个行业选拔网络安全人才的通用方法。但是&#xff0c;本书作者在从事CTF培训的过程中&#xff0c;发现存在几个突出的问题&#xff1a; 1&#xff09;线下CTF比赛培训中存在严重的“最后一公里”问题&#xf…

工具学习--easyexcel-3.x 使用--写入基本使用,自定义转换--动态表头以及宽设置-

写在前面&#xff1a; easyexcel是alibaba开发简单导出未excel的工具。使用的情况还是比较多的。 文章目录 依赖导入写Excel快速入门对象设置ExcelProperty设置列属性ExcelIgnore 忽视列宽、行高格式转换时间格式化数字格式化自定义格式化 合并单元格其他更加个性化需求动态表…

简单理解旁路电容和去耦电容

1、本文内容如有错误&#xff0c;欢迎交流指正。 2、本文仅作为本人学习笔记&#xff0c;部分内容来源于网络、书籍&#xff0c;如涉及侵权&#xff0c;请联系删除。 什么是旁路电容&#xff1f; 旁路电容的英文原文是Bypass capacitor&#xff0c;bypass就是绕过&#xff0c;避…

《DATASET CONDENSATION WITH GRADIENT MATCHING》

本文提出了一种用于数据效率学习的训练集合成技术&#xff0c;称为“数据集凝聚”(Dataset)&#xff0c;它学习将大数据集压缩成一个小的信息合成样本集&#xff0c;用于从头开始训练深度神经网络。我们将这个目标表述为在原始数据和合成数据上训练的深度神经网络权值的梯度之间…

sizeof与strlen区别

一、sizeof与strlen区别 sizeof是关键字&#xff0c;参数可以是各种数据&#xff08;包括函数&#xff0c;类型&#xff0c;对象&#xff0c;数组&#xff0c;指针……&#xff09;用于计算数据所占字节大小 strlen是函数&#xff0c;参数类型必须是字符型指针&#xff08;char…

检验过程管理

声明 本文是学习GB-T 42893-2023 电子商务交易产品质量监测实施指南. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 1 范围 本文件提供了开展电子商务交易的有形产品质量监测的总则&#xff0c;监测准备、监测实施、监测效果评价 与反馈等过程指导…

vue在el-tab中使用echart(出现canvas高宽一直是100px问题+echart随外层div变化而自适应)

问题1:canvas高宽一直是100px问题 解决方法&#xff1a;使用v-if&#xff0c;参考文献https://blog.csdn.net/qq_42527726/article/details/106147539?utm_mediumdistribute.pc_relevant.none-task-blog-2~default~baidujs_utm_term~default-0-106147539-blog-132323416.235^…

全流量安全分析的重要性

网络安全的重要性体现在以下几个方面&#xff1a; 保护数据安全&#xff1a;随着数字化时代的到来&#xff0c;企业和组织的数据变得越来越重要和敏感。网络安全能够有效保护敏感数据不被未授权的访问、篡改或泄露。通过加密、访问控制、身份认证等手段&#xff0c;网络安全确…