树莓派5每天定时开机和关机

有网友提问:如何实现树莓派5每天定时开机和关机?

《树莓派5实时时钟RTC》一文中我已经介绍了她的硬件定时时钟rtc0,树莓派是支持多个rtc的,0代表其编号。在rtc0中存储的是UTC时间。

修改EEPROM设置

sudo -E rpi-eeprom-config --edit
#部分内容必须修改为:
[all]
#允许电源开或关置1
POWER_OFF_ON_HALT=1
#唤醒使用的GPIO为0,物理pin是27
WAKE_ON_GPIO=0

重启生效

我另外做了实验如果把 WAKE_ON_GPIO=26 ,物理pin是37,也可以定时开机的。也就是任意GPIO都可以做唤醒的管脚。

基于rtcwake程序实现

树莓派5是基于linux的rtcwake程序来实现子程序rtc的唤醒(wakealarm)功能。

pi@raspberrypi:~ $ whereis rtcwake
rtcwake: /usr/sbin/rtcwake /usr/share/man/man8/rtcwake.8.gz

查看wakealarm设置的时间,如果没有回文就是没有设置,默认开机后擦除设置。

cat /sys/class/rtc/rtc0/wakealarm

假设现在开始两分钟后rtc0唤醒:

echo +120 | sudo tee /sys/class/rtc/rtc0/wakealarm
sudo shutdown -h now

手动擦除设置:

echo 0 | sudo tee /sys/class/rtc/rtc0/wakealarm

SYSFS或者PROCFS接口查看

SYSFS接口查看:路径为/sys/class/rtc/rtc0/

cat /sys/class/rtc/rtc0/date
cat /sys/class/rtc/rtc0/time

PROCFS接口查看: 路径为/proc/driver/rtc

cat /proc/driver/rtc

在这里插入图片描述

删除fake-hwclock

树莓派OS还提供了fake-hwclock程序,其实是树莓派系统默认对于不存在硬件时钟时候,把关机时候的时间写入到文件,开机时候重新读取。建议大家把她删除。

sudo apt-get remove fake-hwclock
sudo dpkg --purge fake-hwclock
update-rc.d fake-hwclock remove

设置NTP国内服务器和timedatectl操作

树莓派5默认是没有设置NTP的,建议设置国内的服务器。

sudo nano /etc/systemd/timesyncd.conf
#取消注释,填写腾讯ntp服务器
NTP=time.cloud.tencent.com

在这里插入图片描述
不要忘记重启和使能系统时钟(System Clock)

systemctl restart systemd-timesyncd
sudo systemctl enable systemd-timesyncd

其他timedatectl命令

timedatectl命令可以查询和更改系统时钟和设置,你可以使用此命令来设置或更改当前的日期,时间和时区,或实现与远程NTP服务器的自动系统时钟同步。
我用的本地时间写入rtc,没有采用格林威治时间。

#ntp同步时间,set-local-rtc置1,用本地时间设置rtc。
sudo timedatectl set-local-rtc 1 --adjust-system-clock
#本地时间写入rtc
sudo hwclock -w
#查看状态
timedatectl status

在这里插入图片描述

什么是Cron job?

Cron 是一个基于时间的作业调度器,它构成了类 Unix 操作系统(如 Linux 及其许多衍生产品)的组成部分。
使用 cron 是定期运行命令或 shell 脚本等内容的常用方法。通过“cron”实用程序调度的任务通常称为“cron Jobs”
六个基本部分构成了 cron 工作。

前五个部分构成了 cron 作业的计时语法。这五个部分包括分钟、小时、日期、月份和星期几。
语法的最后一部分,即第六部分(command)是在满足前面五部分计时语法中的条件时要执行的命令。
在这里插入图片描述
譬如每天早晨8时开机,晚上21时关机。您在设置时一定是开机状态,那么每天21时执行Cron job在rtc0中设置好唤醒时间(/home/pi/set_wakealarm.sh)就可以了,然后关机。

设置Cron job

crontab -u pi -e 
#文尾填写
00 21 * *  0-6 /home/pi/set_wakealarm.sh

预览Cron job

终端输入以下命令:

crontab -l

编辑set_wakealarm.sh

点击树莓派图标–>编程–>Geany编辑器 ,Geany编辑器是树莓派官方推荐撰写shell脚本的编辑器。

#!/bin/bash

#开机和关机差的秒数39600,此句可以不写
gap_time=$(($(date +%s -d '2024-02-06 8:00:00') - $(date +%s -d '2024-02-05 21:00:00')));
#请注意一定要有+,$gap_time 直接用差值39600代替
echo +$gap_time | sudo tee /sys/class/rtc/rtc0/wakealarm
#直接关机和halt,看看屏幕显示和指示灯都有区别的。
sudo shutdown -h now
#sudo halt

设置set_wakealarm.sh的权限,终端输入以下命令:

sudo chmod a+x /home/pi/set_wakealarm.sh

举一反三

计算开机和关机差的秒数39600
一种方法去找个UTC时间计算工具,开机和关机时间转化成UTC时间后相减得值。
在这里插入图片描述

另一种就是用python编程求解。
在这里插入图片描述

养成好习惯

要防止错误设置引起“拉风箱”现象,不使用定时开机和关机任务是及时删除Cron job。

(完)

  • 18
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值