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远程控制
  • 数据云端备份

使用场景

  1. 番茄工作法: 25分钟专注工作倒计时
  2. 学习计时: 记录学习时间和休息时间
  3. 运动计时: 健身间歇训练计时器
  4. 烹饪助手: 烹饪时间提醒
  5. 会议提醒: 重要会议倒计时提醒

源码

 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            # 说明文档

快速开始

  1. 硬件连接: 按照电路图连接各个模块
  2. 环境准备: 安装PlatformIO或Arduino IDE
  3. 库安装: 安装所需的依赖库
  4. 代码烧录: 编译并上传代码到ESP32
  5. 功能测试: 测试各个功能是否正常工作

获取源码

1git clone https://github.com/example/esp32-countdown.git
2cd esp32-countdown

扩展功能

  • 加入温湿度传感器显示环境信息
  • 集成语音识别进行语音控制
  • 添加触摸屏提升用户体验
  • 接入智能家居系统进行联动控制