当前位置: 首页 > news >正文

基于 Arduino 编写 ESP32 BLE Server 例程

测试代码如下:

  • 支持 BLE 连接
  • 支持 BLE 数据传输
#include <BLEDevice.h>
#include <BLEServer.h>
#include <BLEUtils.h>namespace BLEServerDemo {BLEServer *pServer = nullptr;
BLEService *pService = nullptr;
BLECharacteristic *pCharacteristic = nullptr;bool deviceConnected = false;class ServerCallbacks : public BLEServerCallbacks {void onConnect(BLEServer *pServer) {deviceConnected = true;Serial.println("BLE connected");}void onDisconnect(BLEServer *pServer) {deviceConnected = false;Serial.println("BLE disconnected");pServer->startAdvertising();  // Restart advertising after disconnection}
};class CharacteristicCallbacks : public BLECharacteristicCallbacks {void onWrite(BLECharacteristic *pCharacteristic) {std::string value = pCharacteristic->getValue();Serial.print("Received Value: ");for (int i = 0; i < value.length(); i++) {// Serial.print(value[i]);Serial.print(value[i],HEX);Serial.print(" ");}Serial.println();}
};void initBLE() {BLEDevice::init("MyESP32BLEServer");pServer = BLEDevice::createServer();pServer->setCallbacks(new ServerCallbacks());pService = pServer->createService(BLEUUID("0000fff0-0000-1000-8000-00805f9b34fb"));pCharacteristic = pService->createCharacteristic(BLEUUID("0000fff1-0000-1000-8000-00805f9b34fb"),BLECharacteristic::PROPERTY_READ | BLECharacteristic::PROPERTY_WRITE);pCharacteristic->setCallbacks(new CharacteristicCallbacks());pService->start();pServer->getAdvertising()->start();Serial.println("Waiting for client connection...");
}void handleBLE() {if (deviceConnected) {// Handle other tasks as needed}
}}  // namespace BLEServerDemovoid setup() {Serial.begin(115200);BLEServerDemo::initBLE();
}void loop() {BLEServerDemo::handleBLE();
}

相关文章:

基于 Arduino 编写 ESP32 BLE Server 例程

测试代码如下&#xff1a; 支持 BLE 连接支持 BLE 数据传输 #include <BLEDevice.h> #include <BLEServer.h> #include <BLEUtils.h>namespace BLEServerDemo {BLEServer *pServer nullptr; BLEService *pService nullptr; BLECharacteristic *pCharacte…...

Mac环境变量配置

export HOMEBREW_NO_AUTO_UPDATEtrue关闭Homebrew自动更新&#xff0c;因为每次安装软件都要自动更新&#xff0c;特别慢export JAVA_HOME/Library/Java/JavaVirtualMachines/jdk1.8.0_271.jdk/Contents/Home配置JAVA_HOMEexport ANDROID_HOME/Users/fanpaopao/Library/Android…...

使用FTP文件传输协议的潜在风险

数据&#xff08;事实&#xff0c;数字&#xff0c;价值&#xff09;是当今业务运行的核心要素。但是&#xff0c;如果数据没有得到有效的存储和传输&#xff0c;它们就会成为阻碍业务发展的障碍。如果企业不能及时地把数据送到合适的地方&#xff0c;就会造成严重的经济损失。…...

Jtti:windows虚拟内存最小值太低如何解决

当Windows虚拟内存的最小值设置过低时&#xff0c;可能会导致系统性能下降、应用程序崩溃甚至系统不稳定。解决方法包括&#xff1a; 调整虚拟内存设置&#xff1a; 可以通过以下步骤调整虚拟内存的设置&#xff1a; 右键点击“此电脑”或“计算机”&#xff0c;选择“属性”。…...

基于微服务+Java+Spring Cloud +Vue+UniApp +MySql实现的智慧工地云平台源码

基于微服务JavaSpring Cloud VueUniApp MySql开发的智慧工地云平台源码 智慧工地概念&#xff1a; 智慧工地就是互联网建筑工地&#xff0c;是将互联网的理念和技术引入建筑工地&#xff0c;然后以物联网、移动互联网技术为基础&#xff0c;充分应用BIM、大数据、人工智能、移…...

Unity框架学习--4 Mono管理器

作用&#xff1a;使不继承MonoBehaviour的类能够开启协程&#xff0c;并且可以使用FixedUpdate、Update、LateUpdate进行每帧更新。 原理&#xff1a; 1、在场景中创建一个继承MonoBehaviour的“执行者”脚本&#xff0c;这个脚本就专门用来开启协程和监听帧更新。 2、Mono管理…...

Unity zSpace 开发

文章目录 1.下载 zSpace 开发环境1.1 zCore Unity Package1.2 zView Unity Package 2. 导入工程3. 发布设置4.功能实现4.1 用触控笔来实现对模型的拖拽&#xff1a; 5. 后续更新 1.下载 zSpace 开发环境 官网地址 1.1 zCore Unity Package zSpace 开发核心必须 1.2 zView …...

SQL注入是什么?如何防范?

什么是SQL注入&#xff1f; SQL注入&#xff08;SQLi&#xff09;是一种注入攻击&#xff0c;可以执行恶意SQL语句。它通过将任意SQL代码插入数据库查询&#xff0c;使攻击者能够完全控制Web应用程序后面的数据库服务器。攻击者可以使用SQL注入漏洞绕过应用程序安全措施&#…...

Spring kafka源码分析——消息是如何消费的

文章目录 概要端点注册创建监听容器启动监听容器消息拉取与消费小结 概要 本文主要从Spring Kafka的源码来分析&#xff0c;消费端消费流程&#xff1b;从spring容器启动到消息被拉取下来&#xff0c;再到执行客户端自定义的消费逻辑&#xff0c;大致概括为以下4个部分&#x…...

汽车电子的发展对国产32位MCU的影响

32位MCU是目前产品市场的主流&#xff0c;尤其是在汽车电子发展起来后&#xff0c;32位MCU在市场的比重迅速增涨&#xff0c;国内32位MCU厂商抓住风口&#xff0c;推出一系列汽车电子芯片从而稳定国内市场。如芯海的CS32F030系列就是主要应用汽车电子市场的32位MCU。 根据市场…...

Vue 目录结构 vite 项目

Vue3 项目常用的目录结构和每个文件的作用【通过 vite 创建的项目】 vite目录结构&#xff1a; dist // 打包后生成的文件目录 node_modules // 环境依赖 public // 公共资源目录 favicon.ico …...

TB/TM-商品详情原数据(APP)

一、接口参数说明&#xff1a; item_get_app-获得TB/TMapp商品详情原数据&#xff0c;点击更多API调试&#xff0c;请移步注册API账号点击获取测试key和secret 公共参数 请求地址: https://api-gw.onebound.cn/taobao/item_get_app 名称类型必须描述keyString是调用key&…...

小米发布会:雷军成长故事与创新壮举,AI大模型技术引领未来,雷军探索之路之从创业波折到小米AI领航,成就高端化传奇!

&#x1f337;&#x1f341; 博主猫头虎 带您 Go to New World.✨&#x1f341; &#x1f984; 博客首页——猫头虎的博客&#x1f390; &#x1f433;《面试题大全专栏》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33a; &a…...

春秋云镜 CVE-2021-41947

春秋云镜 CVE-2021-41947 Subrion CMS v4.2.1 存在sql注入 靶标介绍 Subrion CMS v4.2.1 存在sql注入。 启动场景 漏洞利用 exp http://localhost/panel/visual-mode.json?getaccess&typeblocks UNION ALL SELECT username, password FROM sbr421_members -- -&o…...

面试题-React(一):React是什么?它的主要特点是什么?

探索React&#xff1a;前端开发中的重要角色与主要特点 引言&#xff1a; 在现代前端开发领域&#xff0c;React已经成为最受欢迎和广泛使用的JavaScript库之一。它由Facebook开发并于2013年首次发布。随着时间的推移&#xff0c;React在开发社区中获得了强大的支持和认可。本…...

算法笔试 java 输入输出练习

在线编程题刷题训练 所有答案 scancer函数的用法 输入输出总结top&#xff01;&#xff01;&#xff01;&#xff01; java如何调用函数&#xff08;方法&#xff09; java刷acm的各种输入输出 vscode配置java环境 子函数的调用&#xff0c;直接定义一个static子函数调用就…...

5.内置构造函数

在JavaScript中最主要的数据类型有6种: 1.基本数据类型: 字符串、数值、布尔、undefined、 null 2.引用类型&#xff1a;对象 但是&#xff0c;我们会发现有些特殊情况: //普通字符串 const str andy console.1og(str.length) // 4其实字符串、数值、布尔、等基本类型也都有…...

DG故障切换及DG Broker失效配置清理

DG故障切换及DG Broker失效配置清理 DG故障强制切主DG Broker原有配置清理 DG故障强制切主 主库发生故障无法在短时间内恢复时&#xff0c;需要执行主备切换。此时由于DG Broker无法连接到主库&#xff0c;故不能通过Broker切换&#xff0c;只能手动在备库进行切主。 --断开备…...

地毯(暴力+差分两种方法)

题目描述 在 nx n 的格子上有 m 个地毯。 给出这些地毯的信息&#xff0c;问每个点被多少个地毯覆盖。 输入格式 第一行&#xff0c;两个正整数 n,m。意义如题所述。 接下来 m 行&#xff0c;每行两个坐标 (x_1,y_1) 和 (x_2,y_2)&#xff0c;代表一块地毯&#xff0c;左上…...

最新智能AI系统+ChatGPT源码搭建部署详细教程+知识库+附程序源码

近期有网友问宝塔如何搭建部署AI创作ChatGPT&#xff0c;小编这里写一个详细图文教程吧。 使用Nestjs和Vue3框架技术&#xff0c;持续集成AI能力到AIGC系统&#xff01; 增加手机端签到功能、优化后台总计绘画数量逻辑&#xff01;新增 MJ 官方图片重新生成指令功能同步官方 …...

亲测有效!5个无广告免费源码网 —— 会员源码网深度解析

在当今数字化时代&#xff0c;源码资源对于开发者、创业者和企业来说至关重要。一个优质的源码网站不仅能提供丰富的代码资源&#xff0c;还能促进技术交流和创新。今天&#xff0c;我要向大家推荐一个亲测有效的无广告免费源码网——会员源码网。会员源码网简介会员源码网是一…...

Go Context 生命周期设计

Go Context 生命周期设计&#xff1a;高效管理请求与资源 在Go语言中&#xff0c;Context是管理请求生命周期和跨协程控制的核心工具。它不仅能传递请求范围的数据&#xff0c;还能优雅地处理超时、取消和资源释放&#xff0c;成为高并发场景下的必备机制。本文将深入探讨Cont…...

seo代理与网站优化公司的区别在哪里

SEO代理与网站优化公司的区别在哪里 在当今竞争激烈的互联网市场中&#xff0c;各种形式的数字营销服务层出不穷。其中&#xff0c;SEO&#xff08;搜索引擎优化&#xff09;和网站优化服务尤为重要。许多人对于SEO代理和网站优化公司的区别却一知半解。本文将详细探讨这两者的…...

Seaborn 绘图基础

在 Python 的数据可视化生态中&#xff0c;Seaborn 是建立在 Matplotlib 之上的高级统计绘图库。它面向数据分析任务提供了更直接的绘图接口&#xff0c;能够围绕变量的分布、关系与结构组织图形表达&#xff0c;因此特别适合教学入门与探索性数据分析。与只关注“如何画出线、…...

圆柱电池气动点焊机:高精度焊接新标杆,LangChain 学习 - LangChain 引入(LangChain 概述、LangChain 的使用场景、LangChain 架构设计)。

圆柱电池气动点焊机的技术优势 圆柱电池气动点焊机采用高精度气动加压系统&#xff0c;压力稳定控制在0.2-0.5MPa范围内&#xff0c;配合伺服驱动可实现0.01mm的焊接位置精度。该设备搭载恒流控制逆变焊接电源&#xff0c;输出电流波动小于1%&#xff0c;确保每个焊点电阻值差异…...

单片机AD采样十大滤波算法详解与应用

1. 单片机AD采样滤波算法概述在嵌入式系统开发中&#xff0c;ADC采样是获取模拟信号的关键环节。然而实际应用中&#xff0c;采样值常会受到各种干扰影响&#xff0c;导致数据波动甚至错误。作为一名有着十年嵌入式开发经验的工程师&#xff0c;我总结了十种最实用的AD采样滤波…...

健身私教AI:OpenClaw+Qwen3.5-9B定制个人训练计划与饮食建议

健身私教AI&#xff1a;OpenClawQwen3.5-9B定制个人训练计划与饮食建议 1. 为什么需要AI健身私教&#xff1f; 去年冬天体检报告上的"轻度脂肪肝"三个字&#xff0c;成了我决定认真健身的最后一根稻草。作为程序员&#xff0c;我试过各种健身APP&#xff0c;但总感…...

A53安全启动基石——TrustZone在A53中的硬件实现

该文章同步至公众号OneChan 开篇&#xff1a;回答上篇进阶思考 在上一篇探讨复位启动的种种陷阱后&#xff0c;我们留下的五个进阶思考问题&#xff0c;现在结合安全启动和TrustZone的特性进行分析&#xff1a; 1. 量子不确定性对复位电路的影响 量子隧穿效应&#xff1a;在…...

5V供电标准的历史演变与现代应用

1. 5V供电的历史渊源与技术背景上世纪60年代末&#xff0c;德州仪器&#xff08;TI&#xff09;推出的7400系列TTL逻辑芯片确立了5V供电标准。这个电压值并非随意选定&#xff0c;而是经过严谨的工程权衡&#xff1a;在当时的硅工艺条件下&#xff0c;5V能在晶体管导通损耗&…...

突破鸣潮帧率限制:WaveTools工具箱全攻略与优化指南

突破鸣潮帧率限制&#xff1a;WaveTools工具箱全攻略与优化指南 【免费下载链接】WaveTools &#x1f9f0;鸣潮工具箱 项目地址: https://gitcode.com/gh_mirrors/wa/WaveTools 在《鸣潮》1.2版本更新后&#xff0c;许多玩家发现游戏帧率被锁定在60FPS&#xff0c;无法充…...