湿度,温度和压力是建立任何气象站和测量环境条件的三个基本参数。我们之前已经使用Arduino构建了一个迷你气象站,这次我们使用Raspberry Pi扩展了气象站。这个基于IoT的项目旨在使用Raspberry Pi在LCD以及Internet服务器上显示LCD上的当前湿度,温度和压力参数,这使其成为Raspberry Pi Weather Station。您可以在任何地方安装此设置,并可以通过Internet在世界任何地方监视该位置的天气状况,它不仅可以显示当前数据,还可以以图表的形式显示过去的值。
我们已经使用DHT11湿度和温度传感器来感测温度,并使用BM180压力传感器模块来测量大气压力。该摄氏温度计和百分湿度计通过LCD显示屏显示环境温度和湿度,大气压力以毫巴或hPa(百帕)为单位显示。所有这些数据都通过Internet发送到ThingSpeak服务器,以进行实时监控。请检查本教程结尾处提供的“演示视频和Python程序”。
工作和ThingSpeak设置:
这个基于物联网的项目分为四个部分。首先,DHT11传感器感应湿度和温度数据,而BM180传感器测量大气压力。其次,Raspberry Pi使用单线协议读取DHT11传感器模块的输出,并使用I2C协议读取BM180压力传感器的输出,并将这两个传感器值提取为合适的百分比(湿度),摄氏度(温度),百帕斯卡或毫巴(压力)值。 。第三,这些值通过使用Raspberry Pi 3的内置Wi-Fi发送到ThingSpeak服务器。最后 ThingSpeak 分析数据并以Graph形式显示。 LCD也用于本地显示这些值。
ThingSpeak 为基于物联网的项目提供了非常好的工具。通过使用ThingSpeak网站,我们可以使用ThingSpeak提供的频道和网页来监视数据并通过Internet控制我们的系统。ThingSpeak 通过触发反应来 “收集” 来自传感器的数据, “分析并可视化” 数据和 “行为”。前面我们已经详细解释了有关向ThingSpeak发送数据的信息,您可以在此处进行检查。在这里,我们简要说明如何在此Raspberry Pi Weather气象站中使用ThingSpeak。
首先,您需要在ThingSpeak网站上创建帐户并在其中创建“新频道”。在新通道中,您必须为要监视的数据定义一些字段,例如在此项目中,我们将为湿度,温度和压力数据创建三个字段。
现在单击“ API密钥”选项卡并 保存Write和Read API密钥,这里我们仅使用Write密钥。您需要在代码中的“ key”变量中复制此键。
之后,点击“数据导入/导出”,然后 复制更新频道供稿GET请求URL,即:
api.thingspeak.com/update?api_key=30BCDSRQ52AOI3UA&field1=0
现在,我们需要在Python代码中使用此“ Feed获取请求URL”打开“ api.thingspeak.com”,然后使用此Feed请求作为查询字符串发送数据。在发送数据之前,用户需要使用程序中的变量在此查询字符串中输入温度,湿度和压力数据,请在本文结尾处检查代码。
URL ='https://api.thingspeak.com/update?api_key=%s'%key finalURL = URL +“&field1 =%s&field2 =%s”%(humi,temp)+“&field3 =%s”%(压力)
DHT11的工作基于单线串行通信,用于从DHT11提取数据。在这里,我们已使用AdaFruit DHT11库将DHT11与Raspberry Pi接口。Raspberry Pi在这里收集来自DHT11的湿度和温度数据以及来自BMP180传感器的大气压力,然后将其发送到16x2 LCD和ThingSpeak服务器。ThingSpeak以Graph形式显示数据,如下所示:
您可以 在此处了解有关DHT11传感器及其与Arduino接口的更多信息 。
电路原理图:
Raspberry Pi配置和Python程序:
我们在 这里使用 Python语言编写程序。在编码之前,用户需要配置Raspberry Pi。您可以查看我们以前的教程,以了解《 Raspberry Pi入门》和《在Pi中安装和配置Raspbian Jessie OS》。
首先,我们需要安装Adafruit Python DHT Sensor Library文件才能在Raspberry Pi上运行此项目。为此,我们需要遵循给定的命令:
sudo apt-get install git-core sudo apt-get update git clone https://github.com/adafruit/Adafruit_Python_DHT.git cd Adafruit_Python_DHT sudo apt-get install build-essential python-dev sudo python setup.py安装
此后,用户需要通过进入“ RPi软件配置”来启用Raspberry Pi I2C:
须藤raspi-config
然后转到“高级选项”,选择“ I2C”并“启用”它。
该项目的编程部分在执行所有操作中起着非常重要的作用。首先,我们包括所有必需的库,初始化变量并定义LCD和DHT11的引脚。
import sys import RPi.GPIO as GPIO import os import Adafruit_DHT import urllib2 import smbus import time from ctypes import c_short#注册地址regCall = 0xAA……………..
在 def main(): 函数中,以下代码用于将数据发送到服务器,并在 while 循环中连续通过LCD显示。
def main():打印'System Ready…'URL ='https://api.thingspeak.com/update?api_key=%s'%键打印“ Wait….”,而True:(humi,temp )= readDHT()(压力)= readBmp180()lcdcmd(0x01)lcdstring(“ Humi#Temp#P(hPa)”)lcdstring(humi +'%'+“%sC%s”%(温度,压力))finalURL = URL +“&field1 =%s&field2 =%s”%(humi,temp)+“&field3 =%s”%(pressure)打印finalURL s = urllib2.urlopen(finalURL);打印humi +“” + temp +“” +压力s.close()time.sleep(10)
对于LCD, def lcd_init() 函数用于以四位模式初始化LCD, def lcdcmd(ch) 函数用于将命令发送到LCD, def lcddata(ch) 函数用于将数据发送到LCD和 def lcdstring(Str )功能用于将数据字符串发送到LCD。您可以在随后给出的代码中检查所有这些功能。
给定def readDHT() 函数用于读取DHT11传感器:
def readDHT():humi,temp = Adafruit_DHT.read_retry(Adafruit_DHT.DHT11,DHTpin)return(str(int(humi)),str(int(temp)))
def readBmp180 函数用于从BM180传感器读取压力。BM180传感器也可以给出温度,但是这里我们仅将其用于计算压力。
def readBmp180(addr = deviceAdd):值= bus.read_i2c_block_data(addr,regCall,22)#读取校准数据#将字节数据转换为字值AC1 = convert1(value,0)AC2 = convert1(value,2)AC3 = convert1 (值4)AC4 = convert2(值6)……………………..
因此,这是基本的Raspberry Pi气象站,您可以进一步扩展它以测量各种与天气相关的参数,例如风速,土壤温度,照度(勒克斯),降雨量,空气质量等。