概述
本教程要求Raspberry Pi运行带有RTC模块和DS1307模块的内核。当前的Raspbian发行版具有此功能,但其他人可能没有!
Raspberry Pi被设计为一款超低成本的计算机,因此我们习惯了很多东西一台电脑被遗漏了。例如,您的笔记本电脑和计算机有一个小硬币电池供电的“实时时钟”(RTC)模块,即使关闭电源或取出电池,该模块也能保持时间。为了保持成本低和体积小,Raspberry Pi不包含RTC。相反,Pi旨在通过以太网或WiFi连接到Internet,从全局 ntp (网络时间协议)服务器自动更新时间
对于没有网络连接的独立项目,则您将无法保留电源中断的时间。因此,在此项目中,我们将向您展示如何在Pi上添加低成本的电池支持RTC以节省时间!
接线RTC
为保持低成本,Raspberry Pi不包含实时时钟模块。而是希望用户始终将其连接到WiFi或以太网,并通过检查网络来节省时间。由于我们要包含一个外部模块,因此我们必须将其连接起来。
我们建议使用三种不同的RTC,PCF8523价格便宜,DS1307最常见,DS3231最精确。
虽然我们发现DS1307历来是最常见的,但不是最好的RTC芯片组!
Adafruit PiRTC-Raspberry Pi的PCF8523实时时钟
产品ID:3386
这是一个很棒的电池支持的实时时钟(RTC),使您的Raspberry Pi项目可以在断电时跟踪时间。完美用于数据记录,时钟构建,。..
$ 5.95
入库存
添加到购物车
Adafruit PCF8523实时时钟组装式分线板
产品ID:3295
这是一个出色的电池供电实时时钟(RTC),即使重新编程,您的微控制器项目也可以跟踪时间,或断电。非常适合。..
$ 4.95
进货
添加到购物车
Adafruit DS1307实时时钟组合式分线板
产品ID:3296
这是一个出色的电池供电实时时钟(RTC),即使重新编程或断电,您的微控制器项目也可以跟踪时间。非常适合。..
缺货
缺货
Adafruit DS3231精确RTC分组
产品ID:3013
DS3231的数据表解释说,该器件是“非常精确的I²C集成RTC/TCXO/Crystal”。而且,嘿,它的作用完全一样……
$ 13.95
入库存
添加到购物车
别忘了还要安装CR1220币形电池。特别是没有它,DS1307根本无法工作,并且当Pi断开且没有硬币电池时,任何RTC都不会保留时间。
CR1220直径12毫米-3V锂纽扣电池
产品编号:380
这些是质量最高的产品,容量的电池,与iCufflinks,iNecklace,Datalogging和GPS Shields,GPS HAT等产品随附的电池相同。每笔订购一个电池。..
$ 0.95
入库
添加到购物车
接线简单:
将分支板上的 VCC 连接到Pi的 5.0V 引脚(如果使用DS1307)
连接 VCC 3.3V 引脚上的Strong》(如果使用PCF8523或DS3231)
将分支板上的 GND 连接到Pi的 3.3V 引脚。 Pi的 GND 引脚
将分支板上的 SDA 连接到Pi的 SDA 引脚
将分支板上的 SCL 连接到Pi的 SCL 引脚
设置和测试I2C
设置在您的Pi上设置I2C
您还需要在您的Pi上设置i2c,为此,请运行 sudo raspi-config 并在高级下》选择I2C并将其打开。
有关更多详细信息,请访问http://learn.adafruit.com/adafruits-raspberry-pi-lesson-4上有关Raspberry Pi i2c设置和测试的教程。 -gpio-setup/configuring-i2c
使用 sudo reboot
验证接线(I2C扫描)
通过运行验证接线
sudo apt-get install python-smbus i2c-tools
要安装助手软件,然后在命令行上sudo i2cdetect -y 1 ,您应该看到显示ID#68-这就是DS1307,PCF8523或DS3231的地址!
如果您使用的Pi 1较旧,则必须运行sudo i2cdetect -y 0 ,因为I2C总线地址从0更改为到1
一旦您运行了内核驱动程序,i2cdetect将跳过0x68并显示UU,这意味着它可以正常工作!
设置RTC时间
现在,我们已将模块连接好,并确认您可以使用i2cdetect看到该模块,我们可以对其进行设置。
别忘了在上一步中设置I2C!
Raspbian Jessie(系统化)
感谢kd8twg的提示!
您可以通过添加设备树覆盖来添加对RTC的支持。运行
sudo nano/boot/config.txt
以编辑pi配置并添加与您的RTC芯片匹配的文件:
dtoverlay=i2c-rtc,ds1307
或
dtoverlay=i2c-rtc,pcf8523
或
dtoverlay=i2c-rtc,ds3231
到文件末尾
保存并运行sudo reboot重新开始。登录并运行sudo i2cdetect -y 1以查看UU显示应位于0x68的位置
禁用会干扰“真实” hwclock的“假hwclock”
sudo apt-get -y remove fake-hwclock
sudo update-rc.d -f fake-hwclock remove
sudo systemctl disable fake-hwclock
现在关闭了false-hw时钟,您就可以启动原始的“硬件时钟”脚本。
运行 sudo nano/lib/udev/hwclock-set 并注释掉这三行:
#if [-e/run/systemd/system];然后
#退出0
#fi
也注释掉这两行
/sbin/hwclock --rtc=$dev --systz --badyear
和
/sbin/hwclock --rtc=$dev --systz
从Pi到RTC的同步时间
第一次插入RTC模块后,它的时间将会错误,因为必须设置一次。您始终可以使用sudo hwclock -D -r
您可以看到,最初的日期无效!您可以轻松设置正确的时间。首先运行date以验证时间是否正确。插入以太网或WiFi,使Pi从Internet同步正确的时间。完成后,运行sudo hwclock -w来 w 计算时间,运行另一个sudo hwclock -r来 r 花费时间
设置时间后,确保已插入币形电池以节省时间。您只需要设置时间一次
就可以了!下次启动时,时间将自动从RTC模块进行同步
Raspbian Wheezy或其他预先安装的Linux
首先,通过运行
sudo modprobe i2c-bcm2708
sudo modprobe i2c-dev
sudo modprobe rtc-ds1307
来加载RTC模块,以root身份运行(输入 sudo bash )
echo ds1307 0x68 》 /sys/class/i2c-adapter/i2c-1/new_device
如果您碰巧有旧的Rev 1 Pi,请输入
echo ds1307 0x68 》 /sys/class/i2c-adapter/i2c-0/new_device
然后您可以键入退出退出根shell。
然后使用检查时间sudo hwclock -r ,它将从DS1307模块读取时间。如果这是第一次使用该模块,它将在2000年1月1日返回报告,您需要设置时间
首先,您需要在Pi上设置正确的时间,最简单的方法是将其连接起来到以太网或Wifi-它会自动设置网络时间。时间正确后(使用 date 命令检查),运行 sudo hwclock -w 将系统时间写入RTC
,然后可以使用 sudo hwclock -r
接下来,您需要将RTC内核模块添加到/etc/modules列表中,以便在计算机启动时加载它。运行 sudo nano/etc/modules 并在文件末尾添加 rtc-ds1307 (下图显示rtc-1307但有错字)
杰西前辈raspbian有点不同。首先,您将需要在引导时创建DS1307设备,通过运行
sudo nano /etc/rc.local
编辑/etc/rc.local并添加:
echo ds1307 0x68 》 /sys/class/i2c-adapter/i2c-0/new_device (对于v1树莓派)
echo ds1307 0x68 》 /sys/class/i2c-adapter/i2c-1/new_device (对于v2树莓派)
sudo hwclock -s (两个版本)
在exit 0之前(我们在下面的屏幕截图中忘记了hwclock -s部分)
就是这样!下次启动时,时间将自动从RTC模块进行同步
责任编辑:wv
-
时钟
+关注
关注
10文章
1720浏览量
131346 -
树莓派
+关注
关注
116文章
1697浏览量
105510
发布评论请先 登录
相关推荐
评论