☰
开源墨水屏智能手表DIY全记录:从Arduino表盘到30天续航优化
2026/10/13 14:17:01 网站建设 项目流程

这块开源墨水屏智能手表在我桌上放了快半年,前阵子整理固件时又把它完整过了一遍。说实话,市面上能买到的手表很多,但能让你从零改表盘、还能连续使用一个月不用惦记充电的并不多。它支持Arduino编程,表盘完全自定义,同时具备蓝牙、Wi-Fi、实时天气、番茄闹钟和指南针这些功能。这篇文章就是我从硬件选型、表盘实现、功能拆解到续航优化的完整复盘,适合有一定Arduino基础、想亲手做一块专属穿戴设备的玩家参考。

整个项目最吸引我的地方,不在于它有多少功能,而在于它把“智能手表”这个概念拉回到了自己手里。你不需要依赖某个厂商的表盘商店,也不需要忍受两三天一充的电力焦虑。墨水屏这一层物理特性,天然决定了它和普通OLED智能手表走的是完全不同的路线。下面我把整个项目从里到外拆开讲,尽量把每个决定背后的理由也说清楚。

1. 墨水屏手表和普通智能手表,本质上是两种东西

1.1 慢和土气,反而成了续航的王牌

墨水屏最核心的原理是双稳态显示。屏幕上的每一个黑白像素,本质上是许多带有正负电荷的微小颗粒,它们悬浮在微胶囊里。施加电场时,黑色颗粒和白色颗粒分别向上下两侧移动,画面就显示出来了。关键在于,一旦颗粒到位,撤掉电场它们也停在那里,画面不会消失。

这意味着墨水屏在显示静态内容时,几乎不消耗任何电流。一颗纽扣大小的一次性电池,都可以让一块墨水屏显示大半年。这和OLED、LCD那种“持续供电才能维持画面”的逻辑完全不同,也正是这款手表能做到长续航的物理基础。

但墨水屏不是没有代价。刷新速度慢、画面没有背光、色彩基本只有黑白灰。大部分刚接触墨水屏的人,都会觉得它“反应迟钝”,刷一下页面要闪好几下,视觉体验跟手机完全没法比。刚开始我也这么觉得,直到我把这块表戴在手上,才发现这种“慢”反而是一种优势。

手表本来就不是用来刷视频的。抬腕看时间、看天气、看今天还剩几个番茄钟,这类场景全都是低频、静态的查看操作。墨水屏恰好擅长这种事情:显示在那里,不耗电,也不用担心阳光下看不清。它不适合做动态界面,但非常适合做一块“安安静静躺在手腕上的信息面板”。

1.2 开源带来的是真正的掌控感

普通智能手表的表盘自定义,本质上是在厂商提供的模板里换壁纸、换配色,功能逻辑完全被锁死。这个墨水屏手表项目不一样,硬件原理图、固件源码、表盘绘制逻辑全部开放,你可以直接把一段代码烧进去,编译成你自己的表盘。

自己改表盘的真实体验,和换壁纸完全不是一回事。有一次我想在表盘上显示“今日目标完成百分比”,这个数字来自本地番茄钟的记录。换了普通手表,我需要等厂商在某个版本里加入这个表盘;而这个项目里,我只需要在轮询回调里读一下本地计数器,再调用一行绘制函数就能完成。

所以这个项目适合谁,我觉得标准很清晰:有一定Arduino编程经验,愿意折腾,不追求顶级工业设计;同时对数据隐私有洁癖,不想让手表厂商把健康数据传到云端。如果你只是想要一块“好用”的手表,那直接买成品会更省心;但如果你想要一块“自己长出来的手表”,那这个项目正好卡在你伸手就能够到的位置。

2. 硬件选型:屏幕、主控、电池和传感器怎么定

2.1 主控芯片:性能可以弱,睡眠必须强

很多人第一步就栽在主控选型上,总想着选一块性能最强的芯片,结果续航崩得一塌糊涂。对于墨水屏手表来说,主控最重要的指标不是算力,而是睡眠电流和唤醒机制。

我对比过几类常见方案,它们适合的场景差异很明显:

芯片典型型号无线能力典型深睡电流(参考)适用场景
ESP32-C3Wi-Fi + BLE约 5~10 µA需要直接联网拿天气、低开销
nRF52840BLE约 1 µA蓝牙优先、追求极致省电
STM32L0无,需外挂无线模块约 0.5 µA纯手表,功能足够精简

实际选型还要看一个容易被忽略的点:芯片是否支持“定时唤醒+外部事件唤醒”同时存在。如果只有定时唤醒,那按键操作就全靠轮询,用户体验会差很多。如果只有外部中断唤醒,那系统就没法定时联网更新天气。现在主流的低功耗芯片基本都支持两种唤醒源并存,但不同开发板的实际表现差距很大。

我的选择是ESP32-C3这一类带Wi-Fi的芯片,理由说出来有点朴素:它集成了Wi-Fi,不用外挂无线模块,整体电路简单很多。天气更新不需要依赖手机转发,独立性强。代价是深睡电流比蓝牙专用芯片高一截,但这部分可以用软件层面的“进入深睡时彻底断开所有外设供电”来补偿,后面功耗章节我会细算。

2.2 墨水屏怎么挑:尺寸、分辨率和驱动IC一起看

墨水屏是手表的脸面,也是整个项目最影响体验的硬件。我建议从三个尺寸段里选:1.54英寸、2.13英寸和2.9英寸。屏幕越大,显示内容越多,但表身也跟着变大,佩戴舒适度会明显下降。以我的手围来看,1.54英寸很适合做手表,2.13英寸偏大,2.9英寸更适合挂桌面小摆件。

分辨率只是参考,更重要的是驱动IC是否支持局部刷新。局部刷新意味着更新某一块区域时,不用整屏黑白翻转闪一下。不支持局部刷新的屏幕,每次更新时间都要刷新整个画面,容易造成视觉疲劳,也会加速屏幕老化。

屏幕尺寸(参考)常见分辨率刷新特点适合场景
1.54英寸200x200像素密度较高,局部刷新比大屏容易做手表首选
2.13英寸250x122宽屏比例更接近卡片信息量稍大的表盘
2.9英寸296x128显示面积大,但驱动功耗和体积都上去了桌面信息屏

接口方面尽量选SPI接口的屏,接线少、速度够用,驱动库也最成熟。千万别为了省一个IO口去买串口转接版,调试起来会让你怀疑人生。

2.3 电池与充电电路:续航不是靠堆容量

计算一块手表的理论续航很简单,用电池容量除以平均电流就行:续航小时数约等于电池容量(mAh)除以平均电流(mA)。400mAh的电池,如果整机平均电流是0.5mA,理论续航就是800小时,大概33天。

但“平均电流”四个字是魔鬼。手表不是一直在跑状态机,它大部分时间在深睡,偶尔醒一下刷新屏幕、联网、测量传感器。这些单个动作的电流差异能有上百倍,所以电池选型的关键在于:能不能用300mAh达到别人500mAh的效果。盲目塞大电池会让表壳变厚、手表变重,戴上两天就想摘下来。

充电电路我建议直接用带保护板的线性充电模块。锂电池最怕过放,保护板的低压截止功能一定要有。另外充电模块和主控之间的通信不是必须的,但至少要留一个电量检测引脚,方便固件估算剩余电量。我在实际使用时发现,电池电压的读取对低功耗设计真的很重要,很多奇怪的自动关机问题都出在电池电压波动上。

2.4 传感器:够用就行,别把手表堆成开发板

这个项目的传感器其实不多:一个磁力计负责指南针,一个可选的温湿度传感器负责让天气数据显得更“现场”,加上一个蜂鸣器或震动马达来提醒番茄钟结束,基本就齐了。有些朋友还想加计步、心率、血氧,我建议第一版先忍住,把核心跑通再加。

磁力计选择方面,低功耗I2C接口的型号都行,重点看待机电流是不是微安级别。如果传感器的供电直接从GPIO拉,那待机电流再高一点也没关系,因为不用时直接把电源引脚拉低,相当于整个传感器完全断电。

按键至少要有两个,一个用于切换表盘,一个用于确认/启动番茄钟。按键一定要接到主控的外部中断引脚上,不能让系统在主循环里去轮询按键状态,否则深睡模式退不出,续航会直线下降。

3. 表盘自定义的Arduino实现:把手机界面思维扔一边

3.1 墨水屏表盘的设计规则

第一次画表盘的时候,我犯过一个典型错误:把手机通知栏的布局直接搬到了墨水屏上。结果显示出来的画面又挤又乱,刷新一次要闪好几下,肉眼可见地难受。墨水屏的设计逻辑和手机完全不同,核心原则可以归纳成三条。

第一条是信息极简主义。一块1.54英寸的黑白屏,塞不下超过5个信息块。我的建议是表盘上同时最多显示时间、日期、温度和电量这几个元素,再多就糊了。第二条是减少刷新次数。动画在墨水屏上是奢饰品,秒针跳动这种事情会让屏幕每秒钟都刷新一次,既伤电又伤屏。第三条是留白。黑白灰的视觉语言本身就很吃排版,把边距拉开、字体分级做好,整体质感一下子就上来了。

我最终的表盘思路是:数字时间放在左上大字号显示,日期和星期放在右下角,电量做成一条细条放在底部,天气温度用一个小图标加数字放在右上。整个表盘的信息密度不高,但一眼扫过去什么都清楚。

3.2 表盘代码的组织方式

表盘切换看着高大上,本质上是函数指针和结构体的组合。我习惯把每个表盘定义成一个结构体,里面包含绘制函数、刷新间隔和上次刷新时间:

struct WatchFace { void (*draw)(ScreenBuffer &buf); // 绘制函数指针 uint16_t refreshIntervalSec; // 该表盘最低刷新间隔 uint32_t lastRefreshAt; // 上次刷新时间戳 bool needsFullRefresh; // 是否必须全局刷新 }; WatchFace faces[] = { { drawDigitalClock, 60, 0, false }, { drawWeatherFace, 600, 0, false }, { drawCompassFace, 0, 0, false }, };

按键切换表盘时,只需要修改当前索引,并强制置一个全屏刷新标志。绘制函数只负责把内容画进内存缓冲区,真正把缓冲区推向屏幕的操作由底层刷新函数统一处理。这样拆的好处是,新增表盘只需要写一个绘制函数,然后在数组里加一行,不需要动任何主循环代码。

字体处理是另一个容易踩坑的点。墨水屏驱动库通常自带英文字体和基础符号,但中文字体体积很大,一个全字库字模动辄几百KB甚至上MB,单片机的Flash根本放不下。我的方案是只做英文和数字表盘,或者把中文字模单独切出来,只保留常用汉字。如果你非要显示中文,那最好的方式是做一个“中文表盘”,里面只放你实际用到的那几十个字,其他表盘不加载中文字体。

还有一个小技巧:绘制字体时尽量用系统自带的字体,U盘字库这类第三方资源虽然字体好看,但会带来版权和体积问题。免费开源的字体资源足够用,别自己造轮子。

3.3 刷新策略:什么时候全刷,什么时候局部刷

墨水屏的刷新策略直接决定续航和屏幕寿命。全局刷新会先让屏幕黑白翻转一次,再显示新内容,这个过程是“闪一下”的视觉根源。同时全局刷新时驱动芯片会施加更高的电压,频繁做对屏幕寿命有影响。

局部刷新则只更新指定的矩形区域,速度快、不闪屏,但刷新边界处容易留下残影。长期反复刷新同一块区域,那块区域就可能出现“烧印”现象。

所以正确的做法是分层刷新:秒级更新尽量避免,分钟级变化用局部刷新,小时级变化和表盘切换用全局刷新。我在固件里做了一个简单的刷新级别开关:

  • 按键触发的事件(比如打开指南针)立即执行全局刷新;
  • 每分钟更新一次“分钟数”区域,用局部刷新;
  • 每小时整点执行一次全局刷新,顺便清掉旧残影;
  • 天气数据拉回来之后,只刷新天气区域的局部画面。

这套策略跑下来,屏幕残影控制得很好,屏幕的使用寿命也能拉长。我试过不区分刷新级别,让天气图标每5分钟刷一次,结果一周后屏幕上就留下了明显的框痕。

4. 天气、番茄钟、指南针和蓝牙Wi-Fi:功能实现里的坑

4.1 实时天气:联网频率才是续航杀手

天气功能看似简单,真正做进去才发现它是一个“电量吞噬兽”。问题不在解析天气数据的逻辑,而在Wi-Fi连接本身。芯片连接路由器和发起HTTPS请求的瞬间,电流峰值能到100mA以上,一次请求持续两三秒,换算成电耗就是零点几毫安时。听起来不多,但如果手表每小时都自动刷一次,一天下来天气功能就要吃掉好几毫安时,比基础深睡功耗高了一个数量级。

我的实现方式是做一个固定节奏的天气更新任务:默认每两小时同步一次,过了当地时间晚上九点就自动降级为六小时一次,因为深夜看天气的概率很低。每次请求成功后,把天气数据存进本地变量并显示“上次更新 xx:xx”。如果网络请求失败,不立即重试,而是等下一个周期再说。弱网环境下连续重试三次,电量消耗会非常可怕,这是我在室外实地使用中踩过的坑。

天气数据源方面,找一个免费开放接口就行,但注意协议尽量选简单的。MCU上跑完整JSON解析是可行的,但内存占用和解析耗时都不小。我试过一个轻量做法:让接口返回精简字段,在手表端只解析温度、天气编码、更新时间戳这几个字段。天气编码用来映射本地预存的天气图标,不需要下载任何图片资源。

4.2 番茄钟:别用millis()硬扛25分钟

番茄钟功能逻辑上很简单:25分钟专注,5分钟休息,到点提醒。但在低功耗手表上,问题远没这么简单。因为手表不能在25分钟里一直跑着主循环等待计时结束,那样平均电流会飙升到好几毫安,手表一天都撑不住。

正确的姿势是让系统进入深睡,然后设置一个RTC闹钟在25分钟后唤醒。主控深睡,RTC走自己的晶振,到点触发中断,系统被唤醒后立即启动提示音和震动,并在屏幕上显示“番茄完成”的状态。这样整个番茄钟过程的功耗几乎可以忽略。

具体实现上,我选了一个带闹钟功能的外部RTC模块,它和MCU之间走I2C。启动番茄钟时,把当前时间加上25分钟写入闹钟寄存器,然后调用深度睡眠指令。到点之后,RTC拉高中断引脚,MCU从这个引脚唤醒。这里有一个细节:一定要选择支持“可屏蔽中断”的RTC,否则闹钟触发后MCU醒过来,读完时间就立刻又睡,提示音都没来得及响。

4.3 指南针:磁力计不是插上就能用

磁力计本身只是输出三轴的磁场分量,要变成方位角,得经过校准。最简单的方式是把手表水平放在桌上,利用X轴和Y轴的磁场分量求反正切:方向角 = atan2(Y, X),换算成角度。如果手表不是水平的,那还需要加速度计来做倾斜补偿,算法复杂度和校正难度都会上一个台阶。

如果你只是想做一个“大致能用”的指南针,可以先做两步校准。第一步是硬铁校准:拿着手表在空中画几个完整的8字,让磁力计遍历各个方向,然后采集X和Y轴的最大最小值,计算偏移量和缩放系数。第二步是安装位置排查:手表外壳里的螺丝、表带上的磁扣、电池本身,都会附加磁场干扰。

我第一次装好的时候,指南针指向偏了差不多20度,排查了很久才发现是表带磁扣距离磁力计太近了。换掉磁扣之后,误差立刻恢复正常。所以前期设计阶段就要把磁力计的安装位置尽量远离电池和金属件,否则代码再怎么校准都救不回来。显示上我建议只显示一个指向箭头和角度数字,不要做那种需要平滑转动的罗盘盘面,墨水屏的刷新率扛不住高频率的旋转变换。

4.4 蓝牙与Wi-Fi:按需连接比一直在线更健康

这块手表同时具备蓝牙和Wi-Fi,但它和手机智能手表最大的不同,是可以自由选择什么时候连接、什么时候彻底断开。我长期使用的策略是:平时两个无线模块全部关闭,MCU进入深睡。只有两种场景会短暂唤醒无线。

第一种是定时天气更新,手表自己打开Wi-Fi,连上路由器,拉取天气,立刻关闭。整个过程大约3秒,做完接着睡。第二种是手动换表盘或同步配置,这时我打开手机App向手表发起BLE广播,手表被BLE事件唤醒,完成数据传输后迅速关闭蓝牙。其他时间蓝牙不要常开,因为BLE器件即使什么都不传,只要维持连接和广播,电流就是毫安级别的,一天的累计电量相当可观。

什么场景下可以接受蓝牙常开?如果你确实需要手表接收手机来电或消息通知,那蓝牙常开是值得的,但续航预期要主动降低。从我的实测来看,开启蓝牙常开之后,整机平均电流会从0.5mA跳到2mA以上,续航从30天缩水到一周左右。鱼和熊掌不可兼得,选择权在自己手里。

5. 30天续航是怎么算出来的:功耗账和代码级优化

5.1 先把功耗测出来,再谈优化

很多人做低功耗设备一上来就晒代码,但我的经验是第一步永远是测电流。没有测量数据,所有优化都是瞎猜。测量工具方面,我建议准备一个能测微安级别的万用表,或者一个USB电流计。但普通万用表在测深睡电流时会遇到一个问题:MCU从深睡到唤醒的瞬间,电流从几微安跳到几十毫安,万用表的采样率跟不上,测出的平均电流会失真。

更靠谱的办法是用示波器或者记录型电流探头,但一般玩家不一定有这个条件。退而求其次,可以把供电串一个小阻值采样电阻,用普通示波器看电阻两端的电压波形,也能大致估算出峰值电流和持续时间。

测量前还有一个必须做的动作:把USB转串口芯片的供电断开。很多开发板上的串口芯片并不参与手表的逻辑,但它只要上电就在那里跑着,电流可能比整个手表深睡电流还大。我当时用开发板直接调试,结果深睡电流怎么都降不到微安级别,折腾半天才发现是串口芯片在偷电。后来把板上的串口供电跳线帽拔掉,测量数据才恢复正常。

5.2 各关键模块的功耗参考值

我整理了一份自己实测的参考数据,不同元件型号会有差异,但量级基本可以参考:

模块/状态典型电流备注
MCU深睡(含RTC)5~10 µA基础底噪,好芯片能到1µA以下
墨水屏静态保持约 0 µA双稳态特性,不刷新不耗电
墨水屏全屏刷新一次20~50 mA,持续约1秒换算后约0.01mAh级别
温湿度/磁力计单次测量约 1 mA,持续几十毫秒单次可忽略
BLE连接事件5~30 mA,持续若干毫秒频繁连接是大头
Wi-Fi连接并请求80~150 mA,持续2~3秒每次约0.02~0.12mAh

从这张表可以看出,真正吃掉续航的大头不是屏幕刷新,而是无线连接。Wi-Fi每次动作的绝对值不算大,但它会把“一天要拉多少次数据”这个问题放大。如果天气每小时更新一次,一天12次,每次0.08mAh,一天就是接近1mAh,加上基础功耗,已经占去一周预算里不小的一块。

5.3 我的实测续航数据和结论

我做过几组完整的场景测试,结果很说明问题:

使用场景整机平均电流(参考)400mAh电池预期续航
只显示时间,每小时自动刷新约0.2 mA约80天
每小时更新天气,每天手动看指南针约0.5 mA约33天
蓝牙常开,每5分钟同步手机约2.5 mA约6天
全功能开启,频繁操作表盘约1.2 mA约13天

所以“30天续航”严格来说是一个使用场景条件。它的默认配置是:没有蓝牙常开,Wi-Fi每两小时才连一次,表盘以分钟级局部刷新为主,用户没有频繁手动唤醒。只有理解了这层前提,你才不会在装完之后因为续航不够而大失所望。

5.4 代码级省电技巧清单

关于代码优化,我总结出几条可以直接照搬的经验。第一条,让传感器电源可控。给每一个传感器的VCC接一个GPIO控制的MOS管或者直接用GPIO供电,不用时直接断电,这是最粗暴也最有效的省电方式。第二条,用外部中断代替轮询。按键也好,RTC闹钟也好,尽量通过中断触发,主循环只保留一个sleep等待。第三条,关闭调试串口和板载LED。开发板上的LED默认是接在某个GPIO上的,如果不拔掉跳帽,它每次唤醒都会闪一下,电流累积起来也很可观。第四条,降低无效刷新。天气数据和本地时间如果没变化,就不需要去刷新同一个画面。

另外还有一个容易被忽略的点:把MCU的工作频率适当降低。墨水屏刷新和I2C通信都不需要高主频,频率降低后,唤醒期间的整体功耗会明显减小。省下的时间不多,但积少成多。我实测把主频从160MHz降到80MHz,平均电流大约降了10%,而显示和刷新速度几乎感觉不到差异。

6. 从散装元件到戴出门:组装、烧录和容易翻车的地方

6.1 接线顺序与供电结构

组装阶段的建议是先搭供电,再插屏幕和传感器。电池接充电板,充电板输出接主控板的电源输入,所有模块共地。墨水屏的连接除了SPI数据线,还必须要接BUSY引脚,驱动库在刷屏前要检查BUSY电平,不接会导致刷新时序错乱。

我用的引脚分配是一个参考,实际以自己主控的引脚功能为准:

外设/引脚示例GPIO说明
墨水屏 CSGPIO5SPI片选,低有效
墨水屏 DCGPIO10数据/命令切换
墨水屏 BUSYGPIO4驱动忙检测,必须接
墨水屏 RSTGPIO9屏幕复位
磁力计 SDAGPIO6I2C数据
磁力计 SCLGPIO7I2C时钟
按键1(切换表盘)GPIO0外部中断唤醒
按键2(确认/番茄钟)GPIO1外部中断唤醒

供电上有一个高发问题:部分墨水屏模块的VDD引脚如果直接接5V,屏幕会变红甚至烧坏。一定先确认屏的工作电压是3.3V再接线。I2C的SDA和SCL上拉电阻也要接3.3V,不要接到主控的5V引脚上,否则传感器可能工作不稳定。

6.2 烧录与调试环境

Arduino框架开发这款手表相对省力。先在Arduino IDE的开发板管理器里添加对应主控的开发板支持包,然后在库管理器里搜索墨水屏驱动、RTC驱动和磁力计驱动,逐个安装。如果烧录失败,很多情况下是因为没有进入下载模式。按住主控上的BOOT键再插USB线,出现可识别的串口设备后再尝试烧录,通常就能解决。

调试阶段我有一个强烈建议:先在开发板上把功能全部调通,再做小型化和手表外壳。直接在最终焊接的电路板上调试,一旦遇到问题,排线、短路、虚焊多重因素混在一起,很难定位。开发板上跑通之后,再做第二块精简版移植,这样能省下大把时间。

6.3 我踩过的几次翻车现场

第一个坑是屏幕花屏。第一次通电,屏幕上全是均匀的杂点。后来排查发现是SPI时序频率太高,主控默认跑得太快,屏幕驱动跟不上。把SPI时钟从8MHz降到4MHz,杂点立刻消失。如果你的屏幕偶尔刷新不正常,第一步就检查SPI频率。

第二个坑是局部刷新的残影叠加。用了局部刷新功能后,屏幕上的数字会一层层叠上去,越来越重。解决方法是固定每5次局部刷新之后就强制一次全局刷新,把残影清干净。这属于墨水屏常见问题,不是驱动库有问题。

第三个坑是“电量掉得莫名其妙”。我在组装完成后测到平均电流有2mA多,远高于预期,一节电池两三天就见底。最后一行一行排查代码,发现是主循环里有一个不影响功能的日志打印函数,每次唤醒都往串口写字符串。串口外设一打开,芯片就无法进入最深的睡眠模式。把调试日志全部用宏开关包起来之后,深睡电流才算恢复正常。

第四个坑是震动马达不工作。直接用GPIO推一个小马达,结果驱动电流不足,马达只发出很轻的嗡声。后来在GPIO和马达之间加了一个NPN三极管做开关,用外部电源给马达供电,问题才解决。凡是电流需求超过20mA的外设,都不要直接拿GPIO怼,这是基本常识,但新手特别容易忽视。

6.4 外观与佩戴的小建议

最后聊一点外观。3D打印一个表壳是最常见的方案,如果你没有打印机,直接用热缩管把电路板裹起来塞进旧表壳里也行。我这个项目的第二版就把电路板做成了圆形,然后用树脂整体封了个半透明壳子,视觉效果还不错。但要注意,磁力计周围尽量别用金属螺丝,否则指南针会偏移到你根本不想看它。

按键的位置也要提前考虑。表壳侧面的实体按键如果设计得太突出,戴手表时手腕一弯就会误触,半夜被唤醒然后疯狂刷新屏幕也不是没发生过。我后来把按键做成了内凹式,用笔尖才能按到,误触问题才算解决。

整个项目做下来,我最大的体会是:这块开源墨水屏手表带来的不是“多了一个功能列表”,而是一种对穿戴设备底层逻辑的理解。你会真正明白续航是怎么省出来的、表盘是怎么渲染出来的、无线模块是何时该睡何时该醒的。三周使用下来,我唯一不太满意的反而是天气图标画得不够精致,但这正是开源项目最可爱的地方——第二天我就自己重画了一版换上。如果你也想做一块戴出门不容易撞表的手表,我建议从复刻这个项目开始,然后逐步改成自己的形状。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询