必赢手机app下载 / Blog / 必赢手机app下载 / 引脚并操作继电器,用树莓派和DS18B20做个汽车温度记录仪
必赢手机app下载 13

引脚并操作继电器,用树莓派和DS18B20做个汽车温度记录仪

用树莓派和DS18B20做个汽车温度记录仪[原创]

学习如何用 PHP 和温度传感器实现树莓派控制 GPIO
并操作继电器,你是否曾经想知道怎样使用手机或者电脑在任何地方控制你的风扇和灯等一些家用电器?

   
 很想知道夏日阳光暴晒下,汽车内的最高温度以及温度的变化情况。觉得用树莓派和DS18B20来实现应该很简单,于是就尝试捣鼓了一下,半天时间就搞定了,写下来和大家分享。以下原创内容欢迎网友转载,但请注明出处:

我现在想控制我的圣诞彩灯,是使用手机呢,还是使用平板电脑呢,或者是使用笔记本电脑呢?都不是,而是仅仅使用一个树莓派。让我来告诉你如何使用
PHP 和温度传感器实现树莓派控制 GPIO 引脚并操作继电器。我使用 AJAX
把它们整合在了一起。

一、树莓派读取DS18B20的温度值

必赢手机app下载 1

   
Raspbian系统已经能够支持DS18B20单总线(1-wire)温度传感器,只要简单配置就可以直接读取,无需自己编写底层驱动。

 

   配置过程也很简单:

硬件要求:

  • 树莓派
  • 安装有 Raspbian 系统的 SD 卡(任何一张 SD
    卡都可以,但是我更偏向使用大小为 32GB 等级为 class 10 的 SD 卡)
  • 电源适配器
  • 跳线(母对母跳线和公转母跳线)
  • 继电器板(我使用一个用于 12V 继电器的继电器板)
  • DS18B20 温度传感器
  • 树莓派的 Wi-Fi 适配器
  • 路由器(为了访问互联网,你需要有一个拥有端口转发的路由器)
  • 10KΩ 的电阻

 

   打开Raspbian系统的/boot/config.txt文件,在最后一行添加如下代码。

软件要求:

  • 下载并安装 Raspbian 系统到你的 SD 卡
  • 有效的互联网连接
  • Apache web 服务器
  • PHP
  • WiringPi
  • 基于 Mac 或者 Windows 的 SSH 客户端

 

   dtoverlay=w1-gpio-pullup,gpiopin=17

一般的配置和设置

1、 插入 SD 卡到树莓派,然后使用以太网网线将它连接到路由器;

2、 连接 WiFi 适配器;

3、 使用 SSH 方式登录到树莓派,然后使用下面的命令编辑 interfaces
文件:

  1. sudonano/etc/network/interfaces

这个命令会用一个叫做 nano
的编辑器打开这个文件。它是一个非常简单又易于使用的文本编辑器。如果你不熟悉基
Linux 的操作系统,可以使用键盘上的方向键来操作。

nano 打开这个文件后,你会看到这样一个界面:

必赢手机app下载 2

File editor nano

4、要配置你的无线网络,按照下面所示修改这个文件:

  1. iface lo inet loopback
  2. iface eth0 inet dhcp
  3. allow-hotplug wlan0
  4. auto wlan0
  5. iface wlan0 inet dhcp
  6. wpa-ssid "Your Network SSID"
  7. wpa-psk "Your Password"

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

到目前为止,一切都已经配置完成,接下来你需要做的就是使用命令重新加载网络:

  1. sudo service networking reload

(警告:如果你是使用远程连接的方式连接的树莓派,连接将会中断。)

 

 
 其中最后一个数字17表示:树莓派和DS18B20连接所使用的扩展引脚编号,即下表中BCM编码列中对应的数字。可根据需要选择树莓派40pin扩展口中的任意引脚。

软件配置

 

 必赢手机app下载 3

安装 Apache web 服务器

Apache
是一个受欢迎的服务器应用,你可以在树莓派安装这个程序让它提供网页服务。Apache
原本就可以通过 HTTP 方式提供 HTML 文件服务,添加其他模块后,Apache
还可以使用像 PHP 这样的脚本语言来提供动态网页的服务。

可以在命令行输入下面命令安装 Apache:

  1. sudoapt-get install apache2 -y

安装完成后,可以在浏览器地址栏输入树莓派的 IP 地址来测试 web
服务器。如果你可以获得下面图片的内容,说明你已经成功地安装并设置好了你的服务器。

必赢手机app下载 4

Successful server setup

要改变这个默认的页面和添加你自己的 html 文件,进入 var/www/html 目录:

  1. cd/var/www/html

添加一些文件来测试是否成功。

 

图1 树莓派40Pin引脚对照表

安装 PHP

PHP
是一个预处理器,这意味着它是当服务器收到网页请求时才会运行的一段代码。它开始运行,处理网页上需要被显示的内容,然后把网页发送给浏览器。不像静态的
HTML,PHP
在不同的环境下可以显示不同的内容。其他的语言也可以做到这一点,但是由于
WordPress 是用 PHP 编写的,有些时候你需要使用它。PHP 是 web
上一种非常受欢迎的语言,像 Facebok 和 Wikipeadia 这样的大型项目都是用
PHP 编写的。

使用下面的命令安装 PHP 和 Apache 软件包:

  1. sudoapt-get install php5 libapache2-mod-php5 -y

 

   
修改完config.txt后关机,将DS18B20的数据脚(TO-92封装的中间一个引脚)连接到树莓派的17pin,同时连接电源和地引脚。另外,还要在DS18B20的数据引脚和VCC之间连接一个4.7K的上拉电阻方可正常使用。

测试 PHP

创建文件 index.php

  1. sudonano index.php

在里面写入一些 PHP 内容:

  1. <?php echo"hello world";?>

保存文件,接下来删除 index.html,因为它比 index.php 的优先级更高:

  1. sudorm index.html

刷新你的浏览器,你会看到 “hello world”。这并不是动态的,但是它仍然由 PHP
提供服务。如果你在上面看到提原始的 PHP 文件而不是“hello
world”,重新加载和重启 Apahce(LCTT 译注,重启即可):

  1. sudo/etc/init.d/apache2 reload
  2. sudo/etc/init.d/apache2 restart

 

 
 重新开启树莓派后就可以在/sys/bus/w1/devices下找到名为28-XXXXXXX(XXXXXXX为实际DS18B20的编号)的目录了,其中的文件w1_slave包含了实际温度值,用cat指令查看文件内容如下图所示。

安装 WiringPi

为了可以对代码的更改进行跟踪,WiringPi 的维护采用
git。但假如你因为某些原因而没法使用
git,还有一种可以替代的方案。(通常你的防火墙会把你隔离开来,所以请先检查一下你的防火墙的设置情况!)

如果你还没有安装 git,那么在 Debian 及其衍生版本中(比如
Raspbian),你可以这样安装它:

  1. sudoapt-get install git-core

必赢手机app下载,若是你遇到了一些错误,请确保你的树莓派是最新版本的 Raspbian 系统:

  1. sudoapt-get update sudoapt-get upgrade

使用 git 获取最 WiringPi:

  1. sudogitclonegit://git.drogon.net/wiringPi

如果你之前已经使用过 clone 操作,那么可以使用下面命令:

  1. cd wiringPi &&git pull origin

这个命令会将会获取更新的版本,你然后可以重新运行下面的构建脚本。

有一个新的简化的脚本来构建和安装:

  1. cd wiringPi &&./build

这个新的构建脚本将会为你完成编译和安装 WiringPi。它曾一度需要使用 sudo
命令,所以在运行这它之前你可能需要检查一下这个脚本。

 

必赢手机app下载 5

测试 WiringPi

运行 gpio 命令来检查安装成功与否:

  1. gpio -v gpio readall

这将给你一些信心,软件运行良好。

 

图2 命令行读取温度数值

连接 DS18B20 传感器到树莓派

  • 传感器上的黑线用于 GND。
  • 红线用于 VCC。
  • 黄线是 GPIO 线。

必赢手机app下载 6

GPIO image

连线:

  • VCC 连接 3V 的 1 号引脚。
  • GPIO 线连接 7 号引脚(GPIO4)。
  • 地线连接 GND 的 9 号引脚。

 

   
其中第一行末尾都会有一个YES或NO,如果是YES,那第二行紧接着就是温度,以1/1000摄氏度为单位。

软件配置

为了用 PHP 使用 DS18B20
温度传感器模块,你需要执行下面的命令来激活用于树莓派上 GPIO 引脚和
DS18B20 的内核模块:

  1. sudomodprobe w1-gpio
  2. sudomodprobe w1-therm

你不想每次 Raspberry
重启后都手动执行上述命令,所以你想每次开机能自动启动这些模块。可以在文件
/etc/modules 中添加下面的命令行来做到:

  1. sudonano/etc/modules/

添加下面的命令行到它里面:

  1. w1-gpio
  2. w1-therm

为了测试,输入:

  1. cd/sys/bus/w1/devices/

现在输入 ls

你会看到你的设备信息。在设备驱动程序中,你的 DS18B20
传感器应该作为一串字母和数字被列出。在本例中,设备被记录为
28-000005e2fdc3。然后你需要使用 cd
命令来访问传感器,用你自己的序列号替代我的: cd 28-000005e2fdc3

DS18B20 会周期性的将数据写入文件 w1_slave,所以你只需要使用命令
cat来读出数据: cat w1_slave

这会生成下面的两行文本,输出中
t= 表示摄氏单位的温度。在前两位数后面加上一个小数点(例如,我收到的温度读数是
30.125 摄氏度)。

 

   
在使用中我发现,如果直接使用DS18B20芯片和树莓派相连,则由于DS18B20和树莓派的CPU过近,往往会使测量得到的温度偏高近10℃。因此我在某宝购买了一个带有金属外壳和较长连线的DS18B20,价格不过7-8元,但测量准确度大大提高。另外由于有较长的连线,4.7K电阻的焊接也变得很容易。完成的传感器如下图3所示。

连接继电器

1、 取两根跳线,把其中一根连接到树莓派上的 GPIO24(18
号引脚),另一根连接 GND 引脚。你可以参考下面这张图。

2、 现在将跳线的另一端连接到继电器板。GND 连接到继电器上的 GND,GPIO
输出线连接到继电器的通道引脚号,这取决于你正使用的继电器型号。记住,将树莓派上的
GND 与继电器上的 GND 连接连接起来,树莓派上的 GPIO
输出连接继电器上的输入引脚。

必赢手机app下载 7

Headers

注意!将继电器连接树莓派的时候小心一些,因为它可能会导致电流回流,这会造成短路。

3、 现在将电源连接继电器,可以使用 12V 的电源适配器,也可以将 VCC
引脚连接到什么破上的 3.3V 或 5.5V 引脚。

 

 必赢手机app下载 8

使用 PHP 控制继电器

让我们先写一个借助于 WiringPi 软件用来控制 Paspberry Pi 上 GPIO 引脚的
PHP 脚本。

1、在 Apache
服务器的网站根目录下创建一个文件,使用下面命令切换到该目录:

  1. cd/var/www/html

2、 新建一个叫 Home 的文件夹:

  1. sudomkdirHome

3、 新建一个叫 on.php的脚本

  1. sudonano on.php

4、 在脚本中加入下面的代码:

  1. <?php
  2. system("gpio-g mode 24 out");
  3. system("gpio-g write 24 1");
  4. ?>

5、 使用 CTRL+O 保存文件,CTRL+X 退出。

上面的代码中,你在第一行使用命令将 24 号 GPIO引脚设置为 output 模式:

  1. system("gpio-g mode 24 out");

在第二行,你使用 1 将 24 号引脚 GPIO
打开,在二进制中”1″表示打开,”0″表示关闭。

6、 为了关闭继电器,可以创建另外一个 off.php 文件,并用 0 替换 1

  1. <?php
  2. system(" gpio-g mode 24 out ");
  3. system(" gpio-g write 24 1 ");
  4. ?>

7、 如果你已经将继电器连接了树莓派,可以在浏览器中输入你的树莓派的 IP
地址,并在后面加上目录名和文件名来进行访问:

  1. http://{IPADDRESS}/home/on.php

这将会打开继电器。

8、 要关闭它,可以访问叫 off.php 的文件:

  1. http://{IPADDRESS}/home/off.php

现在你需要能够在一个单独的页面来控制这两样事情,而不用单独的刷新或者访问这两个页面。你可以使用
AJAX 来完成。

9、 新建一个 HTML 文件,并在其中加入下面代码:

  1. <html>
  2. <scriptsrc="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
  3. <scripttype="text/javascript">// <![CDATA[
  4. $(document).ready(function(){
  5. $('#on').click(function(){
  6. var a=newXMLHttpRequest();
  7. a.open("GET","on.php"); a.onreadystatechange=function(){
  8. if(a.readyState==4){if(a.status ==200){
  9. }else alert ("http error");}}
  10. a.send();
  11. });
  12. });
  13. $(document).ready(function()
  14. {$('#Off').click(function(){
  15. var a=newXMLHttpRequest();
  16. a.open("GET","off.php");
  17. a.onreadystatechange=function(){
  18. if(a.readyState==4){
  19. if(a.status ==200){
  20. }else alert ("http error");}}
  21. a.send();
  22. });
  23. });
  24. </script>
  25. <button id="on" type="button"``Switch Lights On </button>
  26. <button id="off" type="button"``Switch Lights Off </button>

10、 保存文件,进入你的 web
浏览器目录,然后打开那个网页。你会看到两个按钮,它们可以打开和关闭灯泡。基于同样的想法,你还可以使用
bootstrap 和 CSS 来创建一个更加漂亮的 web 界面。

 

图3 完成后的DS18B20探头

在这个网页上观察温度

1、 新建一个 temperature.php 的文件:

  1. sudonano temperature.php

2、 在文件中加入下面的代码,用你自己的设备 ID 替换 10-000802292522

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

3、 打开你刚刚创建的 HTML 文件,并创建一个新的带有 id 为 “screen” 的
<div>标签

  1. <divid="screen"></div>

4、 在这个标签后或者这个文档的尾部下面的代码:

  1. <script>
  2. $(document).ready(function(){
  3. setInterval(function(){
  4. $("#screen").load('temperature.php')
  5. },1000);
  6. });
  7. </script>

其中,#screen 是标签 <div>id ,你想在它里面显示温度。它会每隔
1000 毫秒加载一次 temperature.php 文件。

我使用了 bootstrap
框架来制作一个漂亮的面板来显示温度,你还可以加入多个图标和图形让网页更有吸引力。

这只是一个控制继电器板并显示温度的基础的系统,你可以通过创建基于定时和从恒温器读数等基于事件触发来进一步地对系统进行开发。

( 题图:opensource.com)


作者简介:

Abdul Hannan Mustajab: 我 17
岁,生活在印度。我正在追求科学,数学和计算机科学方面的教育。我在
spunkytechnology.com
上发表关于我的项目的博客。我一直在对使用不同的微控制器和电路板的基于物联网的
AI 进行研究。


via:

作者:Abdul Hannan
Mustajab
译者:zhousiyu325
校对:wxy

本文由 LCTT
原创编译,Linux中国 荣誉推出

本文永久更新链接地址:http://www.linuxidc.com/Linux/2017-06/144743.htm

必赢手机app下载 9

二、用Python读取并保存温度值

     
编写一个简单的Python程序,每分钟读取一个温度值,并将其按照固定格式保存在文件中,方便查看和分析。具体代码如下所示,其核心思路是每5秒查看一次系统时间,如果达到1分钟就读取并保存一次数据。

必赢手机app下载 10必赢手机app下载 11

 1 # -*- coding: utf-8 -*-
 2 import time
 3 while True:
 4     time.sleep(5)#休眠5秒再次查看有没有到分钟数字发生改变
 5     year=time.localtime(time.time()).tm_year
 6     mon=time.localtime(time.time()).tm_mon
 7     mday=time.localtime(time.time()).tm_mday
 8     hour=time.localtime(time.time()).tm_hour
 9     min=time.localtime(time.time()).tm_min
10     sec=time.localtime(time.time()).tm_sec
11     if sec <= 5:
12         tp=open("/home/pi/temp_data/temp.csv","a")
13         #用末尾添加的方式在temp.csv文件的末尾添加新的时间和温度数据
14         tp.write(str(year))
15         tp.write("/")
16         tp.write(str(mon))
17         tp.write("/")
18         tp.write(str(mday))
19         tp.write("/")
20         tp.write(str(hour))
21         tp.write("/")
22         tp.write(str(min))
23         tp.write("/")
24         tp.write(str(sec))
25         tp.write(",")#csv文件的分隔符
26        #读取温度传感器
27         tfile=open("/sys/bus/w1/devices/28-000003e6d2d2/w1_slave",'r')
28         lines=tfile.readlines()
29         tfile.close()
30         k=lines[1].find('t=')
31         temp_str = lines[1][k+2:k+7]
32         temperature=float(temp_str)/1000.0
33         print(temperature)
34         tp.write(str(temperature))
35         tp.write("n")
36         tp.close()
37  

View Code

三、将保存温度值配置成系统启动任务

   
由于汽车内没有显示器,也不方便每次开机还要用终端启动上边的Python程序。因此有必要将这个程序配置为开机就运行的系统任务。

 
 首先
,安装用于配置和查看启动任务的chkconfig,在终端中更实用如下命令行:sudo
apt-get install chkconfig

   其次,编写启动Python程序的脚本tmp_rec.sh如下所示。

#!/bin/bash

python3 /home/pi/python_ex/DS18B20/wr_time_temp.py

    为这个脚本增加可执行权限,并将其拷贝到/etc/init.d/下

mv tmp_rec.sh /etc/init.d/

chmod +r /etc/init.d/tmp_rec.sh

   第三,将tmp_rec.sh添加到启动运行的服务进程中:

chkconfig –add tmp_rec.sh

     添加后可以通过以下命令行查看该服务的状态:

chkconfig –list tmp_rec.sh

   第四,如果需要关闭该启动运行的服务则可以执行以下命令行:

chkconfig –del tmp_rec.sh

四、记录温度车内温度变化曲线

   
将连接了DS18B20的树莓派放入车内,采用点烟器车载充电器的USB口供电,即可实现车内温度变化曲线记录功能。

必赢手机app下载 12

图4 车内连接树莓派和DS18B20

   
 使用时值得注意的是,树莓派3没有实时时钟,每次上电需要连接网络获取时间来作为系统时间。而本记录程序在温度的同时还要记录当前时间。因此除非你的车停在有WIFI信号的地方,否则需要打开手机热点供树莓派连接网络获取系统时间。

   
 前面的Python程序在记录温度数据文件(*.csv)时采用了ASCII码,因此可以使用Matlab、Excel和Python
matplot等任意流行的绘图工具来绘制车内温度变化曲线。 

 必赢手机app下载 13

图5 车内温度曲线

   
 由上图可以基本看出一天中车内温度变化趋势,中午10:00左右放入后数小时达到最高值29℃左右,随后由于下午和晚间有雨,从而导致温度逐渐降低。刚开始阶段的温度骤降,是由于手握DS18B20的原因造成的。另外由于下雨全天温度峰值并不如想象中高,下次可以选择一个晴朗的日子再次测试。

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注

相关文章

网站地图xml地图