数码之家

 找回密码
 立即注册

QQ登录

只需一步,快速开始

微信登录

微信扫一扫,快速登录

搜索
查看: 3560|回复: 15

[Arduino] 玩一下ESP32的BLE

[复制链接]
发表于 2024-4-25 11:59:20 | 显示全部楼层 |阅读模式
本帖最后由 devcang 于 2024-4-26 11:23 编辑



习惯不废话,上图先
原理框图


使用WEB做控制端



0、前言:    整体难度不大,稍理解ble、键盘、鼠标,就能用起来。
1、硬件除了ESP32模块、下载板+USB连接,不用焊接、不用连其它线


其中,如果空间不够,使用大No OTA large app模式。


2、使用的Libs有:


2.1、Mouse是 ESP32-BLE-Mouse,从github扣下来的 链接

2.2、Keyboard是 ESP32C3-BLE-Keyboard + NimBLE-Arduino,前者从github扣下来 链接,后者在arduino ide中安装。ESP32C3-BLE-Keyboard 建议使用NimBLE的,在BleKeyboard.h中有说明。


2.3、WebServer是 ESPAsyncWebServer,在arduino ide中安装。


3、控制、使用:  都是开源,带例子的,很容易上手的。又,对于键盘,也是支持字符串,和各种键盘码(头文件BleKeyboard.h中有定义),很方便;对于鼠标,无非是move、click、press、release等——注意鼠标move是相对坐标,而在android中,就多一个tap(模拟触摸)就是press、move、release
如模拟触摸:
                bleMouse.press();    //按下
                bleMouse.move(x1,- y1); //坐标,是signed char类型的,负表示往上触摸
                bleMouse.release(); //释放


要说有点麻烦的地方,是模拟触摸的move之后,要做补偿、退回去,不然就“飞”出范围了。


4、结论、结尾:  有什么用途呢,就见人见志、各显神通的了。其实,完全可以做一个蓝牙键盘、蓝牙鼠标,只是ESP32耗电较大,不适合专门做键盘、鼠标。当前的具体用途,集中在"start""stop"这个按钮中,因是不上大雅之堂的,所以不公开这代码了(弄点小恩小惠)。


谢谢观看
--------------------------------------------------------
次日补充
舍去webserver,焊接按键

//定义左、右、上、下4个按键,校正鼠标位置,和启/停一共5个按键,
#define k12_L 12
#define k13_R 13
#define k14_U 14
#define k15_D 15
#define k16_S 16
#define PIN33 33        //ESP32-CAM 的红色LED,作指示灯,注:相反电平
发现实用性强些。








本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册 微信登录

x

打赏

参与人数 2家元 +55 收起 理由
家睦 + 40
沙漠臭屁虫 + 15

查看全部打赏

发表于 2024-4-25 12:22:31 | 显示全部楼层
看不懂的路过
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-4-25 12:26:00 | 显示全部楼层

蓝牙键盘/鼠标,arduino的,搞好了库libs,打开例子,一看就明。
回复 支持 反对

使用道具 举报

发表于 2024-4-25 12:28:09 | 显示全部楼层
devcang 发表于 2024-4-25 12:26
蓝牙键盘/鼠标,arduino的,搞好了库libs,打开例子,一看就明。

太高极了不会玩,香菇
回复 支持 反对

使用道具 举报

发表于 2024-4-25 13:04:43 | 显示全部楼层

同样看不懂的撸过...

----------------------
回复 支持 反对

使用道具 举报

发表于 2024-4-25 13:44:47 | 显示全部楼层
应该是个好东西,只是我也没明白怎么个用法。不知道是不是有线键鼠改无线键鼠
回复 支持 反对

使用道具 举报

发表于 2024-4-25 18:31:28 | 显示全部楼层
能不能搞一个连接手机,把酷狗歌词通过蓝牙传出来的
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-4-26 09:59:33 | 显示全部楼层
zhonsir 发表于 2024-4-25 13:44
应该是个好东西,只是我也没明白怎么个用法。不知道是不是有线键鼠改无线键鼠 ...

文字中说得有点大拐弯、委婉了。。。。

这样的:
ESP32中,可以写程序代码的。先,手机蓝牙连接好“ESP32 Bluetooth Mouse”、打开好app的页面,再在网页上点击“start”就自动干活了——至于说干什么活,就看这程序逻辑的。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-4-26 10:01:14 | 显示全部楼层
本帖最后由 devcang 于 2024-4-26 10:02 编辑
南天音乐 发表于 2024-4-25 18:31
能不能搞一个连接手机,把酷狗歌词通过蓝牙传出来的

原理是可以的,因ESP32支持蓝牙播放(即当蓝牙音箱),所以,只要支持接收歌词,就可以获取歌曲信息、歌词。


但,可参考网易的,有lrc文件直接可以copy。(几年前的版本是这样,最新版本,未试)
回复 支持 反对

使用道具 举报

发表于 2024-4-26 11:20:56 | 显示全部楼层
用C3做过游戏手柄,还行
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-4-26 11:26:35 | 显示全部楼层
本帖最后由 devcang 于 2024-4-26 16:05 编辑

按键版的框架代码


  1. #include <BleMouse.h>
  2. BleMouse bleMouse;
  3. //定义左、右、上、下4个按键,校正鼠标位置,和启/停一共5个按键,
  4. #define k12_L 12
  5. #define k13_R 13
  6. #define k14_U 14
  7. #define k15_D 15
  8. #define k16_S 16
  9. #define PIN33 33        //ESP32-CAM 的红色LED,作指示灯,注:相反电平
  10. #define KD    30        //常数,按键“防抖”

  11. bool bStart=false;
  12. // signed char _x1, _x2, _y1, _y2; //
  13. // byte xstep=0;        //执行到哪个步骤
  14. unsigned long t1;        //控制隔多久执行一次

  15. unsigned long h1, h2, h3, h4, h5; //按键“防抖”
  16. void k12_L_ISR(){if(!bleMouse.isConnected() || millis()<h1)return; bleMouse.move(-125, 0); h1=millis()+KD; }
  17. void k13_R_ISR(){if(!bleMouse.isConnected() || millis()<h2)return; bleMouse.move(125, 0);  h2=millis()+KD; }
  18. void k14_U_ISR(){if(!bleMouse.isConnected() || millis()<h3)return; bleMouse.move(0, -125); h3=millis()+KD; }
  19. void k15_D_ISR(){if(!bleMouse.isConnected() || millis()<h4)return; bleMouse.move(0, 125);  h4=millis()+KD; }
  20. void k16_S_ISR(){if(!bleMouse.isConnected() || millis()<h5)return; bStart=!bStart; digitalWrite(PIN33, bStart?LOW:HIGH); h5=millis()+KD;}

  21. void setup(){
  22.         delay(10);
  23.         pinMode(PIN33, OUTPUT);
  24.         digitalWrite(PIN33, LOW);                // HIGH:OFF, LOW:ON,闪一下
  25.         delay(800);
  26.         digitalWrite(PIN33, HIGH);                // HIGH:OFF, LOW:ON
  27.         // Serial.begin(115200);                //需要调试,就打开串口
  28.         
  29.         pinMode(k12_L, INPUT_PULLUP);        //INPUT_PULLDOWN INPUT_PULLUP
  30.         pinMode(k13_R, INPUT_PULLUP);
  31.         pinMode(k14_U, INPUT_PULLUP);
  32.         pinMode(k15_D, INPUT_PULLUP);
  33.         pinMode(k16_S, INPUT_PULLUP);
  34.         
  35.         digitalWrite(k12_L, HIGH);                //设定初始电平
  36.         digitalWrite(k13_R, HIGH);
  37.         digitalWrite(k14_U, HIGH);
  38.         digitalWrite(k15_D, HIGH);
  39.         digitalWrite(k16_S, HIGH);
  40.         
  41.         attachInterrupt(digitalPinToInterrupt(k12_L), k12_L_ISR, FALLING);// 设置按键中断
  42.         attachInterrupt(digitalPinToInterrupt(k13_R), k13_R_ISR, FALLING);
  43.         attachInterrupt(digitalPinToInterrupt(k14_U), k14_U_ISR, FALLING);
  44.         attachInterrupt(digitalPinToInterrupt(k15_D), k15_D_ISR, FALLING);
  45.         attachInterrupt(digitalPinToInterrupt(k16_S), k16_S_ISR, FALLING);
  46.         
  47.         // Serial.println("Starting BLE work!");
  48.         bleMouse.begin();        //开始蓝牙鼠标
  49. }

  50. void loop() {
  51.         if( (!bleMouse.isConnected()) || (!bStart) || (millis()<t1) ){ return; }
  52.         
  53.         //真正的目的是这后面,暂不分享。其实代码不多就那几行,肯定和模拟触摸有关的。
  54.         // bleMouse.press();                //按下
  55.         // bleMouse.move(x1,- y1);        //坐标,是signed char类型的,负表示往上触摸
  56.         // bleMouse.release();                //释放      
复制代码







回复 支持 反对

使用道具 举报

发表于 2024-4-26 14:38:22 | 显示全部楼层
wifi关了,就省电了。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-4-29 10:21:08 | 显示全部楼层
模块别带电热插拔,一定要注意!一片ESP32-CAM忘记关电、带电热插拔,无线部分(蓝牙和WiFi)坏了,一开就低电压检测不过、关停低电压检测也无线功能不行了。其它功能应该正常,能下载程序等。
回复 支持 反对

使用道具 举报

发表于 2024-4-30 15:38:47 来自手机浏览器 | 显示全部楼层
web端好做吗?想做个记录开门次数的
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-5-1 20:52:14 | 显示全部楼层
2361656471 发表于 2024-4-30 15:38
web端好做吗?想做个记录开门次数的




好不好,看自己理解能力,了解html、一些js知识,又了解http协议的get/post,功能简单的话,很好做的,,,,


想页面不刷新,就要了解ajax,嵌入中因为容量大小而多使用browser原生的ajax组件。


回复 支持 反对

使用道具 举报

发表于 2024-5-4 14:47:02 | 显示全部楼层
2361656471 发表于 2024-4-30 15:38
web端好做吗?想做个记录开门次数的

https://randomnerdtutorials.com/esp32-web-bluetooth/

看看这个
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册 微信登录

本版积分规则

APP|手机版|小黑屋|关于我们|联系我们|法律条款|技术知识分享平台

闽公网安备35020502000485号

闽ICP备2021002735号-2

GMT+8, 2025-9-7 11:55 , Processed in 0.171600 second(s), 12 queries , Gzip On, Redis On.

Powered by Discuz!

© 2006-2025 MyDigit.Net

快速回复 返回顶部 返回列表