找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

3736

积分

0

好友

488

主题
发表于 14 小时前 | 查看: 1| 回复: 0

你有没有过这种体验?

打开手机上的番茄钟App,准备专注学习25分钟。刚按下开始,一条微信消息弹了出来。“看一眼就好”——然后15分钟过去了,你发现自己在刷短视频。

番茄钟的敌人,从来不是时间本身,而是手机里的一切。

这正是Desk32项目想要解决的问题:既然手机上的专注工具总是被手机本身打败,那为什么不做一个独立的硬件设备

一块ESP32-S3-BOX-3、一节18650电池,不到200元,2小时组装完成——你就拥有了一个完全脱离手机的专注力工作站:番茄计时器、任务管理、天气显示、喝水提醒,全部集成在一个触屏设备上。

最关键的是:它上面没有微信,没有短视频,没有任何让你分心的东西。

Desk32成品效果图

项目概述

Desk32是一个基于ESP32-S3-BOX-3开发套件打造的智能桌面专注力设备。它将学习和工作中最需要的几个功能集成到一个独立的触屏硬件上,让你不需要打开手机就能管理时间和任务。

项目实现了以下核心功能:

  • 番茄钟计时器: 25分钟专注 + 5分钟休息的自动循环,带进度弧线动画和暂停/恢复控制
  • 动态任务管理: 通过屏幕键盘添加待办事项,支持勾选完成(划线效果)和单独删除
  • 实时天气显示: 通过WiFi连接OpenWeatherMap API,每15分钟更新一次温度和湿度
  • 喝水健康提醒: 每30分钟弹出喝水提醒界面,可一键开关
  • 日期时钟日历: NTP网络同步时间,12小时制显示,集成日历视图
  • 亮度调节: 10%~100%滑块控制,适应不同环境光线

整个设备免接线——显示模块直接卡入底座的PCIe扩展接口,18650电池续航8~10小时,真正实现桌面即放即用。

为什么不用手机App?

在介绍技术细节之前,值得思考一个问题:市面上番茄钟App那么多,为什么要做一个硬件?

项目作者Ameya Angadi给出了一个很有说服力的理由:

“Digital fatigue”(数字疲劳)不是因为工具不够好,而是因为工具和干扰源共存于同一个设备上。

方案 优点 致命缺陷
手机番茄钟App 免费、方便 和社交媒体、短视频同处一个设备,专注力随时被打断
电脑端番茄钟 屏幕大 浏览器标签页、聊天软件的诱惑近在咫尺
传统机械计时器 物理隔离 没有任务管理、没有健康提醒、功能单一
Desk32 物理隔离 + 智能功能 需要自己动手做(但这正是乐趣所在)

Desk32的核心理念是“Intent-first”(意图优先):设备上只有你需要的功能,没有任何多余的干扰。你拿起它,就是为了专注。

硬件选型解析

这个项目的硬件清单短得不像一个功能齐全的桌面设备:

硬件 数量 说明
ESP32-S3-BOX-3 1 主控,自带2.4寸触摸屏、双麦克风、扬声器
Sensor Dock底座 1 电池仓 + PCIe扩展接口
18650锂电池 1 2000-3000mAh,提供8-10小时续航

没有杜邦线、没有面包板、没有外接传感器。这可能是你见过的接线最少的ESP32项目——因为根本不需要接线。

为什么选ESP32-S3-BOX-3?

乐鑫的ESP32-S3-BOX-3是一个被很多人低估的开发套件,它为DIY项目提供了近乎“交钥匙”的硬件解决方案:

  • 2.4寸IPS触摸屏: 240x320分辨率,显示效果清晰
  • 双核ESP32-S3: 240MHz主频,跑LVGL图形界面毫无压力
  • Sensor Dock底座: PCIe x1扩展接口,一插即连,取代了传统项目中的几十根杜邦线
  • 18650电池仓: 底座内置电池座和电源管理IC,支持USB-C充电
  • 双麦克风阵列: 为未来的语音控制预留了硬件基础
  • Micro-SD卡槽: 为未来的数据持久化提供存储空间

换句话说,这不只是一个开发板——它是一个开箱即为成品外观的硬件平台。

ESP32-S3-BOX-3-DOCK引脚布局图

设备与底座结构线稿图

设备多角度结构示意图

组装过程:2小时,3步完成

第一步:安装电池

翻转Sensor Dock底座,找到18650电池仓。注意正负极方向(仓内有标注),将电池按正确方向放入。

使用2000~3000mAh的18650电池。推荐带保护板的电池,避免过放。

18650电池安装示意图

第二步:模块对接

将ESP32-S3-BOX-3显示模块对准底座顶部的PCIe扩展接口,轻轻压下直到卡扣到位。

这一步完成后,显示模块与底座之间的所有连接(电源、I2C、显示信号)就全部建立了。没有飞线,没有焊接。

首次上电如果屏幕没亮,先关再开——这是18650电池的正常保护机制。

模块与底座组装步骤图

第三步:烧录固件

这是整个项目中唯一需要花时间的步骤。

固件烧录:一步步来

环境准备

1. 安装Arduino IDE并添加ESP32开发板支持

在Arduino IDE的“开发板管理器”中搜索“ESP32”,安装乐鑫官方的ESP32开发板包。上传时选择开发板为“ESP32 S3 Box”。

2. 安装依赖库

打开Arduino IDE的“库管理器”,搜索并安装以下4个库:

库名称 作者 用途
LVGL v8.3.x Kisvegabor 图形界面引擎
ArduinoJson Benoit Blanchon 解析天气API返回的JSON数据
ESP Panel Espressif ESP32-S3-BOX-3硬件驱动
NTPClient Fabrice Weinberg 网络时间同步

3. 替换LVGL配置文件(关键步骤!)

这是很多人容易踩坑的地方。项目使用了自定义的LVGL配置,需要用项目仓库中的文件覆盖Arduino库目录下的默认文件:

从GitHub仓库下载 Files_To_Copy.zip,解压后:

  • 删除 Documents/Arduino/libraries/ 下的 lvgl 文件夹、ui 文件夹和 lv_conf.h 文件
  • 将解压得到的同名文件夹和文件复制到该目录

如果跳过这一步,编译时会报大量LVGL相关错误。

配置你的参数

打开项目代码,找到以下几行,填入你自己的信息:

const char* ssid = "你的WiFi名称";
const char* password = "你的WiFi密码";
const char* apiKey = "你的OpenWeatherMap API Key";
const char* city = "Shanghai";        // 你的城市英文名
const char* country = "CN";           // 国家代码

获取OpenWeatherMap API Key:

  1. 访问 https://openweathermap.org/ 注册免费账号
  2. 在“API keys”页面生成一个Key
  3. 免费版每分钟60次调用,项目每15分钟调用一次,完全够用

时区设置:

代码默认时区为印度(GMT+5:30)。中国用户需要修改为GMT+8

// 将原来的时区偏移量改为:
const long gmtOffset_sec = 8 * 3600;    // 东八区
const int daylightOffset_sec = 0;        // 中国不使用夏令时

上传固件

USB-C线连接电脑,Arduino IDE中选择正确的端口和开发板(ESP32 S3 Box),点击上传。等待编译和烧录完成后,设备会自动重启并显示“Desk32”启动画面。

软件架构深度解析

这个项目的代码架构很值得学习,尤其是如何在ESP32上构建一个多功能的触屏应用。

LVGL图形引擎

项目的UI完全基于LVGL(Light and Versatile Graphics Library)构建。LVGL是嵌入式领域最流行的开源GUI库,支持按钮、滑块、列表、动画等丰富的控件。

作者使用了SquareLine Studio进行可视化UI设计——这是一个LVGL官方的拖拽式设计工具,类似于嵌入式版的Figma。设计好界面后,一键导出为C代码,直接在ESP32上运行。

如果你想修改界面外观,项目仓库提供了 Desk32_Design_Files.zip,用SquareLine Studio打开即可可视化编辑,不需要手写坐标。

Desk32各功能界面展示图

番茄钟引擎

番茄钟的核心逻辑简洁高效:

主循环检测 pomoRunning 状态
→ 每1000ms递减 timeLeft
→ 更新弧形进度条 + 剩余时间标签
→ timeLeft归零时自动切换:
专注模式(25min) ↔ 休息模式(5min)
→ 休息开始时随机显示一条提示:
“去散个步”、“喝口水”、“伸个懒腰”...

这种状态机设计既简单又可靠。如果你想改成“50分钟专注+10分钟休息”的长周期模式,只需修改两个时间常量。

动态任务管理

任务管理是这个项目中最有技巧的部分。addTaskToUI() 函数展示了如何在LVGL中动态创建和管理控件:

  1. 用户通过屏幕键盘输入任务文本
  2. 函数动态创建一个包含复选框 + 删除按钮的容器
  3. 容器被添加到可滚动列表中
  4. 复选框绑定事件:勾选后文字变为划线样式(完成效果)
  5. 删除按钮绑定事件:点击后移除整个容器

这是学习LVGL动态UI构建的绝佳范例。

天气数据获取

天气模块的实现是标准的“ESP32 + RESTful API”模式:

  1. 每15分钟向OpenWeatherMap发送HTTP GET请求
  2. ArduinoJson解析返回的JSON数据
  3. 提取温度(temp)和湿度(humidity)字段
  4. 更新屏幕上的天气标签

15分钟的刷新间隔是精心选择的:既保证数据时效性,又最大限度节省电量(WiFi收发是ESP32最耗电的操作)。

喝水提醒机制

一个贴心的小功能:每30分钟触发一次喝水提醒,弹出全屏提醒界面。可在设置页面通过开关一键关闭。

实现原理很简单——主循环中维护一个30分钟的倒计时器,到时间后切换到提醒Screen,用户点击确认后返回主界面。

UI设计:SquareLine Studio入门

这个项目另一个非常值得学习的点是SquareLine Studio的使用

很多人做ESP32项目时,UI代码是最痛苦的部分——手动计算每个控件的x/y坐标、大小、颜色,改一个像素就要重新编译上传。

SquareLine Studio改变了这种工作流:

传统方式 vs SquareLine Studio

对比项 手写LVGL代码 SquareLine Studio
控件定位 手动计算像素坐标 拖拽放置
样式调整 修改代码→编译→上传→查看 实时预览
多页面管理 手动管理Screen切换 可视化页面树
动画效果 手写动画回调函数 属性面板配置
学习曲线 需要熟悉LVGL API 类似Figma的操作

SquareLine Studio的免费版支持最多5个Screen,对于这类桌面设备项目完全够用。

复刻指南

硬件获取

ESP32-S3-BOX-3套装目前在国内电商平台很容易买到。

时区和城市配置

前面已经提到,修改时区为东八区:

const long gmtOffset_sec = 8 * 3600;
const int daylightOffset_sec = 0;

城市名改为你所在城市的英文名(OpenWeatherMap支持中国所有主要城市):

const char* city = "Beijing";     // 或 Shanghai, Shenzhen, Hangzhou 等
const char* country = "CN";

OpenWeatherMap在国内的访问

OpenWeatherMap的API在国内可以正常访问(不同于很多海外网站)。注册和使用都不需要特殊网络环境。免费版完全满足本项目需求。

进阶:替换为国内天气API

如果你想使用国内的天气服务,可以将OpenWeatherMap替换为和风天气(QWeather)

可以怎么改进?

这个开源项目的协议是GPL v3,鼓励修改和二次开发。以下是一些值得尝试的方向:

实用改进:

  • 修改番茄钟时长(改成你习惯的专注/休息节奏)
  • 增加久坐提醒(每小时提醒站起来活动)
  • 任务数据保存到SD卡(目前断电后任务会丢失)

进阶挑战:

  • 利用BOX-3的双麦克风阵列,接入ESP-SR语音识别框架,实现语音添加任务
  • 接入国内智能家居平台(如HomeAssistant、涂鸦智能),实现联动控制
  • 增加环境传感器数据显示(温湿度、CO2、光照)

界面美化:

  • 用SquareLine Studio重新设计UI主题(比如暗色模式、像素风格等)
  • 添加开屏动画或自定义壁纸

适合谁?

适合 不太适合
想学习ESP32触屏应用开发的Maker 只想用成品、不愿折腾的用户
考研/考公/备考需要专注工具的学生 已经有很好的时间管理习惯的人
想入门LVGL和SquareLine Studio的开发者 对硬件完全零基础的纯软件用户
想做桌面智能设备但不想焊接的人 需要复杂日程管理(日历同步等)的人
送给朋友的有心意的DIY礼物 追求极致颜值的产品级要求

结论

Desk32不是一个多么复杂的项目——硬件只有两个零件(BOX-3 + 电池),代码刷进去就能用。

但它解决了一个真实而普遍的问题:我们的手机太擅长分散注意力了,以至于连“帮你专注”的App都成了分心的入口。

用硬件隔离干扰,这个思路本身就很有启发性。

而且这个项目是学习ESP32触屏开发的绝佳起点:LVGL图形库、SquareLine Studio可视化设计、WiFi API调用NTP时间同步、动态UI管理——这些技能组合起来,你可以做出任何你想要的桌面智能设备。

从专注力工具到天气站,从智能家居控制面板到迷你信息看板——ESP32-S3-BOX-3这块小屏幕的可能性,远比你想象的多。

项目原文:https://www.hackster.io/Ameya_Angadi/desk32-the-ultimate-diy-smart-desk-hub-for-deep-work-fe71b3

希望这个DIY项目能给你的学习和创作带来一些灵感。如果你有更多关于硬件开发或时间管理的心得,欢迎到 云栈社区 与更多开发者交流分享。




上一篇:深度拆解 Anthropic Claude Skills 白皮书:架构设计与实战模式精讲
下一篇:Oxfmt Beta发布:由Rust驱动的前端代码格式化新工具,获尤雨溪背书
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2026-2-26 19:09 , Processed in 0.489862 second(s), 42 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2026 云栈社区.

快速回复 返回顶部 返回列表