
拒绝撞表!用 ESP32 自制开源电子墨水手表 Watchy,还支持自制表盘

今天,我们来介绍又一个炫酷的开源项目——Watchy!
这是一款基于电子墨水屏的智能手表,由 SQFMI 团队开发,完全开源(硬件和软件都获得了认证)。
如果你是 Arduino 爱好者、ESP32 发烧友,或者喜欢 DIY 可穿戴设备,这款手表绝对会让你心动。它不光能显示时间,还支持自定义表盘、WiFi 连接、蓝牙,甚至能接入天气 API。项目在 GitHub 上已经有 2.6k 星。
Watchy 的灵感来源于 Kindle 那样的电子墨水技术:低功耗、阳光下无眩光、可视角度接近 180 度。想象一下,你可以自己动手组装一个智能手表,能显示自定义的时钟、天气、步数,甚至是计算器界面!

官方文档:https://watchy.sqfmi.com/docs/getting-started
下面,我们一起来深入了解一下这个项目。
Watchy 的硬件规格
Watchy 的核心是 ESP32 微控制器,结合了电子墨水屏,分辨率 200x200 像素。
最新版本(Revision 3.0,2024 年 6 月发布)采用了 ESP32-S3FN8 芯片,支持内置 USB 串口、CDC/JTAG 调试,以及 GPIO10 充电指示。其他关键组件包括:
- 显示屏:GDEY0154D67(v3 版本)或 GDEH0154D67,SPI 接口。
- 加速计:BMA423 三轴传感器,支持步数计数和方向检测。
- RTC(实时时钟):v3 版本用外部 32KHz 晶振,早期版本如 v1.0 用 DS3231。
- 电池:3.7V 200mAh LiPo 电池,尺寸小巧(402030)。
- 其他:振动电机、触摸按钮、Micro USB 接口、PCB 天线。
手表的尺寸只有 46mm x 35.5mm x 9.5mm,重 13g,超级便携。
你可以选择直接从 Mouser、The Pi Hut 或 Crowd Supply 买到套件,配件如表带和外壳在shop.sqfmi.com有售。


补一个 YouTube 上的开箱视频:
https://www.zhihu.com/video/1991826482843111757当然你也可以选择自己设计,硬件设计文件在 GitHub 上开源(KiCAD 和 GERBER 文件),可以自己修改 PCB 或 3D 打印外壳。

3D 模型下载:https://watchy.sqfmi.com/docs/3D
组装过程简单,连接屏幕和电池,固定好即可。注意,屏幕是玻璃材质,别用力撬!如果用自定义外壳,确保 PCB 边缘光滑,避免卡住。
历史版本:从 v1.0 到 v3.0 的演进
Watchy 项目从 2019 年启动,已有多个迭代版本。早期版本(如 v1.0、v1.5、v2.0)现在被标记为“legacy”(遗留),主要是因为硬件升级和软件兼容性变化。

- v1.0 (2019):用 DS3231 RTC 和 CP2104 USB 串口。
- v1.5 (2021):换成 PCF8563 RTC。
- v2.0 (2021):继续用 PCF8563,但优化了 USB 支持。
- v3.0 (2024):大升级!ESP32-S3、外部晶振、无需额外 USB 串口芯片,支持 USB 设备模式(如 CDC、HID)。
遗留版本的组装需要手动连接屏幕和电池,并用胶带固定(新版可选)。软件设置上,用 Arduino IDE 选择对应板子版本,WiFi 配置通过“Watchy AP”热点。为什么是遗留?主要是新版更高效,但老版依然兼容现有库,如果你手头有旧硬件,别担心,文档齐全!
电池寿命
电子墨水屏的最大优势就是省电!Watchy 每 60 秒唤醒一次,检查加速计、RTC 并更新显示。纯时间显示模式下,能续航 5-7 天;如果加 WiFi 拉取天气数据,2-3 天。
影响因素包括:
- WiFi/蓝牙使用(超级耗电)。
- 频繁唤醒和显示更新。
- 加速计常开。
优化技巧:
- 用
deepSleep()让 ESP32 深度睡眠,只在 RTC 中断或按钮按下时唤醒。 - 用完 WiFi 后关掉:
WiFi.mode(WIFI_OFF)和btStop()。 - 不需要步数时,别初始化 BMA423。
- 调整更新频率,比如词钟表盘可以每小时更新一次。
通过这些小设置,电池寿命能大幅延长。大家也可以实验不同场景,分享你的优化经验!
如何创建自定义表盘
Watchy 的乐趣在于自定义!项目提供了示例表盘(如/examples/WatchFaces),可以用 Arduino IDE 轻松创建。
步骤:
- 继承 Watchy 类,重写
drawWatchFace()方法。 - 用 Adafruit GFX 库画形状、文本和位图。
- 字体:用 truetype2gfx 转换 TTF 字体成
.h文件。 - 图像:用 image2cpp 转黑白图成字节数组,调用
display.drawBitmap()。 - 测试:用 WatchySim 模拟器(Windows 上很方便)。

WatchySim: https://github.com/LeeHolmes/watchysim
示例代码:
#include <Watchy.h> //include the Watchy library
#include <Fonts/FreeMonoOblique24pt7b.h> //include any fonts you want to use
#include "settings.h" //same file as the one from 7_SEG example
class MyFirstWatchFace :public Watchy{ //inherit and extend Watchy class
public:
MyFirstWatchFace(const watchySettings& s) : Watchy(s) {}
void drawWatchFace(){ //override this method to customize how the watch face looks
display.setFont(&FreeMonoOblique24pt7b);
display.setCursor(25, 110);
if(currentTime.Hour < 10){ //use the currentTime struct to print latest time
display.print("0");
}
display.print(currentTime.Hour);
display.print(":");
if(currentTime.Minute < 10){
display.print("0");
}
display.println(currentTime.Minute);
}
};
MyFirstWatchFace m(settings); //instantiate your watchface
void setup() {
m.init(); //call init in setup
}
void loop() {
// this should never run, Watchy deep sleeps after init();
}
完成后,上传到手表。想分享?截 200x200 黑白图,上传 GitHub,拉 PR 到watchfaces.json。社区有上百个贡献表盘,等你加入!
开发库和资源
Watchy 依赖这些库(都在 Arduino 库管理器中):
- GxEPD2 + Adafruit GFX:处理显示绘图。
- DS3232RTC:RTC 时间管理。
- BMA423 API:加速计接口。
- WiFiManager:WiFi 配置。
- Arduino_JSON:解析 API 数据(如天气)。
安装简单:Arduino IDE 搜索安装。项目还支持 PlatformIO,代码主要 C/C++。GitHub 上有 293 次提交,最新库 v1.4.15(2025 年 8 月)。
常见问题
新手常见坑:
- 屏幕问题:确保 FPC 线缆插紧,用最新 GxEPD2 库。
- 组装:先钩上部卡扣,再按下;屏幕保护膜别忘撕。
- 软件:忽略 AVR 架构警告;macOS esptool 错误可以去看一下 GitHub issue。
- 单位转换:天气想用华氏度?可以参考自定义指南。
- 求助:GitHub issue 或 Discord 社区:
https://discord.gg/ZXDegGV8E7
更多细节看官方 FAQ。
Watchy 结合了 ESP32 的强大和电子墨水的节能,适合初学者入门,也能让高手玩出花样。有兴趣的小伙伴可以动手试试看了!
首发于DF创客社区,转载请注明来源信息