ESP32蓝牙+EC11旋转编码器实现对电脑音量控制
- 其他
- 2025-08-20 16:30:01

ESP32蓝牙+EC11旋转编码器实现对电脑音量控制
✨本项目基于Arduino开发框架下功能实现。 🛠蓝牙设备添加和连接
⚡需要有带蓝牙硬件支持的电脑才能实现连接并控制,当然手机也可以连接但是不能实现对手机音量控制,
🌿以Win10系统电脑为例。在设置里面找到,添加蓝牙和其他设备🌿会搜索到ESP32-keyboard设备。 🌿已连接设备 ⛳功能介绍支持静音功能以及音量增加或减少.
按压EC11编码器,静音功能。顺时针旋转,音量+,旋钮一格,音量增加+2.逆时针旋转,音量-,旋钮一格,音量增加+2. 🌻EC11旋转编码器🌼EC11旋转编码器模块
🔰原理图
🔧接线图原理图
接线说明
🎉参照上面的原理图进行接线,滤波电容没有可以忽略。
EC11 A ---->ESP32 GPIO 22 EC11 B ---->ESP32 GPIO 23 EC11 E ---->ESP32 GPIO 19 EC11 D 和 C---->ESP32 GND 📚所需库 📌BleKeyboard库: github /T-vK/ESP32-BLE-Keyboard//需要自行前往下载并导入Arduino IDE库当中。🌾OneButton库: 🌾ESP32Encoder库: 📝代码实现 /* * * * ESP32-BLE-Keyboard: github /T-vK/ESP32-BLE-Keyboard */ #include <Arduino.h> #include "BleKeyboard.h"//需要到github下载并导入 #include "OneButton.h"//点击这里会自动打开管理库页面: http://librarymanager/All#OneButton #include <ESP32Encoder.h>//点击这里会自动打开管理库页面: http://librarymanager/All#ESP32Encoder //按键配置 #define EC11_A_PIN 22 #define EC11_B_PIN 23 #define EC11_K_PIN 19//按键引脚 //键盘名称:ESP32-BleKeyboard BleKeyboard bleKeyboard("ESP32-Keyboard", "Espressif", 100); ESP32Encoder encoder; OneButton SW(EC11_K_PIN, true); int lastEncoderValue = 0; int now_count = 0; int mode = 0; //0,1两种mode,可自行添加 bool activate = true; //按键单击回调函数 void click() { if (mode == 0) { Serial.println("Click: MUTE"); bleKeyboard.write(KEY_MEDIA_MUTE); } if (mode == 1) { Serial.println("Enter"); bleKeyboard.write(KEY_RETURN); } } //按键长按回调函数 void longclick() { if (activate) { //如果旋钮转动,则不切换状态 Serial.println("Longclick: Mode Change"); Serial.print("current mode: "); if (mode == 0) { mode = 1; Serial.println("Arrow"); return; } if (mode == 1) { mode = 0; Serial.println("Media"); return; } } activate = true; } //按键双击回调函数 void doubleclick() { if (mode == 0) { Serial.println("Doubleclick: Input test"); bleKeyboard.print("ESP32-BLEKeyboard Input Test"); } if (mode == 1) { Serial.println("Doubleclick: Input test"); bleKeyboard.print("ESP32-BLEKeyboard Input Test"); } } void setup() { Serial.begin(115200); ESP32Encoder::useInternalWeakPullResistors = UP; encoder.attachSingleEdge(EC11_A_PIN, EC11_B_PIN); pinMode(EC11_K_PIN, INPUT_PULLUP); //初始化按键事件检测 SW.attachClick(click); SW.attachDoubleClick(doubleclick); SW.attachLongPressStop(longclick); SW.setDebounceTicks(20);//滤波(ms) SW.setClickTicks(200); SW.setPressTicks(500); Serial.println("Starting BLE work"); bleKeyboard.begin(); } void loop() { SW.tick(); if (bleKeyboard.isConnected()) { if (lastEncoderValue != encoder.getCount()) { now_count = encoder.getCount(); if (now_count != lastEncoderValue) { if (!SW.isIdle()) { //检测按键是否空闲 activate = false; Serial.print("(Long_pressed)Encoder value: "); Serial.println(now_count); } else { Serial.print("Encoder value: "); Serial.println(now_count); } } if (now_count > lastEncoderValue) { if (!SW.isIdle()) { //检测按键是否空闲 if (mode == 0) {} //模式0按钮按下顺时针功能 if (mode == 1) { //模式1按钮按下顺时针功能 bleKeyboard.write(KEY_DOWN_ARROW); Serial.println("DOWN_ARROW"); } } else { if (mode == 0) { //模式0顺时针功能 bleKeyboard.write(KEY_MEDIA_VOLUME_UP); Serial.println("MEDIA_VOLUME_UP"); } if (mode == 1) { //模式1顺时针功能 bleKeyboard.write(KEY_RIGHT_ARROW); Serial.println("RIGHT_ARROW"); } } } if (now_count < lastEncoderValue) { if (!SW.isIdle()) { //检测按键是否空闲 if (mode == 0) {} //模式0按钮按下逆时针功能 if (mode == 1) { //模式1按钮按下逆时针功能 bleKeyboard.write(KEY_UP_ARROW); Serial.println("UP_ARROW"); } } else { if (mode == 0) { //模式0逆时针功能 bleKeyboard.write(KEY_MEDIA_VOLUME_DOWN); Serial.println("MEDIA_VOLUME_DOWN"); } if (mode == 1) { //模式1逆时针功能 bleKeyboard.write(KEY_LEFT_ARROW); Serial.println("LEFT_ARROW"); } } } lastEncoderValue = now_count; } } } 📋编译信息 使用 0.3.2 版本的库 ESP32-BLE-Keyboard 在文件夹: C:\Users\Administrator\Documents\Arduino\libraries\ESP32-BLE-Keyboard 使用 2.0.0 版本的库 BLE 在文件夹: C:\Users\Administrator\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.5\libraries\BLE 使用 2.0.4 版本的库 OneButton 在文件夹: C:\Users\Administrator\Documents\Arduino\libraries\OneButton 使用 0.10.1 版本的库 ESP32Encoder 在文件夹: C:\Users\Administrator\Documents\Arduino\libraries\ESP32Encoder "C:\\Users\\Administrator\\AppData\\Local\\Arduino15\\packages\\esp32\\tools\\xtensa-esp32-elf-gcc\\gcc8_4_0-esp-2021r2-patch3/bin/xtensa-esp32-elf-size" -A "d:\\arduino\\MyHexDir/ESP32_BLE_Keyboard.ino.elf" 项目使用了 1055409 字节,占用了 (80%) 程序存储空间。最大为 1310720 字节。 全局变量使用了32988字节,(10%)的动态内存,余留294692字节局部变量。最大为327680字节。ESP32蓝牙+EC11旋转编码器实现对电脑音量控制由讯客互联其他栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“ESP32蓝牙+EC11旋转编码器实现对电脑音量控制”
上一篇
浅谈Android下的注解