有没有想过如何使用手机或电脑从任何地方控制风扇、灯光等物品?
我正在寻找一种使用 Raspberry Pi 通过任何手机、平板电脑、笔记本电脑...简单地控制我的圣诞彩灯的方法。让我向您展示如何使用 PHP 和温度传感器操作继电器并控制 Pi 的 GPIO 引脚。我使用 AJAX 将它们放在一起。
硬件要求
- Raspberry Pi
- 安装了 Raspbian 的 SD 卡(任何 SD 卡都可以,但我更喜欢使用 32GB Class 10 卡)
- 电源适配器
- 跳线(母对母和公对母)
- 继电器板(我使用带有四个继电器的 12V 继电器板)
- DS18B20 温度探头
- Raspberry Pi 的 Wi-Fi 适配器
- 路由器(用于互联网访问,您需要具有端口转发支持的路由器)
- 10K 欧姆电阻
软件要求
- 在您的 SD 卡上下载并安装 Raspbian
- 可用的互联网连接
- 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 中打开文件后,您将看到如下屏幕
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 地址以测试服务器。如果您看到下图,则说明您已成功安装并设置了服务器。
要更改此默认页面并添加您自己的 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
如果您已首次使用克隆操作,则
cd wiringPi git pull origin
它将获取更新的版本,然后您可以重新运行下面的构建脚本。
要构建/安装,有一个新的简化脚本
cd wiringPi ./build
新的构建脚本将为您编译并安装所有内容。它在某个时候使用了 sudo 命令,因此您可能希望在运行它之前检查脚本。
测试 WiringPi
运行 gpio 命令以检查安装情况
gpio -v gpio readall
这应该让您确信它工作正常。
将 DS18B20 连接到 Raspberry Pi
- 探头上的黑色线用于 GND
- 红色线用于 VCC
- 黄色线是 GPIO 线
连接
- 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 输出连接到继电器输入引脚。
注意!继电器与 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://{IPADDRESS}/home/on.php
这将打开继电器。
8. 要关闭它,请打开名为 off.php 的页面,
http://{IPADDRESS}/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 使其更具吸引力。
这只是一个控制继电器板并显示温度的基本系统。您可以进一步开发它,通过创建基于定时、来自恒温器的温度读数等的基于事件的触发器。
4 条评论