首页 百科知识 制作定时台灯项目

制作定时台灯项目

时间:2022-10-04 百科知识 版权反馈
【摘要】:用一个定时开关定时控制家里的台灯可以实现这个目的,可是附近的电器商店已经关门了,明天早上飞机起飞前也没有足够时间去商店购买现成的定时开关,还好,有智能家居机器人在家,现在有以下器材:有了这些器件,用户就可以自己动手编写一个定时开关,这需要使用两个强大的 Linux工具:Shell脚本和cron。cron是Linux中用于定时执行任务的程序。

现在已经学会了如何通过Linux命令行来控制 LED 或读取按钮的状态,下面通过用一些常用的Linux内置工具操作数字输入输出接口来完成一个简单的项目。

假如用户明天一早需要离开家去外地度假,希望不在家的这段时间里,不要有小偷来“光顾”。用一个定时开关定时控制家里的台灯可以实现这个目的,可是附近的电器商店已经关门了,明天早上飞机起飞前也没有足够时间去商店购买现成的定时开关,还好,有智能家居机器人在家,现在有以下器材:

(1)连接线;

(2)PowerSwitch Tail II;

(3)电线;

(4)面包板。

有了这些器件,用户就可以自己动手编写一个定时开关,这需要使用两个强大的 Linux工具:Shell脚本和cron。

1. 脚本命令

所谓 Shell 脚本,是指包含了很多Shell 命令(如在上一节中用来控制 GPIO接口的命令)的文件。看看下面的 Shell 脚本和本书对关键行的解释:

#!/bin/bash #①

echo Exporting pin $1. #②

echo $1〉 /sys/class/gpio/export #③

echo Setting direction to out.

echo out 〉/sys/class/gpio/gpio$1/direction #④

echio Setting pin high.

Echo 1 〉/sys/class/gpio/gpio$1/value

① 所有的Shell脚本都以这一行开头。

②“$1”指代第一个命令行参数。

③ 这个脚本不是固定地暴露某个特定的 GPIO 接口,而且通过命令行参数来指定接口号。

④ 注意,这里的 GPIO 接口号也会被命令行参数替换。

把这个文本文件存为“on.sh”,并通过 chmod 命令把它设置为可执行:

root@raspberrypi :/home/pi# chmod +x on.sh

命令行参数是一种向程序或脚本传递信息的方式,通过在命令后面加上参数、程序或脚本就可以在运行时获取相应的值。当用户在编写一个Shell脚本时,“$1”代表了第一个命令行参数,“$2”代表了第二个命令行参数,以此类推。在上面“on.sh”的例子中,用户可以输入想要暴露和打开的 GPIO 接口编号(25)作为命令行参数,并且通过命令行参数来指定接口编号,而不是在 Shell 脚本中硬编码(Hard-code)具体的接口编号,这样可以让Shell脚本变得更加通用。当需要对GPIO 25 进行操作时,只需执行以下命令:

Root@raspberrypi:/home/pi/# ./on.sh 25①

Exporting pin 25.

Setting direction to out.

Setting pin high.

① 文件名前的“./”表示用户正在执行当前工作目录下的脚本。

如果GPIO 25 上仍然连接着LED,则脚本执行后,它即被点亮。用户还可以编写另一个名为“off.sh”的脚本,用来把 LED熄灭。这个脚本程序如下:

#!/bin/bash

echo Setting pin low.

echo 0 〉 /sys/class/gpio/gpio$1/value

echo Unexporting pin $1

echo $1〉 /sys/class/gpio/unexport

为它加上可执行权限并执行它:

root@raspberrypi :/home/ pi/temp# chmod +x off .sh

root@raspberrypi : /home/pi/temp# ./off.sh 25

Setting pin low.

Unexporting pin 25

如果一切正常,原来被点亮的LED现在会熄灭。

2. 连接台灯

显然一个小小的LED所发出的光线不足以“欺骗”一个小偷让他误以为用户在家中,所以下一步需要把台灯与嵌入式控制板连接起来。

(1)断开LED与GPIO 25的连接。

(2)从面包板上引出两条接线,分别引自嵌入式控制板的GPIO 25与地线。

(3)把从 GPIO 25上引出的接线接到PowerSwitch Tail 上标有“+in”标记的引脚上。

(4)把从地线引出的接线接到PowerSwitch Tail上标有“-in”标记的引脚上。

(5)把PowerSwitch Tail 插到插座上,并把台灯插到PowerSwitch Tail上。请注意,需要把台灯的电源开关打开。

(6)这时,如果执行“./on.sh 25”,台灯就会被打开;如果执行“./off.sh 25”,台灯就会被关闭,详见图2.5.1。

图2.5.1 连接PowerSwitch Tail与嵌入式控制板(示意)

3. 用cron设置定时任务

现在已经把控制 GPIO 接口开关的命令整合成了两个简单的脚本,台灯也已经通过 PowerSwitch Tail连接到嵌入式控制板并且可以用单条的命令来控制其开或关。下面就可以通过 cron来设置每天定时开关灯的时间了。cron是Linux中用于定时执行任务的程序。通过使用cron程序,可以设置在指定的日期或者时间执行指定的命令,或者以指定的时间间隔 (如1小时)来执行命令。在本项目中可以设定两个定时任务:每天晚上8点打开台灯,每天凌晨2点关闭台灯。

若要添加这些定时任务,需要修改Linux 的cron表,cron表包含一系列要求 Linux在指定时间执行的命令:

root@raspberrypi:/home/pi/# crontab -e

这条命令会打开一个文本编辑器,用于修改root 用户的 cron表。在这个文件的顶端,用户能看到一些关于如何修改 cron表的描述。用光标移动键把光标移动到文件的末尾,然后添加下面两行代码:

0 20 * * * /home/pi/on.sh 25

0 2 * * */home/pi/off.sh 25

按【Control-X】键退出,在提示用户是否要保存文件时输入“y”,并按回车键接受它提示的默认文件名。当系统把这个文件保存好并退回命令行状态时,屏幕上会显示“installing new crontab”,表示对cron 表所做的修改会被 cron 程序运行。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈