免费开源,30天长续航 Arduino 编程墨水屏智能手表,可自定义表盘、支持蓝牙 Wi-Fi 连接、实时天气、番茄闹钟、指南针
原创
~
~
IoT物联网技术
2026年10月2日 19:18
北京
在小说阅读器读本章
去阅读
在公众号小说中沉浸阅读
自定义表盘、实时天气、番茄闹钟、指南针
Watchy 是一款软硬件100%开源基于乐鑫 ESP32-S3FN8 主控的电子墨水屏的智能手表,分辨率 200x200 像素,BMA423 三轴加速传感器,支持步数计数和方向检测,RTC实时时钟,振动电机、触摸按钮、Micro USB 接口、PCB 天线,内置 USB 串口、CDC/JTAG 调试,以及 GPIO10 充电指示,整体尺寸 46mm x 35.5mm x 9.5mm,重 13g,超级便携。
如果你是 Arduino 爱好者,喜欢 DIY 可穿戴设备,这款手表绝对会让你心动,除了基础的显示时间,还支持自定义表盘、WiFi 连接、蓝牙,实时天气、番茄闹钟、指南针等。
- 30天超长续航:乐鑫ESP32主控芯片优秀的睡眠管理,叠加电子墨水屏E-Paper特性,只有在刷新内容时才耗电,显示静态图像时零功耗,充一次电轻松用上好几周,甚至一个月。
- 走时极其精准:不依赖网络对时,内置一颗 DS3231 高精度实时时钟芯片,走时极其精准,而且断电后靠备用电池还能继续走。
- 传感器丰富:基于Bosch的BMA423加速度计实现步数计数、抬手亮屏
- 开源社区生态:Github上不断有新的表盘、扩展功能包,比如音乐控制、指南针。
硬件清单
主控:乐鑫ESP32-S3FN8 芯片
显示屏:GDEY0154D67 分辨率 200x200 像素,SPI 接口
加速计:BMA423 三轴传感器,支持步数计数和方向检测
RTC时钟:外部 32KHz 晶振
电池:3.7V 200mAh LiPo 电池
其他:振动电机、触摸按钮、Micro USB 接口、PCB 天线
技术架构
Watchy 为了极致省电,ESP32 主控96%的时间处于彻底的深度休眠模式状态,CPU 内核停止震荡,高速外设和高频振荡器全部断电。当外置 RTC 产生分脉冲中断触发 ext0,或者用户按下侧键触发 ext1 时,ESP32 主控才会瞬时复苏,执行十几毫秒的数据计算与显存推送,随后立刻重新钻入深度睡眠。
Watchy系统设计为三层独立职责:
时间与中断基准层:硬件采用独立的超低功耗RTC实时时钟芯片,全天候运行,平时消耗不到 1 微安电流,内部配置好每整分钟触发一次的闹钟警报,并将其中断引脚(INT)直连 ESP32 的 RTC GPIO。
交互与感知层:板载四颗侧面轻触按键,通过电阻网络映射至 ESP32 的唤醒引脚;同时集成博世 BMA423 三轴加速度计,芯片自带低功耗硬件计步算法,平时无需主控参与计算,仅在发生双击或手势时通过中断线拉低电平。
界面交互层:采用一块 1.54 英寸、200x200 px分辨率的双色电子墨水屏。电子墨水屏具有双稳态物理特性,画面刷新完毕,完全断电后仍正常显示内容。
自定义表盘开发
在 PlatformIO 中新建工程,板型选择 esp32dev(针对 v1/v2)或 esp32-s3-devkitc-1(针对 v3),引入 sqfmi/Watchy 官方依赖库。
编写自定义表盘派生类。在头文件与源文件中,从 Watchy 类继承并覆写 drawWatchFace()
#include <Watchy.h>class MinimalFace : public Watchy {public: MinimalFace() {} void drawWatchFace()override{ // 1. 清空显存缓冲区背景(白色) display.fillScreen(GxEPD_WHITE); display.setTextColor(GxEPD_BLACK); // 2. 从内置时钟对象读取时分 display.setFont(&FreeSansBold24pt7b); display.setCursor(25, 100); if (currentTime.Hour < 10) display.print(\"0\"); display.print(currentTime.Hour); display.print(\":\"); if (currentTime.Minute < 10) display.print(\"0\"); display.print(currentTime.Minute); // 3. 读取板载硬件电量与计步数 display.setFont(&FreeSans9pt7b); display.setCursor(30, 150); display.print(\"BAT: \"); display.print(getBatteryVoltage()); display.print(\"V\"); }};
在主入口声明对象并执行调度:
MinimalFace watchFace;void setup(){ // init() 内部会判断唤醒原因、调用 drawWatchFace() 并自动执行 deepSleep() watchFace.init();}void loop(){ // 永远不会执行到此处,CPU 在 setup 末尾已经入睡}
编译与烧录。将手表通过 USB-C 数据线连上电脑,编译后直接刷入 ESP32 闪存。主控上电后会自动握手 RTC 芯片,执行首次全量刷屏,随后即可断开电脑独立佩戴运行。
原理图
局部刷新与深度休眠
电子墨水屏依靠微胶囊内部带正负电荷的黑白颗粒在电场下迁移来成像。在常规走时状态下,驱动仅向显示屏控制器发送局部更新查找表波形数据,只对发生跳变的时间字符区域进行微胶囊反转,屏幕刷新过程仅 300 毫秒,且毫无肉眼可见的黑白交替闪烁。为了实现深度休眠,在 SPI 数据传输完毕后,代码必须显式向墨水屏下发 0x10 深睡眠指令,即驱动库中调用的 display.hibernate()。
3D 打印外壳
3D 外壳打印模型下载:https://watchy.sqfmi.com/docs/3D
如果你熟悉Arduino 开发,正在寻找一款长续航墨水屏智能手表,不妨关注一下Github 开源项目:sqfmi/Watchy
点个关注 🌟,精彩不迷路 ❤️
往期推荐
☞开箱即用!国产开源30+AI视觉算法IoT智能物联网云平台
☞国产开源Web 工业IoT组态软件,支持Modbus、OPC,支持拖拉拽
☞免费开源,千知AI知识图谱平台,支持DeepSeek、Qwen
☞智慧农业大爆发:AI+物联网+区块链重构“天空地”一体化监测
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。










评论