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

ESP32鼠标驱动(ble hid device_demo)【ESP32指向鼠标】

ESP32鼠标驱动(ble hid device_demo)【ESP32指向鼠标】

我使用的vscode开发esp32,用的是ESP-IDF v5.12固件,其提供了很多例程,在搜索里面输入“ESP-IDF: Show Examples Projects”,便可看到例程,如下图所示,我选择的是ble hid device_demo,其中包含鼠标的例程,我可以直接使用在这里插入图片描述

例程的效果

在main/ble_hidd_demo_main.c中,我们可看到例程的主要函数,如下

void hid_demo_task(void *pvParameters)
{vTaskDelay(1000 / portTICK_PERIOD_MS);while(1) {vTaskDelay(2000 / portTICK_PERIOD_MS);if (sec_conn) {ESP_LOGI(HID_DEMO_TAG, "Send the volume");send_volum_up = true;//uint8_t key_vaule = {HID_KEY_A};//esp_hidd_send_keyboard_value(hid_conn_id, 0, &key_vaule, 1);esp_hidd_send_consumer_value(hid_conn_id, HID_CONSUMER_VOLUME_UP, true);vTaskDelay(3000 / portTICK_PERIOD_MS);if (send_volum_up) {send_volum_up = false;esp_hidd_send_consumer_value(hid_conn_id, HID_CONSUMER_VOLUME_UP, false);esp_hidd_send_consumer_value(hid_conn_id, HID_CONSUMER_VOLUME_DOWN, true);vTaskDelay(3000 / portTICK_PERIOD_MS);esp_hidd_send_consumer_value(hid_conn_id, HID_CONSUMER_VOLUME_DOWN, false);}}}
}

主要就是控制电脑的音量,在编译并烧录程序后,连接esp32的蓝牙,变可看到音量的增长与降低。
在这里插入图片描述

控制鼠标的函数

在main/esp_hidd_prf_api.c中,具体如下,

void esp_hidd_send_mouse_value(uint16_t conn_id, uint8_t mouse_button, int8_t mickeys_x, int8_t mickeys_y)
{uint8_t buffer[HID_MOUSE_IN_RPT_LEN];buffer[0] = mouse_button;   // Buttonsbuffer[1] = mickeys_x;           // Xbuffer[2] = mickeys_y;           // Ybuffer[3] = 0;           // Wheelbuffer[4] = 0;           // AC Panhid_dev_send_report(hidd_le_env.gatt_if, conn_id,HID_RPT_ID_MOUSE_IN, HID_REPORT_TYPE_INPUT, HID_MOUSE_IN_RPT_LEN, buffer);return;
}

buffer[0] = mouse_button;: 将鼠标按钮状态,左右键

buffer[1] = mickeys_x;: 将鼠标在X轴上的移动速度

buffer[2] = mickeys_y;: 将鼠标在Y轴上的移动速度

buffer[3] = 0;: 将鼠标滚轮的移动量

buffer[4] = 0;: 将AC Pan(通常用于水平滚动)的值

鼠标功能的实验

在void hid_demo_task(void *pvParameters){}函数中,把音量函数,改为鼠标控制函数便可

相关文章:

ESP32鼠标驱动(ble hid device_demo)【ESP32指向鼠标】

ESP32鼠标驱动(ble hid device_demo)【ESP32指向鼠标】 我使用的vscode开发esp32,用的是ESP-IDF v5.12固件,其提供了很多例程,在搜索里面输入“ESP-IDF: Show Examples Projects”,便可看到例程,如下图所示&#xff0…...

CSDN文章质量分查询系统【赠python爬虫、提分攻略】

CSDN文章质量分查询系统 https://www.csdn.net/qc 点击链接-----> CSDN文章质量分查询系统 <------点击链接 点击链接-----> https://www.csdn.net/qc <------点击链接 点击链接-----> CSDN文章质量分查询系统 <------点击链接 点击链…...

vscode远程报错:Remote host key has changed,...

重装了Ubuntu系统之后&#xff0c;由20.04改为22.04&#xff0c;再用vscode远程&#xff0c;就出现了以上报错。 亲测有效的办法 gedit ~/.ssh/known_hosts 打开这个配置文件 删掉与之匹配的那一行&#xff0c;不知道删哪一行的话&#xff0c;就打开第一行这个 /.ssh/confi…...

【核心算法篇一】《DeepSeek视觉引擎:YOLOv8模型迁移实战》

某天深夜,算法工程师小王在办公室突然跳起来大喊:"mAP从0.91降到0.87了!"整个团队瞬间惊醒——这是正在将YOLOv8迁移到智能质检产线时遭遇的惊魂时刻。本文将以DeepSeek视觉引擎的实战经验,带你穿越模型迁移的雷区,揭秘工业级落地的核心技巧。(文末附完整训练参…...

如何在 ConstraintLayout 中将 ViewPager 始终置于 ll_title 的下方

关于如何在 ConstraintLayout 中将 ViewPager 始终置于 ll_title标题栏 的下方。。 如何将 ViewPager 始终置于 ll_title 下方 在 ConstraintLayout 中&#xff0c;可以通过约束来实现 ViewPager 始终位于 ll_title 标题栏的下方。以下是修改后的布局代码&#xff1a; <?…...

docker 安装 Rabbitmq 详解

在平常的开发工作中&#xff0c;我们经常会使用到 rabbitmq&#xff0c;rabbitmq 主要可以进行应用解耦、异步通信、流量削峰、负载均衡、消息持久化、死信队列等。比如商城系统&#xff0c;下单后&#xff0c;通过消息队列通知库存系统、积分系统、物流系统等。发送短信时通过…...

51单片机学习之旅——在LCD1602上显示时钟

新建工程 打开软件 LCD1602模块代码添加 因为我们在LCD1602上显示时钟&#xff0c;因此我们需要添加LCD1602的模块代码 跳转到这条博客51单片机学习之旅——模块化编程集_51单片机ruminant-CSDN博客&#xff0c;复制相关代码跳转到这条博客51单片机学习之旅——模块化编程集…...

pytest asyncio 支持插件 pytest-asyncio

pytest 是 Python 测试框架&#xff0c;但其不支持基于 asyncio 的异步程序&#xff08;例如&#xff0c;测试 FastAPI 异步代码&#xff09;&#xff0c;pytest-asyncio 是一个 pytest 插件&#xff0c;该插件赋予 pytest 可以测试使用 asyncio 库代码的能力。 https://github…...

全平台搭载旭日5!科沃斯GOAT智能割草机器人全新系列正式开售

要闻 近日&#xff0c;科沃斯全新发布的GOAT A Series 和 GOAT O Series割草机器人&#xff0c;将在多国市场正式上市发售。作为业界最强的割草机器人产品之一&#xff0c;GOAT致力为割草机带来基于机器人视觉的专业定位解决方案。科沃斯GOAT全新系列产品全平台搭载地瓜机器人…...

“深入浅出”系列之C++:(8)libevent 库

libevent 是一个开源的高性能事件通知库&#xff0c;它为处理异步 I/O 事件提供了一个通用的接口。该库采用事件驱动的编程模型&#xff0c;允许开发者在多个 I/O 源&#xff08;如套接字、文件描述符等&#xff09;上监听事件&#xff0c;并在事件发生时执行相应的回调函数。l…...

备战蓝桥杯 Day4 差分

差分(修改区间后查询) 1.要点 a[0]0; for(int i1;i<n;i){diff[i]a[i]-a[i-1];//构建差分数组 } //原数组a区间[l,r]全部加上x diff[l]x;//还原a数组[l,n]全部加上x diff[r1]-x;//还原a数组[r1,n]全部减去x for(int i1;i<n;i){a[i]a[i-1]diff[i]; }实现多次修改完后多次…...

一个前端,如何同时联调多个后端

文章目录 场景解决方案思路实现步骤创建项目目标前端配置安装cross-env配置vue.config.js配置package.json 测试 场景 一个前端&#xff0c;需要同时和N个后端联调 一个需求里有若干个模块&#xff0c;分别给不同的后端开发&#xff0c;前端需要和N个后端联调 本地开启一个端…...

Scrapy:DownloaderAwarePriorityQueue队列设计详解

DownloaderAwarePriorityQueue 学习笔记 1. 简介 DownloaderAwarePriorityQueue 是 Scrapy 中一个高级的优先级队列实现&#xff0c;它不仅考虑请求的优先级&#xff0c;还会考虑下载器的负载情况。这个队列为每个域名&#xff08;slot&#xff09;维护独立的优先级队列&#…...

GoFound 与 MySQL 集成优化方案

GoFound 与 MySQL 集成优化方案 1. 明确需求 文章信息存储在 MySQL 数据库中。使用 GoFound 实现全文搜索功能。搜索时&#xff0c;先从 GoFound 中获取匹配的文章 ID&#xff0c;然后从 MySQL 中查询完整的文章信息。 2. 优化思路 数据同步&#xff1a;将 MySQL 中的文章数…...

Unity 打开摄像头 并显示在UI

需求: 打开相机并显示在UI上 效果: 注意&#xff1a; 电脑可能有多个摄像头&#xff0c;注意名称 代码: using System; using System.Linq; using UnityEngine; using UnityEngine.UI; using System.Collections.Generic; #if UNITY_EDITOR using UnityEditor; #endifname…...

PostgreSQL的学习心得和知识总结(一百六十九)|深入理解PostgreSQL数据库之 Group By 键值消除 的使用和实现

目录结构 注&#xff1a;提前言明 本文借鉴了以下博主、书籍或网站的内容&#xff0c;其列表如下&#xff1a; 1、参考书籍&#xff1a;《PostgreSQL数据库内核分析》 2、参考书籍&#xff1a;《数据库事务处理的艺术&#xff1a;事务管理与并发控制》 3、PostgreSQL数据库仓库…...

Word中接入大模型教程

前言 为什么要在word中接入大模型呢&#xff1f; 个人觉得最大的意义就是不用来回切换与复制粘贴了吧。 今天分享一下昨天实践的在word中接入大模型的教程。 在word中接入大模型最简单的方式就是使用vba。 vba代码要做的事&#xff0c;拆分一下就是&#xff1a; 获取用户…...

Vue前端开发-Vant介绍,安装部署

Vant 是有赞前端团队开源的移动端组件库&#xff0c;适用于手机端的页面&#xff0c;它体积轻量&#xff0c;Vant组件的平均体积仅有8.8KB&#xff0c;压缩后只有1KB;除体积轻量外&#xff0c;可定制又是它的另外一个特点&#xff0c;它不仅提供基础的UI组件&#xff0c;还提供…...

Linux中线程创建,线程退出,线程接合

线程的简单了解 之前我们了解过 task_struct 是用于描述进程的核心数据结构。它包含了一个进程的所有重要信息&#xff0c;并且在进程的生命周期内保持更新。我们想要获取进程相关信息往往从这里得到。 在Linux中&#xff0c;线程的实现方式与进程类似&#xff0c;每个线程都…...

教学资料档案管理系统

本系统构建 JAVA 体系的后端系统&#xff0c;围绕以安全&#xff0c;可靠&#xff0c;高速&#xff0c;健壮&#xff0c;易于扩展为目标的方向进行开发&#xff0c;在阿里等开源库的基础上实现提供教学资料档案的管理系统的后端接口的微服务架构系统。 功能包含&#xff1a;系…...

《Stable Diffusion绘画完全指南:从入门到精通的Prompt设计艺术》-配套代码示例

第一章&#xff1a;模型加载与基础生成 1.1 基础模型加载 from diffusers import StableDiffusionPipeline import torch# 加载SD 1.5基础模型&#xff08;FP32精度&#xff09; pipe StableDiffusionPipeline.from_pretrained("runwayml/stable-diffusion-v1-5",…...

代码随想录算法【Day50】

Day50 图的基础知识 图的种类&#xff1a;有向图&#xff0c;无向图&#xff0c;带权值的图 度 有多少条边连接这个节点就是几度 出度&#xff1a;从该节点指到别的节点的边 入度&#xff1a;与“出度”相反 连通性 一般在无向图中研究 连通图&#xff1a;任何一个节点都…...

禁止WPS强制打开PDF文件

原文网址&#xff1a;禁止WPS强制打开PDF文件_IT利刃出鞘的博客-CSDN博客 简介 本文介绍如何避免WPS强制打开PDF文件。 方法 1.删除注册表里.pdf的WPS绑定 WinR&#xff0c;输入&#xff1a;regedit&#xff0c;回车。找到&#xff1a;HKEY_CLASSES_ROOT\.pdf删除KWPS.PDF…...

DeepSeek R1生成图片总结2(虽然本身是不能直接生成图片,但是可以想办法利用别的工具一起实现)

DeepSeek官网 目前阶段&#xff0c;DeepSeek R1是不能直接生成图片的&#xff0c;但可以通过优化文本后转换为SVG或HTML代码&#xff0c;再保存为图片。另外&#xff0c;Janus-Pro是DeepSeek的多模态模型&#xff0c;支持文生图&#xff0c;但需要本地部署或者使用第三方工具。…...

深入解析NoSQL数据库:从文档存储到图数据库的全场景实践

title: 深入解析NoSQL数据库:从文档存储到图数据库的全场景实践 date: 2025/2/19 updated: 2025/2/19 author: cmdragon excerpt: 通过电商、社交网络、物联网等12个行业场景,结合MongoDB聚合管道、Redis Stream实时处理、Cassandra SSTable存储引擎、Neo4j路径遍历算法等42…...

大模型WebUI:Gradio全解11——使用transformers.agents构建Gradio UI(3)

大模型WebUI&#xff1a;Gradio全解11——使用transformers.agents构建Gradio UI&#xff08;3&#xff09; 前言本篇摘要11. 使用transformers.agents构建Gradio UI11.3 创建和使用工具Tools11.3.1 默认工具箱与load_tool11.3.2 创建新工具11.3.3 管理代理的工具箱toolbox11.3…...

Mybatis-Plus的使用

1. MyBatis-Plus介绍 MyBatis-Plus(简称 MP)是⼀个MyBatis的增强⼯具,在MyBatis的基础上只做增强不做改变,为简化开 发.提⾼效率⽽⽣ 特性: • 润物⽆声:只做增强不做改变&#xff0c;引⼊它不会对现有⼯程产⽣影响&#xff0c;如丝般顺滑. • 效率⾄上:只需简单配置&#…...

基于YOLO11深度学习的心脏超声图像间隔壁检测分割与分析系统【python源码+Pyqt5界面+数据集+训练代码】深度学习实战、目标分割、人工智能

《------往期经典推荐------》 一、AI应用软件开发实战专栏【链接】 项目名称项目名称1.【人脸识别与管理系统开发】2.【车牌识别与自动收费管理系统开发】3.【手势识别系统开发】4.【人脸面部活体检测系统开发】5.【图片风格快速迁移软件开发】6.【人脸表表情识别系统】7.【…...

什么是神经网络?

0 前言 神经网络是一种人工智能方法&#xff0c;用于教计算机以受人脑启发的方式处理数据。这是一种机器学习过程&#xff0c;称为深度学习&#xff0c;它使用类似于人脑的分层结构中的互连节点或神经元。它可以创建自适应系统&#xff0c;计算机使用该系统来从错误中进行学习…...

【第12章:深度学习与伦理、隐私—12.1 AI伦理原则与偏见检测的方法与实践】

凌晨三点,某法院的AI量刑系统突然将一桩盗窃案的刑期预测从6个月改为3年——只因被告人的居住地邮编关联到某个少数族裔聚居区。这场静默的算法叛乱,揭开了AI伦理问题的冰山一角。 一、AI伦理的五大天条 1.1 公平性原则:算法没有"完美中立" ![不同算法在COMPAS…...

运用先进的智能算法和优化模型,进行科学合理调度的智慧园区开源了

智慧园区场景视频监控平台是一款功能强大且简单易用的实时算法视频监控系统。它的愿景是最底层打通各大芯片厂商相互间的壁垒&#xff0c;省去繁琐重复的适配流程&#xff0c;实现芯片、算法、应用的全流程组合&#xff0c;从而大大减少企业级应用约95%的开发成本。充分利用现有…...

Redis过期机制

const (cacheDuration 24 * time.Hour )func SetToCache(rdb *redis.Client, key string, data []byte) error {return rdb.Set(rdb.Context(), key, data, cacheDuration).Err() }以上函数中的rdb.Set(rdb.Context(), key, data, cacheDuration).Err()中的 cacheDuration一旦…...

Android ListPreference使用

Android ListPreference使用 参考 添加链接描述 导入 androidx.preference.ListPreferenceListPreference是Android中的一个Preference子类,用于显示一个可选择的列表,并且可以保存用户所选择的值。它继承自DialogPreference,可以在用户点击时弹出一个对话框,显示可选择的…...

10分钟上手DeepSeek开发:SpringBoot + Vue2快速构建AI对话系统

作者&#xff1a;后端小肥肠 目录 1. 前言 为什么选择DeepSeek&#xff1f; 本文技术栈 2. 环境准备 2.1. 后端项目初始化 2.2. 前端项目初始化 3. 后端服务开发 3.1. 配置文件 3.2. 核心服务实现 4. 前端服务开发 4.1. 聊天组件ChatWindow.vue开发 5. 效果展示及源…...

瑞芯微RV1126部署YOLOv8全流程:环境搭建、pt-onnx-rknn模型转换、C++推理代码、错误解决、优化、交叉编译第三方库

目录 1 环境搭建 2 交叉编译opencv 3 模型训练 4 模型转换 4.1 pt模型转onnx模型 4.2 onnx模型转rknn模型 4.2.1 安装rknn-toolkit 4.2.2 onn转成rknn模型 5 升级npu驱动 6 C++推理源码demo 6.1 原版demo 6.2 增加opencv读取图片的代码 7 交叉编译x264 ffmepg和op…...

泰山派RK3566移植QT,动鼠标时出现屏幕闪烁

总结&#xff1a; 交叉编译到 泰山派rk3566跑调海康摄像头的qt应用程序失败了。 X11无效窗口。 移植QT注意 屏幕分辨率不要改。改了执行QT的时候&#xff0c;framebuffer识别不出设备。 命令行安装QT-Creator sudo install 类似的指令安装Qt-Creator时&#xff0c;可能找不到编…...

一周学会Flask3 Python Web开发-post请求与参数获取

锋哥原创的Flask3 Python Web开发 Flask3视频教程&#xff1a; 2025版 Flask3 Python web开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili app.route 装饰器默认只支持get请求。假如我们要让绑定的视图函数支持其他请求方式&#xff0c;我们可以在methods属性里配置…...

Vue 3 中可读可写的计算属性(Computed Properties)的使用场景

在 Vue 3 中&#xff0c;计算属性&#xff08;Computed Properties&#xff09;是一种基于响应式依赖进行缓存的属性。它们通常用于处理复杂的逻辑&#xff0c;并且只有当依赖的响应式数据发生变化时&#xff0c;才会重新计算。计算属性非常适合用于处理模板中的复杂表达式&…...

EXCEL解决IF函数“您已为此函数输入太多个参数”的报错

IF函数的基本结构是IF(条件, 值为真时的结果, 值为假时的结果)&#xff0c;所以标准的IF函数最多只能有三个参数。当用户输入的参数超过三个时&#xff0c;Excel就会报这个错误。比如多个IF语句叠加&#xff0c;但可能在嵌套的过程中没有正确关闭每个IF函数的括号&#xff0c;导…...

Redis7——基础篇(二)

前言&#xff1a;此篇文章系本人学习过程中记录下来的笔记&#xff0c;里面难免会有不少欠缺的地方&#xff0c;诚心期待大家多多给予指教。 基础篇&#xff1a; Redis&#xff08;一&#xff09; 接上期内容&#xff1a;上期完成了Redis环境的搭建。下面开始学习Redis常用命令…...

vue3 ref和reactive的区别

在 Vue 3 中&#xff0c;ref 和 reactive 是两种用于创建响应式数据的 API&#xff0c;但它们的使用场景和实现方式有一些区别。用大白话来说&#xff0c;它们的区别可以这样理解&#xff1a; 1. ref&#xff1a;适合处理简单数据 是什么&#xff1a;ref 是用来包装一个基本类…...

Elasticsearch7.1.1 配置密码和SSL证书

生成SSL证书 ./elasticsearch-certutil ca -out config/certs/elastic-certificates.p12 -pass 我这里没有设置ssl证书密码&#xff0c;如果需要设置密码&#xff0c;需要再配置给elasticsearch 在之前的步骤中&#xff0c;如果我们对elastic-certificates.p12 文件配置了密码…...

初识Redis

1.什么是Redis Redis是一种基于键值对&#xff08;key-value&#xff09;的NoSQL数据库。与很多键值对数据库不同的是&#xff0c;Redis中的value可以由String&#xff08;字符串&#xff09;&#xff0c;hash&#xff08;哈希&#xff09;&#xff0c;list&#xff08;列表&a…...

Python Selenium自动化操作详解:从入门到实战

Python Selenium自动化操作详解&#xff1a;从入门到实战 一、Selenium简介 Selenium是一个用于Web应用程序自动化测试的工具&#xff0c;支持多种浏览器和编程语言。结合Python使用&#xff0c;可以实现&#xff1a; 自动化表单提交动态网页数据抓取功能测试网页交互模拟 二…...

第四天面试题

文章目录 1.什么叫 Java 的内存泄露与内存溢出&#xff1f;**1. 内存泄露&#xff08;Memory Leak&#xff09;****内存泄露的常见原因&#xff1a;****如何避免内存泄露&#xff1a;** **2. 内存溢出&#xff08;Out Of Memory, OOM&#xff09;****内存溢出的常见原因&#x…...

[论文阅读] SeeSR: Towards Semantics-Aware Real-World Image Super-Resolution

文章目录 一、前言二、主要贡献三、Introduction四、Methodology4.1 Motivation &#xff1a;4.2Framework Overview.** 一、前言 通信作者是香港理工大学 & OPPO研究所的张磊教授&#xff0c;也是图像超分ISR的一个大牛了。 论文如下 SeeSR: Towards Semantics-Aware Rea…...

面试题之箭头函数和普通函数有什么区别?

箭头函数&#xff08;Arrow Function&#xff09;和普通函数&#xff08;Regular Function&#xff09;是 JavaScript 中两种不同的函数定义方式&#xff0c;它们在语法、上下文&#xff08;this&#xff09;、原型链等方面存在显著区别。以下是它们的主要区别&#xff1a; 1. …...

jQuery AJAX 方法详解

jQuery AJAX 方法详解 引言 随着互联网技术的不断发展,前端开发领域的技术也在不断更新迭代。jQuery 作为一种广泛使用的前端JavaScript库,极大地简化了DOM操作和事件处理。在众多jQuery功能中,AJAX(Asynchronous JavaScript and XML)方法尤为突出,它允许我们在不重新加…...

深度集成DeepSeek大模型:WebSocket流式聊天实现

目录 5分钟快速接入DeepSeek大模型&#xff1a;WebSocket实时聊天指南创建应用开发后端代码 (Python/Node.js)结语 5分钟快速接入DeepSeek大模型&#xff1a;WebSocket实时聊天指南 创建应用 访问DeepSeek官网 前往 DeepSeek官网。如果还没有账号&#xff0c;需要先注册一个。…...

千峰React:组件使用(1)

事件 添加点击事件 function App() {const handClick () > {console.log(123)}return (<><button onClick{handClick}>点击</button></>) } export default App在react里也可以添加事件对象e 合成e 这个e和js里的e不太一样&#xff0c;是合成的…...