Создайте домашний монитор температуры на Raspberry Pi с MCP9808, InfluxDB и Grafana
После приобретения Raspberry Pi и изучения руководства Эбена Аптона по Raspberry Pi — особенно разделов о GPIO — я приступил к первому проекту: системе мониторинга температуры дома. Этот пост детализирует первую итерацию с Raspberry Pi, платой Adafruit MCP9808, старым Mac Mini, InfluxDB, Grafana, Python и супервизором процессов runit.
Железо датчика
Для датчика температуры я выбрал плату MCP9808 от Adafruit. Выбор обусловлен:
- Нативный I²C интерфейс — GPIO Pi выводы 3 (SDA) и 5 (SCL) поддерживают нужную шину.
- Широкий диапазон напряжений (2,7–5,5 В) — совместим с 3,3 В и 5 В шинами Pi.
- Дешево — под $5, идеально для первого проекта новичка.
Сборка схемы
Плата MCP9808 поставляется почти собранной; единственная пайка — прикрепление 8-пинового хедера. Я использовал GPIO breakout и макетную плату для подключения Pi к датчику, упрощая проводку и облегчая будущие правки. Основные соединения:
- Питание (VDD)
- Земля (GND)
- Данные (SDA)
- Тактирование (SCL)
Остальные выводы — для выбора адреса и алертов — оставлены неподключенными для этой конфигурации с одним устройством.
Хранилище данных
Захват данных во времени позволяет анализировать тренды и коррелировать с внешними событиями. Я выбрал InfluxDB за фокус на временных рядах и интуитивный язык запросов. База работает на раннем 2009 Mac Mini (OS X 10.10) под Homebrew:
brew install influxdb
Настройка базы InfluxDB
После установки создал базу и выделенного пользователя через веб-консоль (порт 8083 по умолчанию). Также настроил базу mcp9808_test для хранения показаний датчика.
Конфигурация Raspberry Pi
Включение I²C
Pi не загружает модули I²C по умолчанию. Добавьте в /etc/modules и перезагрузитесь:
i2c-bcm2708
i2c-dev
Проверьте обнаружение датчика:
sudo i2cdetect 1
Программное обеспечение датчика
Использовал Python-обертку Adafruit для MCP9808, которая также подтягивает слой абстракции 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
# Подготовка payload для 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 для визуализации данных, настройки алертов и получения действенных инсайтов об окружении.
Производственный процесс
- Сборка логгера температуры на Raspberry Pi с $5 I2C датчиком
- Точный температурный профиль Raspberry Pi с Python, SQLite и LabVIEW
- Подключение нескольких DS18B20 1-Wire датчиков к Raspberry Pi для точного мониторинга температуры
- Raspberry Pi сетевой монитор температуры и влажности — руководство по DIY сборке
- Как считывать температуру с DS18B20 на Raspberry Pi 2
- Профессиональный мониторинг температуры на Raspberry Pi с датчиком DS18B20
- Измерение температуры на Raspberry Pi с датчиками Maxim 1-Wire и мостом DS2482 I2C
- ИК-датчик температуры TMP006 с Raspberry Pi: библиотека Python и руководство по настройке
- Создание удалённого датчика температуры на Raspberry Pi и Python — пошаговое руководство
- Создание метеостанции на Raspberry Pi с ежедневными email-отчётами о погоде