< >
Home » 树莓派3物联网 » 树莓派物联网-PRI.GPIO通过继电器控制灯

树莓派物联网-PRI.GPIO通过继电器控制灯

利用PRI.GPIO通过继电器控制灯

说明

  • 如何使用树莓派及一些其他电子元件来控制房间的灯光
  • 有必要提醒一下关于实验中“电流”的危险性

硬件

  1. 树莓派2或树莓派3(或者任何5V输出功率的型号,均可)

  2. USB无线软件狗(树莓派2版本需要)

  3. 8路继电器

  4. 一些Female-Female跳线(40 PCS FEMALE TO FEMALE JUMPER WIRES)

  5. 灯头电线

软件

  1. 安装apache2和php5
sudo apt-get install apache2 php5 
  1. 安装python的GPIO库
sudo pip install RPI.GPIO

了解元件

  1. 继电器

继电器是一种使用非常低的电压输入控制高压电的电气设备。由一个线圈缠绕的金属杆和两个小型金属节点构成的闭合电路。其中一个节点是固定的,其他的都是可移动的。无论何时,当电流通过线圈的时候,它会产生一个磁场,吸引可移动节点向静态节点运动,形成电路。通过给线圈供应小额电压,我们就能完成高压电路的轮回。同时,静态节点并非在物理上与线圈有联系,因此一旦有地方出错,微控制器驱动的线圈也很少出现故障。
请输入图片描述
试验中,我使用一个8路继电器,可以同时控制8个设备。你可以选择自己的继电器或者继电板,但是请确保你在继电器的额定电压之内处理,以避免任何事故的发生

  1. 跳线

跳线就是我们链接树莓派GPIO插脚与继电器的简单连接电线。

  1. 树莓派2

我们使用树莓派2作为一个微控制器来操纵继电器。它有40个GPIO(通用输入/输出)插脚。你可以看到下面这些插脚的布局,我们将使用这些接口为继电器加电和控制开关。

请输入图片描述

连接电路

  • 电路非常简单。我们将连接GPIO插脚到继电板上。首先连接继电器板上的“GND”与树莓派上的任意“GND”。然后链接继电器的“IND1”到GPIO PIN 17,我们会把GPIO PIN 17作为一个控制第一继电器的输出。最后,将继电器的“VCC”连接到树莓派的“5V”GPIO插脚。让我们简单直接设置一下:
GPIO Pins    <—>    Relay Pins
  5V      <–>     VCC
  GND     <–>     GND
  PIN 17  <–>     IND1
  • 现在我们到了最为棘手的部分,我们要将继电器连接到接通主电路供电的灯头上。但是,我想先给你介绍一个如何通过直流屏电源开启及关闭灯光的简单操作。

  • 我们通常连接两根电线到灯泡上,来提供电流供给。其中一根电线是“中性”电线,另一根则是实际带着电流的“负极”电线,同样的这里也有一个控制整个电路的开关。因此,当开关(闭合)连接到流经灯泡的电流和负极电线时,电路便完整了。灯泡从而亮了起来。当开关(断开),破坏了电路和灯泡的电流,因此灯泡不亮。这里有一个小的电路图来解释具体情况:

请输入图片描述

  • 当我们在试验中,我们需要“负极电线”通过我们的继电器来打破电路,从而使用继电器开关的控制流经的电流。因此,当继电器打开,在闭合电路中灯泡也应该亮起来,反之亦然。请参考一下完整的电路:

请输入图片描述

控制脚本

  • 现在,终于到了软件的部分。我编写了一个简单的python脚本来控制继电器开关,使用了GPIO PIN 17和一个PHP代码可以在任何移动终端上面来运行python脚本。你可以从我的Github(和CSS)上找到这段代码

  • Python code for Controlling light bulb using GPIO PIN 17 - lights.py

#!/usr/bin/python
import sys
import RPi.GPIO as GPIO
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BCM)
args = sys.argv
pin = 17 # GPIO PIN 17
ctl = args[1] #Argument 1 for ON/OFF
if (int(ctl) == 1):
  GPIO.setup(pin, GPIO.OUT)
  GPIO.output(pin,GPIO.HIGH)

if (int(ctl) == 0):
  GPIO.setup(pin, GPIO.OUT)
  GPIO.output(pin, GPIO.LOW)
  • PHP script for web based control - index.php
<?php

$ctl = $_POST['ctl'];
$command = "sudo python lights.py $ctl";
$result = shell_exec($command);
echo($result);

?>
<html>
<head>
<link href="style.css" rel="stylesheet" type="text/css">
</head>
<title>SaMaN's Room Control System</title>
<body><p class="head">Welcome to SaMaN's Room Control system!</p>
<form action="" method="POST" name="form">
<p class="title"> Control the lights from here: </p>
<p class="form">
<input type="submit" id="on" value="ON">
<input type="hidden" name="ctl" value="1">
</form></p>
<form action="" method="POST" name="form">
<p class="lol">
<input type="submit" id="off" value="OFF">
<input type="hidden" name="ctl" value="0">
</form>
</p>
</body></html>

注意:你将会需要添加“www-data”用户到sudoers文件。

注意+:PHP代码只是为了测试,我们不建议在公共环境中运行。

参考:

  • http://samanl33t.github.io/blog/2015/07/16/home-automation-controlling-lights-the-easy-way/
  • GPIO Diagram: http://data.designspark.info/uploads/images/53bc258dc6c0425cb44870b50ab30621
  • https://www.youtube.com/watch?v=Z2B67hybdAA
  • https://elementztechblog.wordpress.com/2014/09/09/controlling-relay-boards-using-raspberrypi/
  • https://www.raspberrypi.org/forums/viewtopic.php?t=36225
  • https://github.com/TheGreenToaster/web-pins/

纠错,疑问,交流: 请进入讨论区点击加入Q群

获取最新文章: 扫一扫右上角的二维码加入“创客智造”公众号


标签: 树莓派3gpio, 树莓派3继电器开关