ESP32 倒计时
项目简介
ESP32 倒计时是一个功能丰富的智能倒计时器项目。它基于ESP32微控制器,配备OLED显示屏,支持多种倒计时模式和提醒方式,适用于学习、工作和生活中的时间管理。
主要特性
- 精确计时: 基于RTC实时时钟,确保计时准确性
- OLED显示: 128x64像素OLED屏幕,清晰显示时间信息
- 多种模式: 支持倒计时、正计时、闹钟等多种模式
- 声光提醒: 蜂鸣器声音提醒 + LED灯光提醒
- 按键操作: 简单直观的按键界面设计
- WiFi功能: 支持网络时间同步和远程控制
硬件组成
- ESP32开发板: 主控制器
- 0.96寸OLED显示屏: SSD1306驱动
- DS3231 RTC模块: 实时时钟
- 蜂鸣器: 声音提醒
- LED灯: 视觉提醒
- 按键开关: 用户交互界面
功能详解
倒计时模式
- 可设置1秒到99小时59分59秒的倒计时
- 倒计时结束时自动声光提醒
- 支持暂停、继续、重置操作
正计时模式
- 从0开始正向计时
- 适用于记录学习时间、运动时间等
- 可随时查看已用时间
闹钟模式
- 设置特定时间的提醒
- 支持多个闹钟设置
- 可选择提醒方式
WiFi功能
- 自动同步网络时间
- 支持手机APP远程控制
- 数据云端备份
使用场景
- 番茄工作法: 25分钟专注工作倒计时
- 学习计时: 记录学习时间和休息时间
- 运动计时: 健身间歇训练计时器
- 烹饪助手: 烹饪时间提醒
- 会议提醒: 重要会议倒计时提醒
源码
1
2void app_main(void)
3{
4 int ret = 0;
5
6 // 设置日志级别
7 esp_log_level_set("*", ESP_LOG_INFO);
8 //esp_log_level_set("ext_gpio", ESP_LOG_DEBUG);
9 //esp_log_level_set("app_event", ESP_LOG_DEBUG);
10 //esp_log_level_set("display", ESP_LOG_DEBUG);
11 //esp_log_level_set("wifi_station", ESP_LOG_DEBUG);
12 //esp_log_level_set("tcp_server", ESP_LOG_DEBUG);
13 //esp_log_level_set("uart_bridge", ESP_LOG_DEBUG);
14
15 ESP_LOGI(TAG, "idf-version: %s, app-version: %s", esp_get_idf_version(), APP_VERSION);
16
17 // 初始化APP事件循环, GPIO按键事件处理
18 app_event_loop_init(32, 5); // 增加队列大小到32
19
20 // 初始化板级
21 board_init();
22
23 // 初始化NVS
24 ret = nvs_flash_init();
25 if (ret == ESP_ERR_NVS_NO_FREE_PAGES || ret == ESP_ERR_NVS_NEW_VERSION_FOUND) {
26 ESP_ERROR_CHECK(nvs_flash_erase());
27 ret = nvs_flash_init();
28 }
29 ESP_ERROR_CHECK(ret);
30
31 // 初始化网络接口
32 ESP_ERROR_CHECK(esp_netif_init());
33
34 // 创建事件循环
35 ESP_ERROR_CHECK(esp_event_loop_create_default());
36
37 // 启动GPIO任务
38 ext_gpio_start();
39
40 // 设置LED闪烁模式
41 // 0x33 = 00110011,表示LED会以更快的速度闪烁
42 ext_led_flash(GPIO_SYS_LED, 0x01, 0xFFFFFFFF);
43
44 // 初始化TCP转串口桥接模块
45 ESP_ERROR_CHECK(uart_bridge_init(UART_PRIMARY)); // 使用默认配置(从NVS加载)
46
47 // 初始化WiFi Station组件,使用tcp_uart_bridge的WiFi事件回调
48 ESP_ERROR_CHECK(wifi_station_init(wifi_station_event_callback, NULL));
49
50 // 初始化命令行菜单
51 ESP_ERROR_CHECK(cli_menu_init());
52 ESP_ERROR_CHECK(cli_menu_start());
53
54 // 初始化显示模块
55 ESP_ERROR_CHECK(display_init());
56
57 // 启动显示任务
58 ESP_ERROR_CHECK(display_task_start());
59
60 // TCP服务器将通过WiFi事件回调自动启动/停止
61 // 当WiFi连接时启动TCP服务器,断开时停止TCP服务器
62
63 while (1) {
64 mdelay(1000);
65 }
66}
代码结构
1esp32-countdown/
2├── src/
3│ ├── main.cpp # 主程序
4│ ├── display.cpp # 显示控制
5│ ├── timer.cpp # 计时器逻辑
6│ ├── wifi_manager.cpp # WiFi管理
7│ └── config.h # 配置文件
8├── lib/ # 依赖库
9└── README.md # 说明文档
快速开始
- 硬件连接: 按照电路图连接各个模块
- 环境准备: 安装PlatformIO或Arduino IDE
- 库安装: 安装所需的依赖库
- 代码烧录: 编译并上传代码到ESP32
- 功能测试: 测试各个功能是否正常工作
获取源码
1git clone https://github.com/example/esp32-countdown.git
2cd esp32-countdown
扩展功能
- 加入温湿度传感器显示环境信息
- 集成语音识别进行语音控制
- 添加触摸屏提升用户体验
- 接入智能家居系统进行联动控制