树莓派 + MCP9808 + InfluxDB + Grafana:家庭温度监测系统
入手树莓派后研读 Eben Upton 的《Raspberry Pi User Guide》(尤其是 GPIO 章节),我开启了首个项目:家庭温度监测系统。本文详述首个迭代版本,使用树莓派、Adafruit MCP9808 模块、旧款 Mac Mini、InfluxDB、Grafana、Python 和 runit 进程监管。
传感器硬件
温度传感器选用 Adafruit MCP9808 模块,理由如下:
- 原生 I²C 接口 — 树莓派 GPIO 3 (SDA) 和 5 (SCL) 支持该总线。
- 宽电压范围 (2.7V–5.5V) — 兼容树莓派 3.3V 和 5V 电源轨。
- 高性价比 — 5 美元以下,适合初学者首个项目。
电路组装
MCP9808 模块基本组装完毕,仅需焊接 8Pin 排针。我用 GPIO 扩展板和面包板连接树莓派与传感器,简化接线并便于后续调整。核心连接:
- 电源 (VDD)
- 地 (GND)
- 数据 (SDA)
- 时钟 (SCL)
其余引脚(地址选择和报警)在单设备配置下悬空。
数据存储
时序数据采集便于趋势分析和关联外部事件。我选用 InfluxDB,因其专注时序数据且查询语言直观。数据库运行在 2009 年初款 Mac Mini (OS X 10.10) 上,通过 Homebrew 安装:
brew install influxdb
配置 InfluxDB 数据库
安装后,通过 Web 控制台 (默认端口 8083) 创建数据库和专用用户。同时建立名为 mcp9808_test 的数据库存储传感器读数。
树莓派配置
启用 I²C
树莓派默认不加载 I²C 模块。在 /etc/modules 添加以下两行并重启:
i2c-bcm2708
i2c-dev
用以下命令验证传感器检测:
sudo i2cdetect 1
传感器软件
我利用 Adafruit 的 MCP9808 Python 封装,它同时引入 I²C 抽象层。
安装构建依赖
sudo apt-get update
sudo apt-get install build-essential python-dev python-smbus
安装 Adafruit MCP9808 封装
cd ~/Downloads
git clone https://github.com/adafruit/Adafruit_Python_MCP9808
cd Adafruit_Python_MCP9808
sudo python setup.py install
读取、上报、循环
下面的 poll.py 脚本每分钟读取温度并写入 InfluxDB:
#!/usr/bin/python
import time
import Adafruit_MCP9808.MCP9808 as MCP9808
from influxdb import InfluxDBClient
# 为 InfluxDB 准备载荷
def temperature_data(degrees_c):
return [{
'points': [[c_to_f(degrees_c)]],
'name': 'Temperature Readings',
'columns': ['degrees_f']
}]
# 摄氏转华氏
def c_to_f(c):
return c * 9.0 / 5.0 + 32.0
# 初始化传感器
sensor = MCP9808.MCP9808()
sensor.begin()
# 采集间隔(秒)
capture_interval = 60.0
# 连接 InfluxDB(替换占位符为实际值)
influxClient = InfluxDBClient('', 8086, 'mcp9808', '', 'mcp9808_test')
# 持续循环
while True:
temp_c = sensor.readTempC()
print('Temperature {0:0.3} F'.format(c_to_f(temp_c)))
influxClient.write_points(temperature_data(temp_c))
time.sleep(capture_interval)
以 root 运行脚本以访问 GPIO:
sudo python /path/to/poll.py
用 runit 进行进程监管
为确保 poll.py 在重启和断电后持续运行,我配置 runit 作为进程监管器。详细设置步骤见原始项目文档。
总结
传感器、数据库、监控栈就绪,你现在拥有一个可靠、低成本的家庭温度记录仪。用 Grafana 可视化数据、设置告警、获取环境洞察。
制造工艺
- 树莓派+$5 I²C传感器打造温度记录仪
- 树莓派温度画像:Python+SQLite+LabVIEW实战
- 树莓派多路DS18B20 1-Wire温度监测:接线与编程全指南
- 树莓派温湿度网络监测站DIY全指南
- 树莓派2上使用DS18B20读取温度完整指南
- 树莓派专业温度监测:基于 DS18B20 传感器的完整指南
- 树莓派结合 Maxim 1-Wire 传感器与 DS2482 I2C 桥接器的多点温度测量
- 树莓派配合 TMP006 红外温度传感器:Python 库与安装指南
- 树莓派与 Python 构建远程温度传感器:分步实战指南
- 树莓派自制气象站:每日邮件推送温湿雨数据
- 树莓派精准监测机柜温度:DS18B20 多点部署实战
- 树莓派 I2C 接口 BMP085:高精度温度与气压读取