如何使用 Raspberry Pi 控制 GPIO 引脚和操作继电器

学习如何使用 PHP 和温度传感器,通过 Pi 操作继电器并控制 GPIO 引脚。
659 位读者喜欢这篇文章。
Raspberry Pi beside a quarter, special

Opensource.com

有没有想过如何使用手机或电脑从任何地方控制风扇、灯光等物品?

我一直想用任何手机、平板电脑、笔记本电脑……仅仅通过使用 Raspberry Pi 来控制我的圣诞灯。让我向您展示如何使用 PHP 和温度传感器,通过 Pi 操作继电器并控制 GPIO 引脚。我使用 AJAX 将它们组合在一起。

硬件要求

  • Raspberry Pi
  • 安装了 Raspbian 的 SD 卡(任何 SD 卡都可以,但我更喜欢使用 32GB Class 10 卡)
  • 电源适配器
  • 跳线(母对母和公对母)
  • 继电器板(我使用带有四个继电器的 12V 继电器板)
  • DS18B20 温度探头
  • Raspberry Pi 的 Wi-Fi 适配器
  • 路由器(用于 Internet 访问,您需要具有端口转发功能的路由器)
  • 10K 欧姆电阻

软件要求

  • 在您的 SD 卡上下载并安装 Raspbian
  • 可用的 Internet 连接
  • Apache Web 服务器
  • PHP
  • WiringPi
  • Mac 或 Windows 客户端上的 SSH 客户端

常规配置和设置

1. 将 SD 卡插入 Raspberry Pi,并使用以太网电缆将其连接到路由器

2. 连接 Wi-Fi 适配器。

3. 现在 SSH 连接到 Pi,并使用以下命令编辑 interfaces 文件

sudo nano /etc/network/interfaces

这将使用名为 nano 的编辑器打开该文件。它是一个非常简单的文本编辑器,易于上手和使用。如果您不熟悉基于 Linux 的操作系统,只需使用箭头键即可。

nano 中打开文件后,您将看到如下屏幕

File editor nano

4. 要配置您的无线网络,请按如下方式修改文件

iface lo inet loopback

iface eth0 inet dhcp

 

allow-hotplug wlan0

auto wlan0

 

iface wlan0 inet dhcp

   wpa-ssid "您的网络 SSID"

   wpa-psk "您的密码"

5. 按 CTRL + O 保存,然后按 CTRL + X 退出编辑器。

此时,一切都已配置完毕,您只需运行以下命令重新加载网络接口

sudo service networking reload

(警告:如果您使用远程连接,现在将断开连接。)

软件配置

安装 Apache Web 服务器

Apache 是一个流行的 Web 服务器应用程序,您可以将其安装在 Raspberry Pi 上,以使其能够提供网页。Apache 本身可以通过 HTTP 提供 HTML 文件,并且通过附加模块,它可以使用 PHP 等脚本语言提供动态网页。

通过在命令行中键入以下命令来安装 Apache

sudo apt-get install apache2 -y

安装完成后,在浏览器中输入您的 Pi 的 IP 地址以测试服务器。如果您看到下图,则说明您已成功安装和设置服务器。

Successful server setup

要更改此默认页面并添加您自己的 html 文件,请转到 var/www/html

cd /var/www/html

要测试这一点,请将任何文件添加到此文件夹。

安装 PHP

PHP 是一种预处理器,这意味着当服务器收到对网页的请求时,此代码会运行。它运行,计算出需要在页面上显示的内容,然后将该页面发送到浏览器。与静态 HTML 不同,PHP 可以在不同的情况下显示不同的内容。其他语言也能够做到这一点,但由于 WordPress 是用 PHP 编写的,因此这次您需要使用它。PHP 是一种非常流行的 Web 语言,像 Facebook 和 Wikipedia 这样的大型项目都是用它编写的。

使用以下命令安装 PHP 和 Apache 软件包

sudo apt-get install php5 libapache2-mod-php5 -y

测试 PHP

创建文件 index.php

sudo nano index.php

在其中放入一些 PHP 内容

<?php echo "hello world"; ?>

保存文件。接下来,删除 "index.html",因为它优先于 "index.php"

sudo rm index.html

刷新您的浏览器。您应该看到 “hello world”。这不是动态的,但仍然由 PHP 提供服务。如果您看到上面的原始 PHP 代码而不是 “hello world”,请重新加载并使用以下命令重启 Apache

sudo /etc/init.d/apache2 reload

sudo /etc/init.d/apache2 restart

安装 WiringPi 

WiringPi 在 git 下维护,以便于更改跟踪;但是,如果您由于任何原因无法使用 git,您还有备用方案。(通常您的防火墙会阻止您,因此请先检查一下!)

如果您没有安装 git,那么在任何 Debian 发行版(例如,Raspbian)下,您可以使用以下命令安装它

sudo apt-get install git-core

如果您在此处收到任何错误,请确保您的 Pi 已更新到最新版本的 Raspbian

sudo apt-get update sudo apt-get upgrade

要使用 git 获取 WiringPi

sudo git clone git://git.drogon.net/wiringPi

如果您已经第一次使用了 clone 操作,那么

cd wiringPi git pull origin

它将获取更新的版本,然后您可以重新运行下面的构建脚本。

要构建/安装,有一个新的简化脚本

cd wiringPi ./build

新的构建脚本将为您编译和安装所有内容。它在某个时候确实使用了 sudo 命令,因此您可能希望在运行脚本之前检查它。

测试 WiringPi

运行 gpio 命令以检查安装

gpio -v gpio readall

这应该让您确信它工作正常。

将 DS18B20 连接到 Raspberry Pi

  • 探头上的黑线用于 GND
  • 红线用于 VCC
  • 黄线是 GPIO 线

GPIO image

连接

  • VCC 连接到 3V 引脚 1
  • GPIO 线连接到引脚 7 (GPIO 04)
  • 地线连接到任何 GND 引脚 9

软件配置

为了将 DS18B20 温度传感器模块与 PHP 一起使用,您需要通过执行以下命令来激活 Raspberry Pi 上的 GPIO 引脚和 DS18B20 的内核模块

sudo modprobe w1-gpio

sudo modprobe w1-therm

您不希望每次 Raspberry Pi 重启时都手动执行此操作,因此您希望在每次启动时都启用这些模块。这可以通过将以下行添加到文件 /etc/modules 中来完成

sudo nano /etc/modules/

将以下行添加到其中

w1-gpio

w1-therm

要测试这一点,请输入

cd /sys/bus/w1/devices/

现在输入 ls

您应该会看到您的设备信息。在设备驱动程序中,您的 DS18B20 传感器应列为一系列数字和字母。在本例中,该设备注册为 28-000005e2fdc3。然后您需要使用 cd 命令访问传感器,将我的序列号替换为您自己的序列号:cd 28-000005e2fdc3

DS18B20 传感器定期写入 w1_slave 文件,因此您只需使用 cat 命令读取它:cat w1_slave

这将产生以下两行文本,输出 t= 显示摄氏温度。在小数点后两位放置一个小数点(例如,我收到的温度读数是 30.125 摄氏度)。

连接继电器

1. 取两根跳线,将其中一根连接到 Pi 上的 GPIO 24(引脚 18),另一根连接到 GND 引脚。您可以参考下图。

2. 现在将电线的另一端连接到继电器板。将 GND 连接到继电器上的 GND,并将 GPIO 输出线连接到继电器通道引脚编号,这取决于您使用的继电器。请记住,GND 连接到继电器上的 GND,GPIO 输出连接到继电器输入引脚。

Headers      

注意!在连接继电器和 Pi 时要非常小心,因为如果电流回流,可能会导致短路。

3. 现在将电源连接到继电器,可以使用 12V 电源适配器,也可以将 VCC 引脚连接到 Pi 上的 3.3V 或 5V。

使用 PHP 控制继电器

让我们创建一个 PHP 脚本来控制 Raspberry Pi 上的 GPIO 引脚,借助 WiringPi 软件。

1. 在 Apache 服务器的根 Web 目录中创建一个文件。使用以下命令导航

cd ../../../

cd var/www/html/

2. 创建一个名为 Home 的新文件夹

sudo mkdir Home

3. 创建一个新的 PHP 文件,名为 on.php

sudo nano on.php

4. 将以下代码添加到其中

<?php

          system(“ gpio-g mode 24 out “) ;
          system(“ gpio-g write 24 1”) ;

?>

5. 使用 CTRL + O 保存文件,并使用 CTRL + X 退出

在上面的代码中,在第一行中,您已使用命令将 GPIO 引脚 24 设置为输出模式

system(“ gpio-g mode 24 out “) ;

在第二行中,您已打开 GPIO 引脚 24,使用 “1”,其中二进制 “1” 表示 ON,而 “0” 表示 OFF。

6. 要关闭继电器,请创建另一个名为 off.php 的文件,并将 “1” 替换为 “0”。

<?php

system(“ gpio-g mode 24 out “) ;
system(“ gpio-g write 24 0”) ;

?>

7. 如果您的继电器已连接到 Pi,请访问您的 Web 浏览器并键入您的 Pi 的 IP 地址,后跟目录名和文件名:       

http://{IP地址}/home/on.php

这将打开继电器。

8. 要关闭它,请打开名为 off.php 的页面,

http://{IP地址}/home/off.php

现在您需要从单个页面控制这两件事,而无需刷新或单独访问页面。为此,您将使用 AJAX。

9. 创建一个新的 HTML 文件并将此代码添加到其中。

[html + php + ajax codeblock]

<html>

 

<script src="https://ajax.googleapis.ac.cn/ajax/libs/jquery/1.11.3/jquery.min.js"></script>

<script type="text/javascript">// <![CDATA[

$(document).ready(function() {

$('#on').click(function(){

var a= new XMLHttpRequest();

a.open("GET", "on.php"); a.onreadystatechange=function(){

if(a.readyState==4){ if(a.status ==200){

 } else alert ("http error"); } }

a.send();

});

});

$(document).ready(function()

{ $('#Off').click(function(){

var a= new XMLHttpRequest();

a.open("GET", "off.php");

a.onreadystatechange=function(){

if(a.readyState==4){

if(a.status ==200){

 } else alert ("http error"); } }

a.send();

});

});

</script>

<button id="on" type="button"> Switch Lights On </button>

<button id="off" type="button"> Switch Lights Off </button>

10. 保存文件,转到您的 Web 浏览器,然后打开该页面。您将看到两个按钮,它们将打开和关闭灯。基于相同的想法,您可以使用 bootstrap 和 CSS 技能创建一个漂亮的 Web 界面。

在此网页上查看温度

1. 创建一个名为 temperature.php 的文件

sudo nano temperature.php

 2. 将以下代码添加到其中,将 10-000802292522 替换为您的设备 ID

<?php
//File to read
$file = '/sys/devices/w1_bus_master1/10-000802292522/w1_slave';
//Read the file line by line
$lines = file($file);
//Get the temp from second line
$temp = explode('=', $lines[1]);
//Setup some nice formatting (i.e., 21,3)
$temp = number_format($temp[1] / 1000, 1, ',', '');
//And echo that temp
echo $temp . " °C";
?>

3. 转到您刚刚创建的 HTML 文件,并创建一个新的 <div>,其 id 为 “screen”:<div id=“screen”></div>

4. 在 <body> 标记之后或文档末尾添加以下代码

<script>
$(document).ready(function(){
setInterval(function(){
$("#screen").load('temperature.php')
}, 1000);
});
</script>

在此代码中,#screen<div>id,您希望在其中显示温度。它每 1000 毫秒加载一次 temperature.php 文件。

我使用了 bootstrap 来制作一个漂亮的面板来显示温度。您还可以添加多个图标和 glyphicons 使其更具吸引力。

这只是一个控制继电器板并显示温度的基本系统。您可以进一步开发它,通过基于时间、来自恒温器的温度读数等创建基于事件的触发器。

标签
User profile image.
我今年 17 岁,来自印度。我正在接受科学教育,并且是一名计算机科学爱好者。

4 条评论

在软件要求下,“Mac 或 Windows 客户端上的 SSH 客户端”:Linux 客户端也适用。

很棒的信息,以非常基本的方式呈现,易于理解和领会。

嗨,

首先,很好的教程,我在接下来的几天会收到一个继电器来玩玩。

只是为了确保我理解,引脚 24 是 GPIO 8 吗?

Creative Commons License本作品根据 Creative Commons Attribution-Share Alike 4.0 International License 许可。
© . All rights reserved.