1 Star 1 Fork 0

JIAMING/easyio-lib-for-esp32

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
01_blink
02_ledBlink
03_easyio_led
04_GPIO_IN_OUT
05_Task
06_GPIO_INTR
07_GPIO_INTR_Queue
08_KEY
.vscode
components/easyio_lib
main
CMakeLists.txt
Makefile
README.md
sdkconfig
09_TouchPad
10_LEDc_PWM
11_ADC
12_DAC
13_MCPWM_DC_MOTOR
14_MCPWM_HALF_BRIDGE
15_MCPWM_SERVO
16_MCPWM_CAPTURE_2Timer6IO
17_PCNT_Encoder
18_RMT_IR_RX
19_RMT_IR_RX_TX
20_RMT_1WIRE_WS2812B
21_UART1_TX_RX
22_UART0_TX_RX_QUEUE
23_UART0_TX_RX_QUEUE_PATTERN
24_UART1_RS485_FLOWCON
25_I2C_TOOLS
26_I2C_MPU6050
27_I2C_AHT20
27x1_I2C_SHT30
27x2_I2C_PCF8563_RTC
28_SPI_LCD_ILI9341_9488_9481_ST7735_7789_7796_HX8357C
29_SPI_AS5047P
30_SPI_TLE5012B
31_SPI_LCD_I2C_TOUCH_CTP
32_NVS
33_FATFS_SD_CARD_VFS
34_FATFS_SD_CARD_LCD
35_JPG_LCD_DMA
35x_JPG_LCD_DMA_time
36_JPG_LCD_DMA_EFFECT
37_JPG_LCD_DMA_SD_PHOTO_ALBUM
38_WIFI_station
39_WIFI_softAP
40_WIFI_tcp_client
41_WIFI_tcp_server
42_WIFI_udp_client
43_WIFI_udp_server
44_WIFI_http_request
45_WIFI_http_request_weather_cjson
46_WIFI_http_request_weather_cjson_free_15days
47_WIFI_MQTT
48_mbedtls_sha1_md5_AES_HmacSha1_base64
49_WIFI_MQTT_Aliyun_IOT_Platform
50_WIFI_SNTP_DeepSleep
51_WIFI_Scan
52_WIFI_SmartConfig_EspTouch_AirKiss
53_Blufi
54_ETH_DHCP
easyio_lib
image
BOM_PCB_ESP32-DEV_rev0.html
Q群827686418.png
README.md
Schematic_ESP32-IOT-KIT_2022-01-16.pdf
cleanBuild.bat
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README

08_KEY

例程简介

按键驱动。使用 ESP32的GPIO中断FreeRTOS 的 Queue 消息队列,实现按键事件检测。从而控制LED任务运行状态。

使用 FreeRTOSTask,创建三个任务:

  1. led_task ,控制LED闪烁

  2. key_scan_task ,单独运行一个任务,运行按键检测(滤除按键抖动、短按、长按)

  3. key_catch_task ,去捕获按键事件,并控制LED任务状态。

使用 key.c.h 驱动模块,快速实现 按键检测 功能。可滤除按键抖动,并判断出短按、长按。

07_GPIO_INTR_Queue 只是将GPIO中断使用队列的方式去处理,并没有添加多按键事件。而 08_KEY 不止添加了多按键支持,还支持按键消抖 和 短按/长按检测。

【注意】:使用时,需要单独使用一个线程去运行按键检测任务 void key_scan(int key_num, ...)。另外再开一个任务去接收 按键消息队列,以实现对按键事件的处理。

硬件连接

LED KEY
ESP32 GPIO33 GPIO0

运行现象

  • LED闪烁。

  • 短按BOOT按键(GPIO0),LED暂停闪烁。

  • 长按BOOT按键(GPIO0),LED继续闪烁。

  • 按动 BOOT按键(GPIO0)、USR按键(GPIO27) 时,串口有调试信息输出。包含 按键GPIO序号、按键按下的时长(低电平持续时间)、按键类型(1为短按,2为长按)、系统时间 等内容,便于调试观察。

使用详解

  • 对于本代码,电路使用按键直连GND。驱动中ESP32默认开启GPIO的上拉电阻。

  • 可支持多个GPIO,只要 MAX_GPIO 足够大的话。驱动默认支持GPIO 0~36

  • 用户需要另外创建队列接收任务,接收 key_evt_queue 队列的按键事件。

  • key_evt_queue 队列接收到的消息类型为 uint32_t,其中前两个字节为 按键类型(1短按,2长按),后两个为按键gpio序号,使用时需要拆分。

  • 支持消抖、支持短按、长按识别,阈值时间可在 key.h 中修改。默认长按时间为1000ms以上。

  • void key_scan(int key_num, ...) 支持输入不定数目的GPIO通道参数,以便用一句函数实现多按键初始化。

  • 如需关闭key的信息调试开关,请将 key.h 中的 key_Dlog 设置为0。

  • 【注意】:使用时,需要单独使用一个线程去运行按键检测任务 void key_scan(int key_num, ...)。另外再开一个任务去接收 按键消息队列,以实现对按键事件的处理。

学习内容

  1. 对上节 ESP32的 GPIO中断操作FreeRTOS 的 Queue 消息队列 的综合应用。

  2. 按键软件消抖。

  3. 多按键的实现、编码。

关键函数

// 按键检测任务
void key_scan(int key_num, ...);

//按键触发事件,的队列句柄(过滤过按键抖动,存储着短按、长按信息事件)供外部应用调用。
// key_evt_queue队列接收到的消息类型为uint32_t,其中前两个字节为 按键类型(1短按,2长按),后两个为按键gpio序号,使用时需要拆分。
xQueueHandle key_evt_queue = NULL;

注意事项

  • key.h 定义了按键调试开关,不需要串口输出按键信息时,可将 key_Dlog 设置为0。

  • void key_scan(int key_num, ...) 需要一个单独的任务去运行,推荐栈空间大小不小于4096,以免栈溢出反复重启。

  • 另一个单独任务接收到的 key_evt_queue 队列数据。类型为 uint32_t,其中前两个字节为 按键类型(1短按,2长按),后两个字节为按键的GPIO序号,使用时需要拆分。

马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/jmforu/easyio-lib-for-esp32.git
git@gitee.com:jmforu/easyio-lib-for-esp32.git
jmforu
easyio-lib-for-esp32
easyio-lib-for-esp32
master

搜索帮助