树莓派4b ubuntu系统加装时钟模块DS1307操作步骤(操作需联网下进行)
本文所介绍的内容树莓派4Bubuntu20.04。基于树莓派通用的 GPIO 设计,文中的原理和代码也适用于其他情况。
本节以 SAKS 扩展板为硬件基础,实现让树莓派掉电后系统时间能继续保持的功能。
DS1307模块可以在淘宝上买,几块十几块就能买到;
正确插上DS1307时钟模块如下图所示:
下面是具体的操作步骤:
一:编辑文件让系统识别时钟模块DS1307
在这个扩展板上已经有一个DS1307 RTC实时时钟模块,它是I2C类的设备,首先我们需要修改树莓派的配置文件使能I2C,通过 vi编辑器修改raspi-blacklist.conf 文件内容。
sudo vi /etc/modprobe.d/raspi-blacklist.conf
修改为如下,开启I2C功能 注意缩进
# blacklist spi and i2c by default (many users don't need them)
blacklist spi-bcm2708
blacklist i2c-bcm2708
修改内容如下图所示:
按a键编辑; Esc键退出编辑后用“:wq!”保存并退出vi编辑
打开/etc/modules ,在文件结尾加上 i2c-dev
sudo vi /etc/modules
# /etc/modules: kernel modules to load at boot time.
#
# This file contains the names of kernel modules that should be loaded
# at boot time, one per line. Lines beginning with "#" are ignored.
# Parameters can be specified after the module name.
snd-bcm2835
i2c-bcm2708
i2c-dev
增加内容如下图所示:
按a键编辑; Esc键退出编辑后用“:wq!”保存并退出vi编辑
运行配置工具 先下载没有配置工具raspi-congig
二:下载安装respi-config,运行配置工具及相关设置;
下载安装respi-config,运行配置工具;
- 手动下载deb包
下面是一行命令需一次输入:
wget http://mirrors.ustc.edu.cn/archive.raspberrypi.org/debian/pool/main/r/raspi-config/raspi-config_20200601_all.deb
- 解决依赖问题
一行命令一次输入:
sudo apt install lua5.1 libatopology2 libfftw3-single3 libsamplerate0 alsa-utils
- 安装软件
一行命令一次输入:
sudo dpkg -i raspi-config_20200601_all.deb
4、运行raspi-config,需要sudo或以上权限(切换到root用户也行)
sudo raspi-config
输入命令后正常界面如下图所示:
5、(如果正常就不用看本小点了)raspi-config能够运行的还有一个重要前提,boot分区已被正常挂载
先查看一下boot分区所在设备号
fdisk -l
再把它挂载到/boot上(以下是示例,不一定是mmcblk0p6,需根据实际情况决定)
mount /dev/mmcblk0p6 /boot
raspi-config具体设置步骤如下图所示:
上下左右键选择,enter键选择进入
sudo raspi-config
选择Interfacing Options 选择好后enter键进入,依次选择i2c选择好后enter键进入、OK选择好后enter键进入、、右键选择Finish。完成。下次启动系统时,I2C模块将被自动加载。
三:安装 i2c-tools工具与python-smbus
更新一次包列表,并安装 i2c-tools工具与python-smbus,(因为python-smbus ;下载有问题所以换成python3-smbus)重启树莓派。依次输入下面三行命令
sudo apt-get update
sudo apt-get -y install i2c-tools python3-smbus
sudo reboot
重启后通过刚才安装的i2c-tools对i2c设备进行探测,输入以下命令,得到如下结果,说明检测到一个地址为0x68的I2C设备就是板上的DS1307。
sudo i2cdetect -y 1
检看 DS1307的数据手册,发现DS1307的7位地址的确是0x68。注意,如果忘了为时钟模块安装纽扣电池这里可能读取不到。
下面我们通过i2c-tools来测试下DS1307的功能,并将DS1307这个掉电不丢失的时钟用于树莓派系统的时钟。
注意:下面的测试必须在root权限下测试。(注意:下面黄色区域文字 树莓派官方系统切换用户操作;ubuntu系统直接切换到root用户就行了命令:
sudo su
)
=== 如何启用 root 账户的分割线 开始===
debian里root账户默认没有密码,但账户锁定。
当需要root权限时,由默认账户经由sudo执行,Raspberry pi 系统中的Raspbian
默认用户是pi 密码为raspberry
重新开启root账号,可由pi用户登录后,在命令行下执行
sudo passwd root
执行此命令后系统会提示输入两遍的root密码,输入你想设的密码即可,然后执行
sudo passwd --unlock root
这样就可以解锁root账户了。
现在就有两个账户 pi@raspberrypi 和 root@raspberrypi 两个账户可以来回切换:
在pi@raspberrypi 输入 su 然后输入刚才设置的密码进入 root 账户
在root@raspberrypi 输入su pi 进入 pi账户
=== 如何启用 root 账户的分割线 结束===
四:设置开机自启动增加权限及修改时间:
注意:上面黄色区域文字 树莓派系统切换用户操作ubuntu系统直接切换到root用户就行了命令:
sudo su
下面可能会用到下面个命令1:hwclovk -r 此命令表示读取硬件时间:2:hwclock -w将系统时钟同步到硬件时钟;3:hwclovk -s将硬件时钟同步到系统时钟;4;hwclock --systohc将硬件时钟调整为与目前的系统时钟一致;5:hwclock --set --date=<日期与时间>修改硬件时间。如果注意:系统时间不对先设置系统时区(需要联网才能选对时间)如下命令(前提是能使用raspi-config)不要输错命令,输错一点系统将识别不了命令。
先输入下面一行命令将会出现下方界面;
sudo dpkg-reconfigure tzdata
操作如下图片所示:
选择Asia再Enter进入,然后选择Chongqing选项enter键进入。
联网情况下是时间就是对的。
测试时间是否能正常读取(需依次输入下面三个命令才能读取并看到硬件时间)
modprobe i2c-dev
echo ds1307 0x68 > /sys/class/i2c-adapter/i2c-1/new_device
hwclock -r
Sat Jan 1 00:00:12 2000 -0.120717 seconds
注意:上面步骤(更换时区也就是更新最新时间)联网已经操作的情况下就不需要操作下面步骤,只需要吧系统时间同步到硬件时钟输入命令hwclock -w
即可。
将系统时钟设定为当前时间,然后将系统时钟写入到DS1307硬件时钟里面
date 062120352014.00 备注:6月21日 20点35分 2014年
Sat Jun 21 20:35:00 UTC 2014
hwclock -w//将系统时间同步到硬件时钟
date
Sat Jun 21 20:35:21 UTC 2014
编辑开机自启动文件
sudo vi /etc/rc.local
将以下内容加入“exit 0”行之前(直接复制粘贴到文件rc.local就行了)
#!/bin/bash
#command conten
tmodprobe i2c-dev
sudo echo ds1307 0x68 > /sys/class/i2c-adapter/i2c-1/new_device
hwclock -r
hwclock -s
exit 0
如下图所示:
保存没添加权限开机命令行不会自启动文件,不会自启动该文件(rc.loca)颜色是白色的(ssh远程连接是这样的)如下图:
按a键编辑; Esc键退出编辑后用:wq!保存并退出vi编辑
增加下面执行权限命令,如不增加此条权限执行可能不成功开机时间就不会从硬件把时间更新到系统。依次输入下面两行命令
sudo chmod +x /etc/rc.local
sudo systemctl enable rc-local
操作成功后远程界面看到的文件颜色成了绿色,这样开机才会自动执行上面的命令。如下图:
过几分钟拔掉网线,重启树莓派,输入“date”看看时间是否正确。
date
Sat Jun 21 20:55:00 UTC 2014
root@raspberrypi:/home/pi# hwclock -r
完成后用一下命令查看地址68变为UU设置成功
sudo i2cdetect -y 1
重新断电开机也用这个命令查看如果是68地址说明可能是开机自启动文件部分出了问题。如下图
完成后下面的内容可以不看了。
以上将系统时钟和DS1307硬件时钟读出来发现 系统时钟比DS1307时钟慢了1分多。可能是在重启后DS1307写入系统后,系统需要等待1分多才开始计时。
至此,以后要用到实时时间就可以简单的使用 date 这个命令来获取。
在python编程中可以使用以下代码读取实时时间。
import datetime #导入系统时钟
now = datetime.datetime.now() #读取当前时间并保存到now变量
timeString = now.strftime("%Y-%m-%d%H:%M") #把now中的时间按指定格式转换成字符串