做电子时钟、定时浇水,或者给数据记录加时间戳,都需要一块掉电后还能记住时间的实时时钟芯片。DS1302便宜、走的是简单的三线串口,配上一颗纽扣电池就能长期走时。这篇文章讲接线和几个初学者容易卡住的地方。

三根线+供电,就能通信
DS1302芯片本质上用RST(也叫CE)、I/O(DAT)、SCLK这三根线完成通信。模块上一般引出VCC、GND、CLK、DAT、RST五个脚,VCC接3.3V或5V,GND共地,剩下的CLK/DAT/RST接Arduino的任意三个数字脚即可。
典型接法是:DS1302的DAT接Arduino的D4,CLK接D5,RST接D2,当然数字脚可自行在程序里改。它需要外接一颗32.768kHz晶振才能准点走时,多数成品模块已含晶振并配好CR2032纽扣电池。
那颗纽扣电池是掉电走时的关键:主电源断电后,芯片靠纽扣电池(Vcc1)维持时间,所以电池不能装反、也不能漏。这也是它比单纯软件计时靠谱的地方——关机重启时间不丢。

用库初始化,几条代码搞定
Arduino上常用RtcDS1302配合ThreeWire库。先实例化ThreeWire(IO, CLK, CE),再创建RtcDS1302对象,接着Rtc.Begin()启动,读取前先判断Rtc.IsDateTimeValid(),无效就调Rtc.SetDateTime()把时间写进去,之后每次Rtc.GetDateTime()就能读出完整的年/月/日/时/分/秒。
很多教程会把编译时间写进RTC做初次对时,也就是第一次上电自动把电脑时间灌进去,省得手输。切走时正常后,就能在loop里按时间点触发逻辑,比如到了设定时刻去开继电器、发提醒。
三个高频坑提前躲开
坑一:没装纽扣电池或电池没电,时间一断电就丢,这是“不值时”最常见的原因。
坑二:初次上电不写时间,读出来是乱七八糟的初始值。第一次务必调用SetDateTime初始化一次。
坑三:三根线的顺序接错,或和库定义不对应。改脚位时要同步改ThreeWire的参数,别只换硬件不换代码。
玩通后,做带时间戳的环境记录仪、定时喂食器、自动作息闹钟,都是既实用又能涨功力的项目。







三根线的顺序要和库里的ThreeWire参数对上,光改硬件不改代码也不行
做个定时浇水器配这个RTC,到点自动开阀,很实用
掉电不保存多半是纽扣电池没装或没电,先查这颗电池
初次上电一定要先SetDateTime写一次时间,不然读出来是乱的