使用树莓派进行室温监测

起因

自从购买了树莓派之后,树莓派就呆在家里的角落里当一个无情的转发机器,恰好最近天气越来越热,所以想要一个东西统计一下家庭室温,就盯上了原本闲置在角落里的树莓派。(原本是想体验一把hassio做智能家居的)

树莓派温度传感器选择

一般我们在网上能够搜索到的教程中树莓派的温度传感器选择基本上有2种,一种是DS18B20这样的传感器,只能采集温度,使用起来感觉比较方便,只需要读取文件。还有一种是是DHT11/DHT22这种的,可以采集温度和湿度,DHT22精度更高,但是使用起来略微要复杂一点点。在神奇的淘宝上面可以买到上述芯片的封装模块,DS18B20模块大概5块钱1个DHT11/DHT22分别要10、20块钱一个。

具体不同的温度传感器对比可以参考https://randomnerdtutorials.com/dht11-vs-dht22-vs-lm35-vs-ds18b20-vs-bme280-vs-bmp180/

本篇文章使用的传感器为DS18B20。

传感器的连接

在某宝上买了一个传感器模块之后,我们需要把模块和树莓派进行连接,模块长这个样子

DS18B20模块

3个引脚从左到右分别是电源,数据,接地

树莓派4B GPIO示意图

然后再找一个对应型号的树莓派的GPIO图例进行连接就好,电源接入5V的那个

我这里接入的是2,7,6这三个接口

注意要用母对母的杜邦线进行连接(

在树莓派上读取数据

按照某些教程所讲的,应该要打开配置文件 sudo nano /boot/config.txt 在最后一行手动添加

dtoverlay=w1-gpio-pullup,gpiopin=<你连接的gpio>,保存并重启树莓派。

然后我发现我的/boot下面并没有config.txt,在查了一波资料之后发现是我没有挂载boot分区,通过fdisk -l找到boot分区 mount /dev/xxxxxxx /boot 之后就在/boot下发现了config.txt

在config.txt的最后加上一行

1
dtoverlay=w1-gpio

重启之后就能在/sys/bus/w1/devices/下面看到自己的设备,我这里叫28-01204409fc7c,进入目录后温度数据在temperature这个文本文件下面,直接读取这个文件就好了。

需要注意的是这个温度需要除以1000才是我们平时所熟知的温度单位。

数据的存储和可视化

数据的存储

这一块有很多的解决方案,我用的influxdb进行数据存储和可视化,参考官方文档安装influxdb之后,访问8086端口进行一些配置,然后创建一个bucket。为了方便,我这里采用了一个最简单的方案,用python写了一个简单的脚本,然后通过crontab没隔5分钟执行一次脚本。脚本的内容是读取传感器数据并写入influxdb里面,这样只需要调整cron表达式就能调整采集频率。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
from datetime import datetime

from influxdb_client import InfluxDBClient, Point, WritePrecision
from influxdb_client.client.write_api import SYNCHRONOUS

token = "<your_token>"
org = "<your_organization>"
bucket = "home-temperature"
url = "<your_url>"

read_temp = 0.0
with open("/sys/bus/w1/devices/28-01204409fc7c/temperature") as f:
read_temp = (float)(f.read())

real_temp = read_temp/1000.0
print(real_temp)

client = InfluxDBClient(url=url, token=token)
write_api = client.write_api(write_options=SYNCHRONOUS)
point = Point("home_temperature").tag("host", "<your_host>").field("temperature",real_temp).time(datetime.utcnow(), WritePrecision.NS)
write_api.write(bucket, org, point)

1
2
# 每五分钟执行一次
*/5 * * * * python3 /path/to/your/temperature.py

数据可视化

influxdb实例

通过influxdb2.0自带的界面就可以进行很好的可视化,点击Boards新建一个DashBoard,然后Add Cell,这里面通过点点点就能快速的生成查询语句和图像。

influxdb配置

当然如果会一些基本的查询语句,就可以用grafana等其他的展示界面了。

grafana配置

参考

https://shumeipai.nxez.com/2018/05/16/dht11-temperature-and-humidity-sensor-raspberry-pi.html

https://zhuanlan.zhihu.com/p/57087906

https://www.raspberrypi.org/forums/viewtopic.php?t=148529