
物联网嵌入式驱动开发硬件开发【免费下载链接】esp-iot-solutionEspressif IoT Library. IoT Device Drivers, Documentations and Solutions.项目地址https://gitcode.com/GitHub_Trending/es/esp-iot-solution点击查看免费下载导读本文围绕 esp-iot-solution 仓库中的 keyboard 键盘示例 展开系统讲解一个同时支持USB1K 回报率与BLE125Hz 回报率双模、具备全键无冲N-key Rollover扫描、40 种本地灯效与 Windows 11 动态灯效同步功能的机械键盘完整实现。读完本文你将掌握该示例的硬件组成与 GPIO 规划、软件分层结构HID 传输层 / 按键扫描 / RGB 灯效、模式组合与功耗设计以及如何通过 menuconfig 与 keymap 配置进行实际定制。项目概述与核心特性ESP-KeyBoard 是 esp-iot-solution 提供的开源键盘示例面向ESP32-S3与ESP32-H4两款芯片支持 USB / BLE 两种连接方式。其主要软件功能包括支持全键无冲N-key rollover的按键扫描支持按键扫描低功耗支持 USB 1K 回报率支持 BLE 125Hz 回报率支持 BLE 电池电量报告基于 ADC 采样支持 USB / BLE 双模切换支持本地灯效控制 40 种支持 Windows 11 动态灯效控制示例根目录位于 examples/keyboard包含 BSP板级支持包、HID 设备实现、应用主逻辑与配置文件具体目录结构如下components/esp32_s3_kbd_kit/ESP32-S3 键盘 BSPcomponents/esp32_h4_kbd_kit/ESP32-H4 键盘 BSPcomponents/lamp_array_matrix/灯阵与像素点驱动hid_device/TinyUSB 描述符配置main/应用入口、BLE HID、TinyUSB HID、HID 传输层、电源管理、电池采样与设置持久化sdkconfig.defaults及sdkconfig.defaults.esp32s3、sdkconfig.defaults.esp32h4不同芯片的默认配置硬件需求与板级支持包BSP硬件来源键盘的硬件设计已开源硬件参考与演示视频信息见 examples/keyboard/README.md。仓库中提供两个官方 BSPESP32-S3esp32_s3_kbd_kit READMEESP32-H4esp32_h4_kbd_kit README板载资源与硬件版本ESP32-S3-KBD-KIT 开发板集成ESP32-S3-WROOM-1-N4 模组WS2812 RGB LED6x15 按键扫描电路电池充放电管理BSP 只支持硬件版本V1.1如使用 V1.0 硬件需按硬件 GPIO 自行修改。V1.1 相比 V1.0 的硬件改进包括增加 32.768K 晶振BLE 连接进入 light sleep 时降低功耗待机电流约减少 2mA为 WS2812 LED 组增加总电源控制电池供电时可完全断开 WS2812 电源待机电流约减少 40mA增加电池电压检测V1.1 GPIO 定义名称状态GPIO说明ROW_IO_0 ~ ROW_IO_5维持GPIO40 / 39 / 38 / 45 / 48 / 47行扫描 GPIOCOL_IO_0 ~ COL_IO_10维持GPIO21 / 14 / 13 / 12 / 11 / 10 / 9 / 4 / 5 / 6 / 7列扫描 GPIOCOL_IO_11 ~ COL_IO_14修改GPIO17 / 3 / 18 / 8列扫描 GPIOWS2812_EN新增GPIO1WS2812 电源控制 GPIOWS2812_GPIO修改GPIO0WS2812 数据 GPIOBattery_Monitor新增GPIO2电池 ADC 采样 GPIOV1.0 版本的 GPIO 与 V1.1 的差异集中在列扫描引脚V1.0 使用 GPIO15~18与 WS2812 数据脚V1.0 为 GPIO8其余行扫描引脚一致。详细对照见 esp32_s3_kbd_kit README 中的两版引脚表。ESP32-H4 编译说明ESP32-H4 默认编译 WS2812、RGB 矩阵和电量 ADCBSP 配置见components/esp32_h4_kbd_kit。ESP32-H4-Core-V0_2 板卡使用GPIO32作为 WS2812 数据脚GPIO28 / ADC1_CH0作为电池采样脚该信息同样记录于 examples/keyboard/README.md 的编译说明小节。软件设计模式组合模式能力矩阵连接模式适用芯片本地灯效WIN11 灯效全键无冲回报率电池上报USBESP32-S3 / H4√√√1k×BLEESP32-S3 / H4√默认不开启×√125Hz√从该矩阵可以看出设计取舍USB 模式下回报率高达 1K Hz 且完整支持 Windows 11 动态灯效同步但不支持电池上报BLE 模式支持 125Hz 回报率与电池电量上报由于 Windows 11 动态灯效需要系统与设备间的高频 HID 特性通信BLE 模式下不可用因此本地灯效成为默认呈现方式但默认不开启以省电BLE 模式会在 60 秒无操作后自动熄灭背光。从源码看双模切换的实现USB 与 BLE 的差异在代码层由 HID 传输层统一抽象。main/hid_transport.c根据 NVS 中持久化的report_type选择底层实现TINYUSB_HID_REPORT调用tinyusb_hid_init()走 hid_device/tusb_config.h 与usb_descriptors描述的 TinyUSB 栈BLE_HID_REPORT调用ble_hid_init()走 NimBLE 或 Bluedroid 的 HID GATT 服务见main/ble_hid.c未知类型回退到 USB。上层按键事件通过hid_transport_keyboard_report()、hid_transport_battery_report()统一分发键盘扫描逻辑无需关心底层是 USB 还是 BLE这正是该示例分层设计的核心扫描与 HID 上报解耦。相关的hid_transport接口声明在 main/hid_transport.h。在 main/main.c 中可以看到完整初始化顺序NVS 初始化 → WS2812 初始化并清空 → 灯阵与 RGB 矩阵初始化 → 从 NVS 读取设置 → 硬件模式开关初始化 → 设置 HID 传输层 → 键盘扫描初始化 → 注册按键回调 → 创建灯效进度任务 → 启动电池 ADC。其中 BLE 模式会强制把灯效类型设为RGB_MATRIX因为 BLE 暂时不支持 Windows 11 灯效与模式矩阵描述一致。快捷按键与功能映射示例内置一组 FN 组合键方便脱离上位机直接切换模式与调节灯效组合键功能FN F1USB 模式FN F2蓝牙模式FN F10音量开关键FN F11音量 -FN F12音量 FN Home切换本地灯效颜色FN PgUP向前切换本地灯效FN PgDN向后切换本地灯效FN END切换为 W11 动态灯效FN 空格开关本地灯效FN ↑本地灯效亮度增加FN ↓本地灯效亮度减少FN ←本地灯效速度减少FN →本地灯效速度增加其中 FN F1 / FN F2 对应按键码QK_OUTPUT_USB/QK_OUTPUT_BLUETOOTH该功能由Kconfig.projbuild中的KEYBOARD_KEY_OUTPUT_SWITCH_ENABLE控制。当启用硬件模式开关时建议关闭此项避免按键与硬件开关争夺输出模式的控制权。灯效系统40 种本地灯效与 WIN11 动态灯效本地灯效本地灯效基于 RGB 矩阵实现默认支持 30 种并可持续扩展README 声称 40 种。sdkconfig.defaults中列出了默认启用的灯效例如CONFIG_ENABLE_RGB_MATRIX_TYPING_HEATMAP打字热力图CONFIG_ENABLE_RGB_MATRIX_DIGITAL_RAIN数字雨CONFIG_ENABLE_RGB_MATRIX_BREATHING呼吸灯CONFIG_ENABLE_RGB_MATRIX_SPLASH/MULTISPLASH、SOLID_SPLASH等CONFIG_ENABLE_RGB_MATRIX_CYCLE_*系列循环类灯效CONFIG_ENABLE_RGB_MATRIX_GRADIENT_*、HUE_WAVE、JELLYBEAN_RAINDROPS、PIXEL_RAIN、RAINBOW_*系列等同时sdkconfig.defaults定义了键盘矩阵与灯珠规模CONFIG_MATRIX_ROWS6、CONFIG_MATRIX_COLS156x15 扫描矩阵、CONFIG_MATRIX_LED_COUNT8282 颗 WS2812 灯珠。灯效的驱动与像素点绘制位于 components/lamp_array_matrix。WIN11 动态灯效Windows 11 动态灯效Dynamic Lighting通过 USB HID 特性报告Feature Report与系统交互。sdkconfig.defaults.esp32s3与sdkconfig.defaults.esp32h4中的注释揭示了其实现要点# Keyboard HID descriptor: 3 keyboard reports 6 lighting feature reports CONFIG_BT_NIMBLE_SVC_HID_MAX_RPTS12即 HID 描述符包含 3 个键盘报告键盘 媒体键等与 6 个灯效特性报告CONFIG_BT_NIMBLE_SVC_HID_MAX_RPTS12上限正是为容纳这些报告。同时配置提高了 NimBLE 主机任务与主任务的栈大小8192因为ble_svc_hid_params与 GATT 服务初始化会占用较多栈空间默认 4096 会溢出。功耗与低功耗设计BLE 低功耗配置main/Kconfig.projbuild提供LIGHT_SLEEP_TIMEOUT_MS默认 60000含义为“无按键多久后进入 light sleep 并关闭所有灯光”。从 main/main.c 的light_progress_task可以看到该机制的具体实现任务每 10ms 轮询一次当esp_timer_get_time() - last_time CONFIG_LIGHT_SLEEP_TIMEOUT_MS * 1000时调用rgb_matrix_set_suspend_state(true)并关闭 WS2812 电源然后vTaskSuspend挂起自身一旦有按键事件keyboard_cb回调会重新上电并恢复任务。此外sdkconfig.defaults中的关键低功耗配置包括CONFIG_PM_ENABLEy启用电源管理CONFIG_FREERTOS_USE_TICKLESS_IDLEy使能 tickless idleCONFIG_ESP_MIN_CPU_FREQ_MHZ160S3/32H4CONFIG_ESP_MAX_CPU_FREQ_MHZ240S3/96H4CONFIG_BT_CTRL_MODEM_SLEEPy、CONFIG_ESP_PHY_MAC_BB_PDy蓝牙控制器 modem sleep 与射频断电H4 的sdkconfig.defaults.esp32h4还进一步配置了CONFIG_PM_POWER_DOWN_PERIPHERAL_IN_LIGHT_SLEEPy、CONFIG_ESP_SLEEP_POWER_DOWN_FLASHy、CONFIG_RTC_CLK_SRC_EXT_CRYSy外部低速晶振配合硬件 V1.1 的 32.768K 晶振等深度睡眠省电项并以CONFIG_FREERTOS_UNICOREy将 FreeRTOS 限制在单核运行。电源管理如何随模式切换hid_transport.c中的hid_transport_configure_power()是关键点它根据当前report_type构造esp_pm_config_t只有 BLE 模式才启用light_sleep_enableUSB 模式始终供电无需低功耗调度。CPU 频率上下限取自CONFIG_ESP_MAX_CPU_FREQ_MHZ/CONFIG_ESP_MIN_CPU_FREQ_MHZH4 默认上下限分别为 96MHz / 32MHz远低于 S3 的 240MHz / 160MHz以换取更长的无线续航。电池电量上报BLE 模式支持电池电量上报基于 ADC 采样实现。相关代码位于 main/battery_adc.c由CONFIG_KEYBOARD_BATTERY_ADC_ENABLE开关控制S3 默认开启H4 默认关闭因为 H4 的电池 ADC 校准尚未启用。电池容量估算采用电阻分压电路采样值经过估算后通过hid_transport_battery_report()走 BLE 的 Battery Service 上报给主机见 main/hid_transport.c。针对 ESP-IDF 6.x / ESP32-H4 的适配仓库在main/idf_component.yml中通过override_path引用内置的adc_battery_estimation源码按芯片自动选择SOC_ADC_DIGI_*或SOC_ADC_RTC_*位宽宏修复了新芯片上SOC_ADC_RTC_*BITWIDTH undeclared的编译错误。定制指南QA如何修改本地灯效使用idf.py menuconfig在(Top) → Component config → rgb matrix中启用或关闭相关灯效。对应的配置项形如CONFIG_ENABLE_RGB_MATRIX_*可参考sdkconfig.defaults中的默认清单也可以通过快捷键 FN PgUP / PgDN 在已启用的灯效间前后切换。如何修改按键映射按键映射定义在 BSP 的keymap.h中ESP32-S3keymap.hESP32-H4keymap.hkeymap 采用与 QMK 相近的键码体系keycodes.h、quantum_keycodes.h等头文件位于 BSP 的include/bsp/下修改键位只需调整矩阵行列与键码的映射关系。其他可配置项main/Kconfig.projbuild中还可以调整TUSB_VID/TUSB_PID/TUSB_MANUFACTURER/TUSB_PRODUCTUSB 设备标识默认 VID 0x303A、PID 0x8000厂商 EspressifLIGHT_SLEEP_TIMEOUT_MS无按键进入 light sleep 并关灯的超时默认 60000msKEYBOARD_BATTERY_ADC_ENABLE是否启用电池 ADC 监控与 BLE 电量上报KEYBOARD_KEY_OUTPUT_SWITCH_ENABLE是否允许按键码切换输出模式硬件模式开关仅 H4KEYBOARD_HW_MODE_SWITCH_ENABLEGPIO13/14左档 BLE、中间 USB、其余回退 USB、KEYBOARD_HW_MODE_GPIO_INTERNAL_PULLUP等构建与运行示例支持 ESP-IDF 5.x 与 6.x。特别地led_strip依赖按 IDF 版本区分ESP-IDF 6.0 使用^3.0.3修复esp_heap_caps.h/MALLOC_CAP_*编译报错不再需要本地补丁旧版本 IDF 保持^2.5.3以兼容历史版本。典型的构建流程为# 在 examples/keyboard 目录下 idf.py set-target esp32s3 # 或 esp32h4 idf.py build idf.py flash monitorESP32-S3 使用默认的sdkconfig.defaults含 USB BLE RGB 矩阵完整灯效ESP32-H4 使用sdkconfig.defaults.esp32h4BLE HID 走 NimBLE如需 Bluedroid 可在 menuconfig 中切换默认开启硬件模式开关与深度省电配置。版本演进Change Log从 examples/keyboard/README.md 的更新记录可以观察该示例的演进脉络v0.4.02026-05-21新增 ESP32-H4 BSPesp32_h4_kbd_kit并统一hid_transport传输层led_strip依赖按 IDF 版本区分≥6.0 用^3.0.3旧版用^2.5.3适配 ESP-IDF 6.x / ESP32-H4 的adc_battery_estimation位宽宏选择。v0.3.02025-08-04增加基于 ADC 的 BLE 电池电量监控与报告改进电阻分压电路的电池容量估算。v0.2.22024-11-21支持唤醒睡眠状态下的 PCremote wakeup。v0.2.12024-08-12增加消抖时间避免按键连续触发两次热力图灯效速度可跟随灯效速度调节1-4 档。v0.2.02024-08-12BLE 模式下支持灯效默认 60s 关闭键盘灯光解决灯效速度调节问题默认支持灯效增加到 30 种。许可证注意事项示例中的keyboard_rgb_matrix灯效组件来源于QMK项目采用GPL协议。如果你有基于本示例的商业产品计划建议替换该组件以免引入 GPL 传染性约束。其余部分遵循仓库的 Apache-2.0 许可各源码文件头部均有 SPDX 声明BSP 目录内含 LICENSE 文件。总结ESP-KeyBoard 示例完整展示了基于乐鑫芯片实现量产级键盘的软硬件方案6x15 扫描矩阵 全键无冲、USB/BLE 双模与统一 HID 传输层、40 种 RGB 灯效、Windows 11 动态灯效同步、ADC 电池电量上报以及一整套面向低功耗的电源管理策略。无论是作为学习 HID 协议与蓝牙 HID GATT 的参考还是作为二次开发的产品原型该示例都提供了完整可运行的代码路径与配置入口值得深入阅读 examples/keyboard 下的源码与 BSP 文档。赞分享物联网嵌入式驱动开发硬件开发【免费下载链接】esp-iot-solutionEspressif IoT Library. IoT Device Drivers, Documentations and Solutions.项目地址https://gitcode.com/GitHub_Trending/es/esp-iot-solution点击查看免费下载相关推荐ESP32 USB Host MSC OTA 实战指南基于 esp-iot-solution 实现 U 盘固件升级ESP32 USB Host MSC OTA 实战指南基于 esp iot solution 实现 U 盘固件升级 导读 本文以 examples/usb/h物联网嵌入式驱动开发硬件开发ESP-IoT-Solution键盘开发HID键盘设备实现ESP IoT Solution键盘开发HID键盘设备实现 引言为什么选择ESP32 S3构建专业级键盘 还在为传统键盘功能单一、无法自定义而烦恼吗还在物联网嵌入式驱动开发硬件开发ESP32 BLE 电池服务BAS示例实战基于 esp-iot-solution 的 GATT 外设开发指南ESP32 BLE 电池服务BAS示例实战基于 esp iot solution 的 GATT 外设开发指南 本指南以 esp iot solution物联网嵌入式驱动开发硬件开发上一篇GitHub Desktop中文汉化指南3分钟高效本地化解决方案下一篇终极指南使用bert-base-german-uncased实现德语问答系统创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考