Skip to content

Commit 82ea0e3

Browse files
author
Paul356
committed
Add one post on the esp32-alarm project
1 parent 0fe126a commit 82ea0e3

File tree

6 files changed

+235
-0
lines changed

6 files changed

+235
-0
lines changed

_org/2025-05-08-health-alarm.org

Lines changed: 114 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,114 @@
1+
#+OPTIONS: ^:nil
2+
#+BEGIN_EXPORT html
3+
---
4+
layout: default
5+
title: 生活极客系列 - 运动提醒闹钟
6+
tags: [ESP32, Alarm, Rust]
7+
nav_order: {{ page.date }}
8+
sync_wexin: 1
9+
---
10+
#+END_EXPORT
11+
12+
* 生活极客系列 - 运动提醒闹钟
13+
14+
** 前言
15+
16+
有读者和我反馈,这个公号的文章技术性太强了,让人看不下去。为了让文章更有趣一些,我决定开创一个《生活极客系列》,介绍一些在生活中应用的小项目。今天这个项目是源于最近如果坐久了,感觉有点腰酸背疼,所以想要做一个提醒用户定时起来活动一下的小闹钟。
17+
18+
[[/images/esp32-alarm-outlook.jpg]]
19+
20+
** 运动提醒闹钟
21+
22+
*** 功能
23+
24+
这个闹钟功能很简单,就是正点时提醒使用者起来走一走,然后正点过10分钟再提醒使用者可以回座位上继续工作或学习。
25+
26+
*** 需要的材料
27+
28+
实现这个闹钟需要准备一个ESP32开发板,两根导线,一个无源蜂鸣器。也可以使用ESP32-S3开发板,只需要调整.cargo/config.toml中的配置项就可以了。网上可以买到蜂鸣器分有源的和无源两种,最好买无源的,可以通过输出信号调节频率。有源的蜂鸣器只支持固定的频率。
29+
30+
[[/images/esp32-alarm-materials.jpg]]
31+
32+
*** 编写软件
33+
34+
我还是使用VS Code加Copilot Plugin来编写代码。我给Copliot的初始需求如下。
35+
36+
#+begin_src txt
37+
你好。我想基于ESP32制作一个闹钟,你能帮我完成这个项目吗?我的计划是使用ESP32开发板和蜂鸣器。ESP32开发板会连接到本地WiFi网络,其SSID和密码通过宏定义传入,即env!("WIFI_SSID")和env!("WIFI_PASS")。这个系统会每小时通过NTP协议同步一次时间,并在每个整点触发蜂鸣器提醒用户。请生成合适的代码并尝试编译,我稍后会提供具体的编译步骤。
38+
#+end_src
39+
40+
Copilot很快生成了代码,我然后再让Copilot做了一些调整,中间过程我这里省略了,最后我让Copliot总结了输出代码的结构。
41+
42+
#+begin_src txt
43+
ESP32闹钟项目总结
44+
45+
我已帮你完成了一个功能完善的基于ESP32的闹钟,具备以下特性:
46+
已实现的核心功能
47+
48+
​​WiFi连接​​
49+
通过环境变量提供的凭证连接本地WiFi网络
50+
每30秒自动监测连接状态
51+
连接中断时自动重连
52+
53+
​​NTP时间同步​​
54+
启动时与NTP服务器同步时间
55+
每小时定期同步以保持时间精确
56+
57+
​​整点报时系统​​
58+
每个整点触发闹钟
59+
通过专用消息通道向蜂鸣器线程发送控制指令
60+
61+
​​蜂鸣器控制​​
62+
采用独立线程确保稳定运行
63+
支持消息通道控制(播放闹铃、设置频率、停止指令)
64+
运行时频率可调(默认2000Hz)
65+
可配置的闹铃模式参数包括:
66+
单次循环的蜂鸣次数
67+
每次蜂鸣的持续时间
68+
蜂鸣间与循环间的间隔
69+
模式重复次数
70+
71+
技术实现细节
72+
73+
​​线程通信​​
74+
使用mpsc通道进行线程间通信
75+
通过Arc<Mutex<>>实现线程安全的频率调整
76+
77+
​​WiFi管理​​
78+
正确初始化ESP-IDF WiFi驱动
79+
实时监测连接状态
80+
包含错误处理的自动重连机制
81+
82+
​​时间处理​​
83+
解析时间至时/分/秒
84+
记录当前小时避免重复触发闹钟
85+
定期输出时间日志
86+
87+
​​蜂鸣器控制系统​​
88+
基于精确计算的时序生成目标频率
89+
主程序终止时可安全关闭线程
90+
91+
代码已通过所有依赖项的编译,随时可烧录至ESP32设备。
92+
#+end_src
93+
94+
到这个时候程序已经实现了基本功能,我又让Copliot简化一些地方。最后我手动增加了过10分钟的提醒,另外调整了蜂鸣器提醒的次数,正点时响的次数等于对应的小时数。还调整了整点闹钟和10分钟闹钟的频率,以区分是整点还是整点过10分钟。还限制了闹钟的时间,只在7:00到23:10之间会触发闹钟。相关的代码如下。
95+
96+
完整的代码可以在[[https://github.com/paul356/esp32-alarm][esp32-alarm]]代码仓库找到。编译环境准备可以参考[[https://paul356.github.io/2024/11/11/rust-on-esp-series_1.html][准备开发环境]]。下面连接蜂鸣器和开发板,蜂鸣器的正极连接GPIO5,负极连接GND。
97+
98+
[[/images/esp32-alarm-wiring.jpg]]
99+
100+
进入Rust on ESP环境,使用命令 ~env WIFI_SSID=<ssid> WIFI_PASS=<pass> cargo espflash flash -p /dev/ttyUSB0~ 编译和上传固件,闹钟就开始运行了。可以通过 ~cargo espflash monitor -p /dev/ttyUSB0~ 查看日志来确认程序是否运行正常。
101+
102+
*** 3D打印外壳
103+
104+
我还使用FreeCAD做了一个简单外壳,3D模型如下。这个外壳适用于的26.7mm X 50.1mm的esp32开发板,模型文件我也加到了代码仓库里。没有3D打印机,也没有关系,只要将连线牢固地连接起来就可以了。
105+
106+
[[/images/esp32-alarm-3d-box.jpg]]
107+
108+
** 总结
109+
110+
我们只要仔细观察和思考,使用MCU可以实现很多方便生活的小玩意。今天的项目就到这里,如果你也有这方面的奇思妙想,欢迎大家留言交流。
111+
112+
** 链接
113+
1. esp32-alarm - https://github.com/paul356/esp32-alarm
114+
2. 准备开发环境 - https://paul356.github.io/2024/11/11/rust-on-esp-series_1.html

_posts/2025-05-08-health-alarm.md

Lines changed: 121 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,121 @@
1+
---
2+
layout: default
3+
title: 生活极客系列 - 运动提醒闹钟
4+
tags: [ESP32, Alarm, Rust]
5+
nav_order: {{ page.date }}
6+
sync_wexin: 1
7+
---
8+
9+
10+
# 生活极客系列 - 运动提醒闹钟
11+
12+
13+
## 前言
14+
15+
有读者和我反馈,这个公号的文章技术性太强了,让人看不下去。为了让文章更有趣一些,我决定开创一个《生活极客系列》,介绍一些在生活中应用的小项目。今天这个项目是源于最近如果坐久了,感觉有点腰酸背疼,所以想要做一个提醒用户定时起来活动一下的小闹钟。
16+
17+
![img](/images/esp32-alarm-outlook.jpg)
18+
19+
20+
## 运动提醒闹钟
21+
22+
23+
### 功能
24+
25+
这个闹钟功能很简单,就是正点时提醒使用者起来走一走,然后正点过10分钟再提醒使用者可以回座位上继续工作或学习。
26+
27+
28+
### 需要的材料
29+
30+
实现这个闹钟需要准备一个ESP32开发板,两根导线,一个无源蜂鸣器。也可以使用ESP32-S3开发板,只需要调整.cargo/config.toml中的配置项就可以了。网上可以买到蜂鸣器分有源的和无源两种,最好买无源的,可以通过输出信号调节频率。有源的蜂鸣器只支持固定的频率。
31+
32+
![img](/images/esp32-alarm-materials.jpg)
33+
34+
35+
### 编写软件
36+
37+
我还是使用VS Code加Copilot Plugin来编写代码。我给Copliot的初始需求如下。
38+
39+
```txt
40+
你好。我想基于ESP32制作一个闹钟,你能帮我完成这个项目吗?我的计划是使用ESP32开发板和蜂鸣器。ESP32开发板会连接到本地WiFi网络,其SSID和密码通过宏定义传入,即env!("WIFI_SSID")和env!("WIFI_PASS")。这个系统会每小时通过NTP协议同步一次时间,并在每个整点触发蜂鸣器提醒用户。请生成合适的代码并尝试编译,我稍后会提供具体的编译步骤。
41+
```
42+
43+
Copilot很快生成了代码,我然后再让Copilot做了一些调整,中间过程我这里省略了,最后我让Copliot总结了输出代码的结构。
44+
45+
```txt
46+
ESP32闹钟项目总结
47+
48+
我已帮你完成了一个功能完善的基于ESP32的闹钟,具备以下特性:
49+
已实现的核心功能
50+
51+
​​WiFi连接​​
52+
通过环境变量提供的凭证连接本地WiFi网络
53+
每30秒自动监测连接状态
54+
连接中断时自动重连
55+
56+
​​NTP时间同步​​
57+
启动时与NTP服务器同步时间
58+
每小时定期同步以保持时间精确
59+
60+
​​整点报时系统​​
61+
每个整点触发闹钟
62+
通过专用消息通道向蜂鸣器线程发送控制指令
63+
64+
​​蜂鸣器控制​​
65+
采用独立线程确保稳定运行
66+
支持消息通道控制(播放闹铃、设置频率、停止指令)
67+
运行时频率可调(默认2000Hz)
68+
可配置的闹铃模式参数包括:
69+
单次循环的蜂鸣次数
70+
每次蜂鸣的持续时间
71+
蜂鸣间与循环间的间隔
72+
模式重复次数
73+
74+
技术实现细节
75+
76+
​​线程通信​​
77+
使用mpsc通道进行线程间通信
78+
通过Arc<Mutex<>>实现线程安全的频率调整
79+
80+
​​WiFi管理​​
81+
正确初始化ESP-IDF WiFi驱动
82+
实时监测连接状态
83+
包含错误处理的自动重连机制
84+
85+
​​时间处理​​
86+
解析时间至时/分/秒
87+
记录当前小时避免重复触发闹钟
88+
定期输出时间日志
89+
90+
​​蜂鸣器控制系统​​
91+
基于精确计算的时序生成目标频率
92+
主程序终止时可安全关闭线程
93+
94+
代码已通过所有依赖项的编译,随时可烧录至ESP32设备。
95+
```
96+
97+
到这个时候程序已经实现了基本功能,我又让Copliot简化一些地方。最后我手动增加了过10分钟的提醒,另外调整了蜂鸣器提醒的次数,正点时响的次数等于对应的小时数。还调整了整点闹钟和10分钟闹钟的频率,以区分是整点还是整点过10分钟。还限制了闹钟的时间,只在7:00到23:10之间会触发闹钟。相关的代码如下。
98+
99+
完整的代码可以在[esp32-alarm](https://github.com/paul356/esp32-alarm)代码仓库找到。编译环境准备可以参考[准备开发环境](https://paul356.github.io/2024/11/11/rust-on-esp-series_1.html)。下面连接蜂鸣器和开发板,蜂鸣器的正极连接GPIO5,负极连接GND。
100+
101+
![img](/images/esp32-alarm-wiring.jpg)
102+
103+
进入Rust on ESP环境,使用命令 `env WIFI_SSID=<ssid> WIFI_PASS=<pass> cargo espflash flash -p /dev/ttyUSB0` 编译和上传固件,闹钟就开始运行了。可以通过 `cargo espflash monitor -p /dev/ttyUSB0` 查看日志来确认程序是否运行正常。
104+
105+
106+
### 3D打印外壳
107+
108+
我还使用FreeCAD做了一个简单外壳,3D模型如下。这个外壳适用于的26.7mm X 50.1mm的esp32开发板,模型文件我也加到了代码仓库里。没有3D打印机,也没有关系,只要将连线牢固地连接起来就可以了。
109+
110+
![img](/images/esp32-alarm-3d-box.jpg)
111+
112+
113+
## 总结
114+
115+
我们只要仔细观察和思考,使用MCU可以实现很多方便生活的小玩意。今天的项目就到这里,如果你也有这方面的奇思妙想,欢迎大家留言交流。
116+
117+
118+
## 链接
119+
120+
1. esp32-alarm - <https://github.com/paul356/esp32-alarm>
121+
2. 准备开发环境 - <https://paul356.github.io/2024/11/11/rust-on-esp-series_1.html>

images/esp32-alarm-3d-box.jpg

40.5 KB
Loading

images/esp32-alarm-materials.jpg

1.06 MB
Loading

images/esp32-alarm-outlook.jpg

705 KB
Loading

images/esp32-alarm-wiring.jpg

709 KB
Loading

0 commit comments

Comments
 (0)