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

news2025/4/9 21:17:26

可拖拽配置蓝牙控制app

忘记过去,超越自己

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

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

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

文章目录

    • 1. 前言
    • 2. 参考资料
    • 3. App源码
    • 4. ESP32 BLE测试代码
    • 5. Arduino测试结果

1. 前言

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

BLE调试助手APP

2. 参考资料

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

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/1042961.html

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

相关文章

全面解析“由于找不到msvcp140.dll无法继续执行代码”的5个解决方法

找不到 msvcp140.dll 文件可能会导致许多程序无法正常运行&#xff0c;这给许多用户带来了困扰。当您遇到由于找不到 msvcp140.dll 无法继续执行代码的问题时&#xff0c;您可以尝试以下方法来解决问题。 首先&#xff0c;了解 msvcp140.dll 文件的作用是很重要的。msvcp140.dl…

POI导入时经常碰到字段类型和导入的类型冲突

我们在用poi导入时导入的Excel列的字段类型经常和实体类里的不一致 //导入类 public class ImportVo {ExcelVOAttribute(name "名称",column"A")private String mc;ExcelVOAttribute(name "数量",column"B")private Integer sl;Exc…

WARNING:tensorflow:Your input ran out of data; interrupting training. 解决方法

问题详情&#xff1a; WARNING:tensorflow:Your input ran out of data; interrupting training. Make sure that your dataset or generator can generate at least steps_per_epoch * epochs batches (in this case, 13800 batches). You may need to use the repeat() funct…

CentOS 7 安装 Tomcat

CentOS 7 安装 Tomcat&#xff08;注意版本号要与自己的版本一致&#xff09; 在/usr/local/下新建文件夹tomcat&#xff1a; cd /usr/local/mkdir tomcatcd tomcat上传tomcat8.5到linux的/usr/local/tomcat下 进入tomcat文件夹下&#xff1a; cd /usr/local/tomcatyum安装…

tensor数学运算

运算函数加add减sub乘mul除div矩阵相乘matmul次方pow平方根及其倒数sqrt 和 rsqrt向下/向上取整floor / ceil分离出整数/小数trunc / frac近似解四舍五入round裁剪clamp 1、矩阵元素的加减乘除 注意是矩阵间对应位置元素进行加减乘除 add 和 a torch.rand(3,4) b torch.…

ardupilot开发 ---传感器驱动,外设驱动篇

ardupilot支持不同厂商的传感器&#xff0c;如雷达&#xff0c;声呐&#xff0c;激光&#xff0c;相机等&#xff1b; 支持的通信协议 I2C, SPI, UART (aka Serial) CANBUS 驱动程序的前后台分离 ardupilot中传感器驱动的重要结构是前后分离&#xff1b; Library库调用前端…

Solidity 小白教程:24. 在合约中创建新合约

Solidity 小白教程&#xff1a;24. 在合约中创建新合约 在以太坊链上&#xff0c;用户&#xff08;外部账户&#xff0c;EOA&#xff09;可以创建智能合约&#xff0c;智能合约同样也可以创建新的智能合约。去中心化交易所uniswap就是利用工厂合约&#xff08;Factory&#xf…

天软特色因子看板 (2023.09 第09期)

该因子看板跟踪天软特色因子A02002 (近一月尾盘成交占比(%))&#xff0c;该因子为近一个月尾盘成交量占比均值因子&#xff0c;用以刻画股票在收盘时&#xff0c;主力资金的流动影响。近一月尾盘成交占比(%)越小&#xff0c;表示多方或空方无力量。近一月尾盘成交占比(%)越大&a…

Day_16 结构体

目录 1.结构体 1.1结构体类型的声明 1.结构体的基础知识 2.结构的声明 3.特殊的声明 1.2结构的自引用 1.3结构体变量的定义和初始化 1.4结构体内存对齐 1.怎么对齐的 2.为什么要对齐 3.修改默认对齐数 1.5结构体传参 1.传值调用 2.传地址调用 3.结论 1.6结构…

SOLIDWORKS二次开发

SOLIDWORKS是一套三维设计软件, 采用特征建模、变量化驱动可方便地实现三维建模、装配和生成工程图。SOLIDWORKS软件本身所具有的交互方式&#xff0c;可以使用户对已生成模型的尺寸、几何轮廓和相互约束关系随时进行修改, 而不需要编程。SOLIDWORKS软件本身的方程式可以实现简…

订阅《复现SCI文章系列教程》

写在前面 《小杜生信笔记》准备开启新的订阅专栏**《复现期刊文章系列教程》&#xff0c;本专栏小杜会寻找一些自己感兴趣的文章进行复现&#xff08;不说百分之百的复现&#xff0c;但是也会百分之八十进行复现&#xff09;。本期刊的教程代码会全部进行公开&#xff08;通过订…

uniapp项目实践总结(二十三)网页和小程序应用打包教程

导语&#xff1a;当你的应用程序开发完成后&#xff0c;在发布到互联网之前&#xff0c;需要进行打包操作&#xff0c;包括网页端、小程序端的打包。 目录 准备工作网页打包小程序打包 准备工作 在打包之前&#xff0c;请保证你的 uniapp 应用程序编译到网页、小程序是可以正…

40亿美元!ChatGPT竞争对手Anthropic,再获巨额融资

9月25日下午&#xff0c;生成式AI平台Anthropic在官网宣布&#xff0c;获得亚马逊&#xff08;Amazon&#xff09;40亿美元&#xff08;约292亿元&#xff09;投资&#xff0c;成为全球生成式AI赛道最高融资之一。 本轮过后&#xff0c;Anthropic的总融资额度达到56亿美元&…

数据结构--堆排序

目录 堆的定义 建立初始化堆的步骤 建立大根堆的代码 大根堆排序的代码 算法效率分析 稳定性 堆的定义 回忆 基于选择排序的特性&#xff1a;选取关键字最小&#xff08;或者最大&#xff09;的元素放入到序列里面&#xff0c;知道了大堆和小堆概念&#xff0c;所以将…

解决电脑桌面软件图标变白的问题

文章目录 前言一、软件图标变白的原因二、解决方法1、显示隐藏项目2、清除图标缓存 前言 桌面软件太多了&#xff0c;导致有些杂乱&#xff0c;换了个显示器后&#xff0c;想着将桌面的软件分类&#xff0c;将其放到不同的目录下&#xff0c;结果有些软件放入文件夹后图标变成…

【【萌新的FPGA学习之触摸屏控制LED实验】】

萌新的FPGA学习之触摸屏控制LED实验 触摸屏控制LED实验 触摸按键主要可分为四大类&#xff1a;电阻式、电容式、红外感应式以及表面声波式。根据其属性的不同&#xff0c;每 种触摸按键都有其合适的使用领域。 电阻式触摸按键由多块导电薄膜按照按键的位置印制而成&#xff0c…

链表(单链表、双链表)

前言&#xff1a;链表是算法中比较难理解的部分&#xff0c;本博客记录单链表、双链表学习&#xff0c;理解节点和指针的使用&#xff0c;主要内容包括&#xff1a;使用python创建链表、实现链表常见的操作。 目录 单链表 双链表 单链表 引入链表的背景&#xff1a; 先来看…

Goby 漏洞发布|泛微 E-office flow_xml.php 文件 SORT_ID 参数 SQL 注入漏洞

漏洞名称&#xff1a;泛微 E-office flow_xml.php 文件 SORT_ID 参数 SQL 注入漏洞 English Name&#xff1a; Weaver E-office flow_xml.php file SORT_ID parameter SQL injection vulnerability CVSS core:7.8 影响资产数&#xff1a; 21632 漏洞描述&#xff1a; 泛微…

idea创建同级项目-纠结是SB

idea创建同级项目-纠结是SB 创建方法&#xff1a;

线性约束最小方差准则(LCMV)波束形成算法仿真

常规波束形成仅能使得主波束对准目标方向&#xff0c;从而在噪声环境下检测到目标&#xff0c;但无法对复杂多变的干扰做出响应&#xff0c;所以不能称之为真正意义上的自适应滤波。自适应阵列处理指的是采用自适应算法对空间阵列接收的混合信号进行处理&#xff0c;又可称为自…