使用树莓派、DHT22传感器和ThingSpeak IoT平台实时显示温度和湿度数据。
这个项目中使用的东西
DHT22温度传感器 1个
面包板(通用) 1个
10kΩ电阻 1个
公/母杜邦线 3根
开始
介绍
该项目使用Raspberry Pi 2从DHT22传感器收集温度和湿度数据,然后将其上载到ThingSpeak物联网平台以进行实时显示。
本文主要用作该项目的文档,但也可以用作其他教程。它假定您是初学者,并且您正在运行没有屏幕的Raspberry Pi(称为无头设置)。它分为三个主要部分,其中第四部分是可选的:
- 第1部分:设置Raspberry Pi 2
- 第2部分:配置Adafruit DHT22传感器
- 第3部分:ThingSpeak入门
- 第4部分:运行电子邮件通知脚本(可选)
第1部分:设置Raspberry Pi 2
以下提供的说明适用于Mac OSX。可以在Raspberry Pi(RPi)的官方文档中找到其他操作系统的说明:https ://www.raspberrypi.org/documentation/
步骤1.下载操作系统映像
从以下网址下载最新的Raspbian“精简版”镜像:https //www.raspberrypi.org/downloads/raspbian/
下载.zip文件后,将其解压缩以获取将要写入micro SD卡的图像文件(.img)。
步骤2.将映像写入SD卡
为了找到您的SD卡的磁盘标识符(例如disk4),请打开终端并运行:
diskutil list
使用此磁盘标识符,卸下SD卡以准备向其复制数据:
diskutil unmountDisk /dev/disk<disk# from diskutil>
将数据复制到您的SD卡中:
sudo dd bs=1m if=image.img of=/dev/rdisk<disk# from diskutil>
其中image.img是最新的Raspian图像的文件名,例如:
sudo dd bs=1m if=2016-09-23-raspbian-jessie-lite.img of=/dev/rdisk<disk# from diskutil>
将SD卡插入Raspberry Pi,然后使用Micro USB电缆或DC适配器供电。
2017年9月更新:
将图像写入SD卡的一种更简单的方法是使用程序Etcher。可以从以下网址下载:https //etcher.io/
程序打开后,您只需选择图像,确认SD卡驱动器,然后点击Flash!瞧!大功告成
步骤3:启用SSH
默认情况下,最新的Raspbian版本(2016年12月起)已禁用SSH。要启用SSH,您必须在SD卡上创建一个名为“ ssh” 的新文件。确保您的文件没有.txt等扩展名非常重要。
在macOS中,您可以通过打开终端窗口并键入以下内容来轻松创建此文件:
touch ssh
接下来,将此无扩展名文件拖放到SD卡的根目录中,就可以完成!当Raspberry Pi启动时,它将检测SSH文件并启用访问。
步骤4:配置Raspberry Pi
在无显示器安装中,可以使用SSH从同一网络上的另一台计算机或设备远程访问Raspberry Pi的命令行。
在这种情况下,树莓派通过以太网连接到本地网络,并启用Internet共享。下面列出了有关如何启用Internet共享的说明:
- 打开共享首选项(选择Apple菜单>系统首选项,然后单击共享)。
- 选择“ Internet共享”复选框。
- 单击“共享您的连接来源”弹出菜单,然后选择Wi-Fi作为您要共享的Internet连接。
- 在“收件人使用的计算机”列表中,选择要如何共享与Raspberry Pi的Internet连接。在这种情况下,Internet连接将通过以太网共享。
一旦通过以太网连接,树莓派通常将绑定到192.168.2.* 范围内的IP地址。您可以使用Nmap扫描本地网络来找到其IP。您可能的目标是具有开放端口22(SSH通过此端口连接)的活动IP地址。
nmap 192.168.2.*
- 注意:如果需要,请使用Homebrew安装Nmap:
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
brew install nmap
找到树莓派的本地IP地址后,打开终端并使用默认的用户名/密码组合“ pi”和“ raspberry”建立SSH连接:
ssh pi@192.168.2.#
- 注意:如果遇到警告:“警告:远程主机标识已更改!”,则只需要清除known_hosts 文件。运行以下代码,并删除与树莓派关联的IP地址有关的代码行。
sudo nano /Users/<username>/.ssh/known_hosts
步骤5:更新Raspberry Pi
首次登录SSH时,建议使用以下命令更新/升级树莓派:
sudo apt-get update
sudo apt-get dist-upgrade
df -h #to check space
sudo apt-get clean #to removed archived .deb files
如果您想更改pi用户的默认密码,可以通过运行以下命令并选择选项2来访问树莓派软件配置工具:
sudo raspi-config
第6步:设置Wifi
官方指南:https //www.raspberrypi.org/documentation/configuration/wireless/wireless-cli.md
如果您打算使用无线USB网卡将RPi连接到Internet,则必须在wpa_supplicant.conf 文件中输入wifi连接的详细信息。
为此,请运行:
sudo nano /etc/wpa_supplicant/wpa_supplicant.conf
然后以以下格式输入详细信息:
network={
ssid="ESSID"
psk="Your_wifi_password"
}
如果您希望Raspberry Pi漫游并连接到开放网络,请将以下内容附加到wpa_supplicant.conf :
network={
key_mgmt=NONE
priority=-999
}
最后,重新启动Raspberry Pi,并使用Nmap或登录到路由器并搜索与“ raspberrypi”主机名关联的IP地址来发现其新IP地址。通过Wi-Fi连接,RPI通常将绑定到192.168.1。*范围内的地址。
sudo reboot
ssh pi@192.168.1.*
第2部分:配置Adafruit DHT22传感器
所述DHT22 是一个基本的,低成本的数字温湿度传感器,它采用了电容式湿度传感器,并测量周围空气和输出的数据引脚上的数字信号的热敏电阻。
步骤1:接线图
如下图所示,DHT22需要将引脚1连接到3.3V电源,将引脚2连接到RPi上所需的通用输入/输出(GPIO)引脚,并将引脚4接地(GND)。在引脚1和引脚2之间放置一个10kΩ电阻。未使用引脚3。
通过检查下图中的GPIO头,我们可以确定Raspberry Pi上的相应连接如下:
- 引脚1:3.3 V
- 引脚6:GND
- 引脚16:GPIO 23(可以选择其他GPIO引脚)
识别出正确的引脚后,就可以在物理上构建电路,并且最终看起来可能类似于下图:
步骤2:下载Adafruit DHT库
接线完成后,下一步就是将Adafruit的DHT库下载到RPi,这是从传感器读取温度值所必需的。这还要求我们首先下载一些Python和git软件包:
sudo apt-get install python-dev
sudo apt-get install python-pip
sudo apt-get install git
git clone https://github.com/adafruit/Adafruit_Python_DHT.git
cd Adafruit_Python_DHT
sudo python setup.py install
一旦安装了DHT库,下一步就是编写脚本以从传感器收集数据并将其上传到Internet。为此,我们将利用ThingSpeak物联网平台。
第3部分:ThingSpeak入门
官方指南:https ://www.mathworks.com/help/thingspeak/getting-started-with-thingspeak.html
ThingSpeak是一个物联网(IoT)平台,支持从Arduino和Raspberry Pi等传感器收集的数据的收集,存储,分析和可视化。
ThingSpeak将数据存储在通道中,每个通道最多可以具有8个数据字段以及位置和状态字段。数据可以每15秒或更长时间发送一次到ThingSpeak。
ThingSpeak配置
步骤1.注册新的用户帐户
第2步:创建新频道
- 选择“频道”,“我的频道”,然后选择“新频道”。
步骤3:输入频道信息
- 名称:Raspberry Pi + DHT22温湿度传感器
- 描述:DHT22温湿度传感器由运行Python脚本的Raspberry Pi 2驱动。
- 栏位1:湿度(%)
- 字段2:温度(°C)
步骤4:记录写入API密钥
- 创建通道后,单击“ API密钥”并记下“写入API密钥”。我们稍后将在脚本中使用此值。
步骤5:脚本创建
在Raspberry Pi的/ home / pi目录中创建一个文件夹,然后通过运行以下命令创建一个空的Python脚本文件:
mkdir ThingSpeak
cd ThingSpeak
sudo nano dht22.py
接下来,复制下面列出的代码(或从本教程结尾的附件dht22.py中复制代码)。在“ myAPI”变量中输入您的API代码。按Ctrl + X退出编辑器,并在出现提示时选择“ Y”保存文件。
"""
dht22.py
Temperature/Humidity monitor using Raspberry Pi and DHT22.
Data is displayed at thingspeak.com
Original author: Mahesh Venkitachalam at electronut.in
Modified by Adam Garbo on December 1, 2016
"""
import sys
import RPi.GPIO as GPIO
from time import sleep
import Adafruit_DHT
import urllib2
myAPI = "<your API code here>"
def getSensorData():
RH, T = Adafruit_DHT.read_retry(Adafruit_DHT.DHT22, 23)
return (str(RH), str(T))
def main():
print 'starting...'
baseURL = 'https://api.thingspeak.com/update?api_key=%s' % myAPI
while True:
try:
RH, T = getSensorData()
f = urllib2.urlopen(baseURL +
"&field1=%s&field2=%s" % (RH, T))
print f.read()
f.close()
sleep(300) #uploads DHT22 sensor values every 5 minutes
except:
print 'exiting.'
break
# call main
if __name__ == '__main__':
main()
接下来,要测试脚本是否正常运行,可以使用以下代码:
sudo python dht22.py
如果成功,您应该看到两行,如下所示:
pi@raspberrypi:~/ThingSpeak $ python dht22.py
starting...
5
在这种情况下,数字“ 5”代表在ThingSpeak频道中输入的内容。每当脚本上载数据时,该值就会增加。
步骤6:在启动时运行脚本
如果您计划让Raspberry Pi自动运行,则最好在树莓派通电时启动它。一种方法是添加cron作业。下面的命令将启动脚本,并使状态输出定向为“ null”(即忽略),以确保其在后台运行。它还将每5分钟检查一次脚本是否正在运行,并在必要时重新启动它。
crontab -e
*/5 * * * * pgrep -f dht22.py || nohup python /home/pi/ThingSpeak/dht22.py > test.out
确保脚本始终运行的另一种方法是从上方接受命令,将其输入到自己的脚本中,然后添加cron作业,该作业将定期检查并在必要时重新启动脚本。这可以通过添加以下cronjob任务并使用此项目附带的check_script.sh 文件来完成:
crontab -e
*/5 * * * * sh /home/pi/ThingSpeak/script_check.sh &>/dev/null
有关重新启动脚本的更多讨论可以在这里找到:http : //unix.stackexchange.com/questions/107939/how-to-restart-the-python-script-automatically-if-it-is-killed-or-dies
- 注意:如果您使用Sublime Text编辑代码,请确保不要使用制表符重新缩进,因为这可能会破坏Python的结构并使脚本无法运行。
步骤7:验证ThingSpeak渠道数据上传
如果脚本按预期运行,则应该能够实时查看数据上传。您可以提高脚本上载数据以验证其正常工作的频率,而不必等待默认的5分钟。
ThingSpeak具有许多可自定义的数据显示方式功能,您可以在此处了解更多信息:
https://www.mathworks.com/help/thingspeak/create-a-chart.html
第4部分:运行电子邮件通知脚本(可选)
运行Raspberry Pi Lite安装程序的一个问题是缺少有关其当前IP地址的信息,如果发生Internet或断电,这可能会改变。一个有用的解决方案是让Raspberry Pi每次重新启动或为无线适配器分配新的IP地址时都发送一封通知电子邮件。
为了将此功能添加到您的RPi,我们将利用邮件实用程序和Gmail电子邮件地址来通知用户IP地址的任何更改。
步骤1:必需的软件包安装
第一步是更新软件包列表并安装mailutils和ssmtp软件包:
sudo apt-get update
sudo apt-get install mailutils ssmtp
步骤2:编辑配置文件
接下来,要将特定于Gmail帐户的信息添加到sstmp.conf 文件中,请运行:
sudo nano /etc/ssmtp/ssmtp.conf
我们有兴趣更改/添加以下四行代码的信息:
mailhub=smtp.gmail.com:587
AuthUser=<emailaddress>@gmail.com
AuthPass=<password>
UseSTARTTLS=YES
警告:输入ssmtp.conf文件时,您的密码不受保护。
强烈建议创建一个专用于此目的的电子邮件地址,而不必担心安全漏洞。
注意:还需要允许安全性较差的应用访问您的Gmail帐户。可以使用以下指南来完成:
https://support.google.com/accounts/answer/6010255?hl=zh_CN
退出时保存更改,然后通过运行以下命令打开realiases文件:
sudo nano /etc/ssmtp/revaliases
添加下面显示的最后一行代码和您的电子邮件地址。
# sSMTP aliases
#
# Format: local_account:outgoing_address:mailhub
#
# Example: root:your_login@your.domain:mailhub.your.domain[:port]
# where [:port] is an optional port number that defaults to 25.
root:<email address>@gmail.com:smtp.gmail.com:587
步骤3:IP地址检查脚本
我们将创建两个不同的IP检查脚本。每隔15分钟运行一次,以验证RPi的IP地址没有更改,而仅当RPi重新启动时,才运行一个。请注意:脚本当前仅用于监视对wlan0的更改。
首先,在/ home / pi目录中创建一个文件夹来存放脚本:
mkdir ipcheck
进入文件夹,创建两个脚本文件并使它们都可执行:
sudo nano ipcheck.sh
sudo nano ipcheck2.sh
sudo chmod +x ipcheck.sh
sudo chmod +x ipcheck2.sh
最后,在记住指定要发送通知的电子邮件地址的同时,将代码复制到以下部分的每个脚本(或本教程随附的脚本)中。
代码用于:ipcheck.sh
#! /bin/sh
sleep 20
SUBJ="Warning: Raspberry Pi - new IP Address"
SUBJ2="Warning: Raspberry Pi was restarted"
EMAIL="<email>@gmail.com"
ip1=""
ip2=""
read ip1 < /home/pi/ipcheck/ip.txt
ip2=$(/sbin/ip -o -4 addr list wlan0 | awk '{print $4}' | cut -d/ -f1)
if [ "$ip1" = "$ip2" ]
then
echo "Your Raspberry was restarted, the IP Address is the same as before: $ip2"| mail -s "$SUBJ2" $EMAIL;
else
echo "$ip2" > /home/pi/ipcheck/ip.txt;
echo "New IP Address was assigned to your Raspberry Pi: $ip2" | mail -s "$SUBJ" $EMAIL;
exit;
fi
ipcheck2.sh的代码
#! /bin/sh
SUBJ="Warning: Raspberry Pi - new IP Address"
EMAIL="<email>@gmail.com"
ip1=""
ip2=""
read ip1 < /home/pi/ipcheck/ip.txt
ip2=$(/sbin/ip -o -4 addr list wlan0 | awk '{print $4}' | cut -d/ -f1)
if [ "$ip1" = "$ip2" ]
then
exit
else
echo "$ip2" > /home/pi/ipcheck/ip.txt;
echo "New IP Address was assigned to your Raspberry Pi: $ip2" | mail -s "$SUBJ" $EMAIL;
exit
fi
步骤4:将脚本添加到Cronjob
以下cronjob条目将确保脚本在重启后每隔15分钟通过电子邮件发送IP地址更改信息
跑:
crontab -e
加:
@reboot /home/pi/ipcheck.sh
0,15,30,45 * * * * sh /home/pi/ipcheck2.sh &>/dev/null
结论
如果一切都按计划进行,那么现在应该让Raspberry Pi将数据上传到ThingSpeak网站!
原创文章,转载请注明: 转载自科技爱好者博客
本文链接地址: 树莓派物联网:使用Thingspeak和DHT22传感器显示温湿度信息 (https://www.tujing.site/4299)
如果博客对您有帮助,请给我 赞助