如何使用Raspberry Pi和IFTTT构建光感应智能开关

黄昏至黎明开关和计时器开关都是使照明自动进行的便捷方法。如果您可以将两者结合起来,甚至将它们连接到互联网上,以获得真正的智能照明系统,那不是很好吗?

Raspberry Pi,一个继电器,一个光传感器和一些您只需花很少的钱就可以实现这些代码。

您需要的东西

光感应智能开关的组件很容易获得。您将需要:

  • 运行Raspbian的任何模型Raspberry Pi。
  • 一个中继板,可以在亚马逊上轻松找到。
  • 一个Adafruit TSL2561光度传感器。
  • 跳线。
  • 一些灯可以自动运行!
  • 光感智能开关的工作原理

    通过使用继电器的方式相同作为我们的自动车库门开启器项目,您可以对Raspberry Pi进行编程,以在固定时间打开和关闭照明电路。在混合物中添加一个亮度传感器,意味着Pi可以检测环境光水平,并选择仅在真正需要时才打开灯光。

    因为Pi是可以连接的微型计算机连接到网络,您也可以将其设置为通过互联网进行控制。您的智能灯将具有三个输入来确定它们何时亮起:

  • 已编程的时间表。
  • 环境光水平。
  • 通过
  • 步骤1:将Raspberry Pi连接到中继器

    如果您不熟悉GPIO,请先阅读有关Raspberry Pi GPIO引脚的所有知识。

    首先,检查继电器板上是否有将VCC和JD-VCC引脚连接在一起的跳线。

  • 将Pi引脚2(5v)连接到JD-VCC上,将其断开,然后将继电器板连接到您的Pi。
  • 将Pi引脚6(GND)连接到中继板上的GND。
  • Pi引脚15(GPIO 22)连接到中继板上的IN1
  • 将Pi引脚17(3.3v)连接到中继板上的VCC。
  • 步骤2:连接光度传感器

    TSL2561是一种光传感器,可以检测红外,全光谱,和人类可见的光。它可以向Raspberry Pi发送非常精确的数字读数。传感器报告的光线水平范围为0.1(无光照)至40,000(明亮的太阳)。

    TSL2561板使用i2c协议与Raspberry Pi通讯。 I2C仅需要两个连接,一个用于时钟,以使两个设备保持同步,另一个用于传输数据。当然,勒克斯传感器也需要一定的功率,因此总共要进行四个连接:

  • 将Pi引脚1(3.3v)连接到勒克斯传感器上的Vin(或VCC)
  • 将Pi针3(SDA)连接到勒克斯传感器上的SDA
  • 将Pi针5(SCL)连接到勒克斯传感器上的SCL
  • 将Pi针9(GND)连接到lux传感器上的GND
  • Step 3: Configure and Install Dependencies

    在进行进一步操作之前,您需要检查Raspberry Pi上是否已启用I2C(默认情况下处于禁用状态)。在终端中输入以下内容:

    sudo raspi-config

    选择接口选项> P5 I2C,,然后选择

    点击 Enter ,然后选择 Finish 退出配置屏幕。重新启动您的Pi才能使更改生效:

    sudo reboot

    Pi能够与传感器板通信需要一些依赖关系。键入以下命令:

    sudo apt-get updatesudo apt-get install -y python-smbussudo apt-get install -y i2c-tools

    您可以通过键入以下命令检查一切是否正常:

    sudo i2cdetect -y 1

    如果已安装依存关系并且lux传感器已正确连接,则会看到类似以下的响应这:

    在这里,实用程序报告它在I2C地址39上找到了一个I2C设备(勒克司传感器)。

    您还没有完全完成依赖项。您还将需要一些库。首先,在以下文件夹中创建一个文件夹,以保留与该项目相关的所有内容:

    mkdir ~/lightingcd ~/lighting

    接下来,下载bottle,这是一个轻量级的框架,可以在Pi上创建一个简单的Web服务器。您将使用它来从网络上控制灯光。

    wget https://bottlepy.org/bottle.py

    您将需要的其他库位于Github上,因此,如果您的Raspberry Pi还没有安装Git,请立即添加:<

    sudo apt-get install git

    现在克隆两个库,如下所示:

    git clone https://github.com/adafruit/Adafruit_Python_GPIO.gitgit clone https://github.com/adafruit/Adafruit_Python_PureIO.git

    最后,通过创建一个新文件来创建测试脚本:

    nano test.py

    在此代码中粘贴(礼貌

    完成后,运行测试脚本。

    #!/usr/bin/env python# -*- coding: utf-8 -*-from __future__ import absolute_import, division, print_function, unicode_literalsfrom tsl2561 import TSL2561if __name__ == "__main__":    tsl = TSL2561(debug=True)   print(tsl.lux())

    Ctrl + X 保存,并按照屏幕上的说明退出。

    完成后,运行测试脚本:

    python test.py

    如果所有内容均已安装且正常运行,您将获得一个电话号码。该数字是传感器的照度读数。尝试阻挡或移动传感器,使其获得更多或更少的光线。然后再次运行测试脚本,看看数字如何变化。

    第4步:创建自动化脚本

    Raspberry Pi在天黑时会打开灯,但也要切换他们在某些时候离开。例如,您可能希望在晚上天黑时打开灯,然后在午夜关闭以节省电。他们可以在清晨再次亮起,然后在天亮时自行关闭。

    要管理具有多个计时区域的日程表,有两种不同的脚本。如果您想在黑暗中打开灯,则每分钟就会运行一个( onzone.py )。另一个( offzone.py )将在您希望灯熄灭的时间内每分钟运行一次,而与灯光水平无关。

    脚本将计划使用cron运行工作 。通过选择每个脚本在白天和晚上的哪个小时运行,可以轻松设置灯光自动点亮的时间。您可以根据需要设置任意的打开和关闭时间段。

    以及用于自动控制灯光的脚本,还有第三个脚本可以管理覆盖情况。这样一来,无论环境光线如何,您都可以远程打开灯光。

    此Python脚本将在您希望灯光昏暗的一天中的每一分钟运行。通过将以下命令复制并粘贴到终端中来下载脚本:

    wget https://gist.githubusercontent.com/hamishdownell/ea151d2ff7c888ac09f8a850afaab4ee/raw/10b0e9d8ec42f8577750941da46a93d16b597c05/onzone.py

    每次运行onzone.py时,它将从传感器获取lux值,以查看其是否暗淡。如果是,它将检查灯光是否亮起或熄灭。如果它们关闭,它将打开它们。如果不是很暗,脚本将查看指示灯是否亮着。如果是的话,除非它们被覆盖,否则它将关闭它们。

    脚本使用名为 lowlux 的变量来确定在什么地方足够暗以打开灯。您可以通过更改onzone.py顶部附近的以下行中的值来将其更改为适合您自己的安装的方式:

    lowlux = 50

    该脚本将在每天要点亮灯的每一分钟运行除非他们已被覆盖,否则请远离。下载脚本:

    wget https://gist.githubusercontent.com/hamishdownell/fb8970909145bbfefbbef8dba5f5a00f/raw/eae5a6057a51ca4727907c7d061f0a48b07da944/offzone.py

    此脚本不关心它的亮或暗。它的工作只是简单地将灯关掉(除非已被覆盖)。

    此脚本创建了一个简单的Web服务,该服务可以接受执行以下操作的命令:

  • 无论环境光线水平如何,都将灯打开几分钟。
  • 将灯关闭。
  • 找出当前灯是打开还是关闭。
  • 查找被覆盖后的灯要保留多长时间。
  • 下载脚本:

    wget https://gist.githubusercontent.com/hamishdownell/2303bfd9fb30d42e79923bdb7e69ed4e/raw/7dcb456b81b8ae58ae48efa225adb41ba7d7f69c/lightserver.py

    继续下一步之前,请像这样运行offzone.py脚本:

    python offzone.py

    这将创建控制文件,脚本使用该控制文件来跟踪所有内容。

    步骤5:计划脚本

    您的Raspberry Pi可以使用cron运行自动化脚本。像这样设置时间表:

    sudo crontab -e

    将这两行粘贴到文本编辑器中:

    * 7,8,9,17,18,19,20,21,22,23 * * * python /home/pi/lighting/onzone.py > NULL* 0,1,2,3,4,5,6,10,11,12,13,14,15,16 * * * python /home/pi/lighting/offzone.py > NULL

    注意:如果您登录Raspberry Pi的用户名不是默认的 pi ,相应地更改路径。

    在第一行中列出您希望灯光在黑暗时点亮的所有时间。所有要熄灭的时间都在第二行。

    现在将替代脚本设置为在Pi启动时自动运行:

    sudo nano /etc/rc.local

    将此行粘贴在底部文件,然后保存并退出:

    nohup python /home/pi/lighting/lightserver.py &

    最后,重新启动Raspberry Pi,以便您可以检查服务器脚本是否按预期加载

    sudo reboot

    步骤6:测试中继

    在连接灯光之前,请使用替代功能测试一切是否正常。在与您的Pi相同的网络上的Web浏览器中键入以下内容,将IP地址替换为您自己的Raspberry Pi的地址:

    11.22.33.44:1234/overrideon/3

    如果一切正常,您将听到中继点击和浏览器会提示您已打开灯三分钟。

    在继电器闭合的同时,您可以测试其他倍率功能。这将告诉您由于覆盖而使指示灯保持点亮状态还有多分钟:

    11.22.33.44:1234/getoverrideremaining

    这应该告诉您指示灯点亮:

    11.22.33.44:1234/lightstatus

    最后,您可以打开通过以下方式再次将其关闭:

    11.22.33.44:1234/overrideoff

    继电器将在打开时发出喀哒声。

    步骤7:连接灯光

    在连接之前请先关闭并拔下Raspberry Pi点亮继电器的灯光。使用继电器板上的常开(NO)连接器代替常规开关,如下所示:

    最后,您可以将lux传感器安装在可以捕获环境光水平的位置。请注意,如果TSL2561在直射的阳光下会报告为饱和,因此,如果可能的话,最好将其保持在阴暗处。

    更多Raspberry Pi项目供您尝试

    通过在Web浏览器中键入命令来远程覆盖新的智能照明设置非常麻烦。更好的方法是连接Amazon Echo之类的东西,以使事情变得更容易。结合使用IFTTT上的Alexa服务和Webhooks服务是添加语音控制的简单方法。

    请参阅我们的使用IFTTT的指南来帮助您入门。

    另一种选择是使用Siri快捷方式。一个带有菜单的快捷方式可以查询灯的状态,并使用覆盖功能将其打开和关闭。

    如果您喜欢这个项目,请务必查看这些怪异的Raspberry Pi项目以获取更多创意。

    标签: IFTTT Raspberry Pi 智能照明