Датчик температуры Raspberry Pi
Несколько недель назад я купил Raspberry Pi. После прочтения Руководства пользователя Raspberry Pi Эбена Аптона, особенно двух глав, на которых он сосредоточивает внимание на GPIO, у меня возникла идея для моего первого проекта. В публикации рассказывается о первой итерации проекта мониторинга температуры в доме, который я собрал с использованием Raspberry Pi, MCP9808, старого Mac Mini (начало 2008 г.), InfluxDB, Grafana, немного Python и runit.
Аппаратное обеспечение датчика
Для этого проекта я решил использовать плату MCP9808 Breakout Board от Adafruit - отличный источник компонентов, схем и идей. Я выбрал этот агрегат по нескольким причинам:
- Он управляется через I²C - GPIO Raspberry Pi поддерживает требуемую шину I²C через контакты 3 (последовательная линия данных, SDA) и 5 (последовательная линия синхронизации, SCL).
- Он работает в диапазоне питания и логики от 2,7 В до 5,5 В - Raspberry Pi обеспечивает линии питания с напряжением 3,3 и 5 В
- Это было довольно дешево (<5 долларов США) - мои навыки пайки не самые лучшие.
Сборка схемы
Плата MCP9808 Breakout Board от Adafruit в основном собирается. Этот конкретный комплект требует только, чтобы вы припаяли прилагаемую 8-контактную полосу заголовка к коммутационной плате.
Я использовал GPIO Breakout и макетную плату для подключения Raspberry Pi к MCP9808; этим подходом немного проще управлять, исправить ошибки проводки и он менее долговечен, чем припаивание датчика к Raspberry Pi. Для считывания температуры с MCP9808 требуются только вывод питания, заземление и выводы I²C SDA и SCL:
Остальные, необязательные, контакты в этом проекте не используются. Они предоставляют обходные пути для решения проблем I²C, когда несколько устройств используются на одной шине, и вывод для предупреждения, если датчик считывает температуру выше или ниже порогового значения.
Хранилище данных
Я знал, что хочу поддержать проект постоянным хранилищем данных. Это позволило бы мне собирать данные, а затем анализировать их на предмет общих тенденций, сопоставить модели отопления / охлаждения с погодными явлениями и т. Д.
Я выбрал InfluxDB из-за его языка запросов и модели хранения, ориентированного на время. Я установил Influx на старый Mac Mini (начало 2009 года с OSX 10.10), который сидел у меня под столом. Получение и запуск базовой установки InfluxDB хорошо задокументировано; поскольку я уже использую Homebrew для управления большинством своих сторонних зависимостей и существует формула для InfluxDB, установка была завершена с помощью команды brew install Influxdb
.
Настроить базу данных InfluxDB
Установив InfluxDB, я настраиваю базу данных для хранения показаний температуры и пользователя базы данных для управления ею. Для этого я использовал веб-консоль своего экземпляра InfluxDB; по умолчанию он работает на порту 8083
хоста InfluxDB.
Конфигурация Raspberry Pi
Теперь, когда оборудование и хранилище данных настроены, для Raspberry Pi «из коробки» необходимо немного настроить ОС для связи с MCP9808 по шине I²C.
Включить I²C
По умолчанию Raspberry Pi не загружает необходимые модули ядра для использования шины I²C. Чтобы включить связь I²C через GPIO, я добавил следующие две строки в / etc / modules
i2c-bcm2708i2c-dev
Затем перезагрузите Raspberry Pi
перезагрузка sudo
После инициализации системы она должна быть способна распознать, что MCP9808 подключен. Я использовал i2cdetect
cli для этого:
sudo i2cdetect 1 # канал 1 используется по умолчанию в модели Raspberry Pi B +
Программное обеспечение датчика
Adafruit предоставляет оболочку MCP9808 и абстракцию I²C. Я использовал оба из них в основном скрипте драйвера для этого проекта.
Установить зависимости сборки
sudo apt-get updatesudo apt-get install build-essential python-dev python-smbus
Установите оболочку Adafruit_Python_MCP9808
cd ~ / Downloadsgit clone https://github.com/adafruit/Adafruit_Python_MCP9808/blob/master/Adafruit_MCP9808cd Adafruit_MCP9808sudo python setup.py install код>
При этом также будет установлена абстракция I²C, поскольку от нее зависит оболочка MCP9808.
Прочитать, сообщить, повторить
Затем я написал небольшой скрипт на Python, poll.py
, чтобы читать с MCP9808 через определенный промежуток времени и сообщать о своих результатах в экземпляр базы данных InfluxDB mcp9808_test.
#! / usr / bin / python import time import Adafruit_MCP9808.MCP9808 as MCP9808 из influxdb import InfluxDBClient # Создает необходимую полезную нагрузку для публикации # данных о температуре в InfluxDB def temperature_data (deg_c):return [{'points':[[c_to_f (deg_c)]]], 'name':'Temperature Readings', 'columns':['deg_f']}] # Преобразует представление температуры в градусах # в Farenheight def c_to_f (c):return c * 9.0 / 5.0 + 32.0 # Инициализирует связь с MCP9808 # по шине I2C. sensor =MCP9808.MCP9808 () sensor.begin () # Определяет интервал, в течение которого будет выполняться логика захвата capture_interval =60.0 # Каждые 60 секунд # Устанавливает соединение с mcp9808_test # InfluxDB instance InfluxClient =InfluxDBClient ('
Теперь его можно запустить с помощью следующей команды; обратите внимание, что сценарий необходимо запускать от имени root
пользователь Raspberry Pi для взаимодействия с GPIO.
sudo python /poll.py
Для-ev-er
Ура! Все было запущено и работало… пока я не нажал на выключатель powertip под своим столом. На этом этапе я понял, что хочу убедиться, что poll.py
скрипт работал, пока Raspberry Pi был под напряжением. Для этого я использовал супервизор процессов runit.
Подробнее:Датчик температуры Raspberry Pi
Производственный процесс
- Регистратор температуры Raspberry Pi
- Температурный профиль Raspberry Pi с использованием LabVIEW
- Измерение температуры с помощью однопроводного датчика DS18B20 и Raspberry Pi
- Сетевой монитор температуры и влажности Raspberry Pi
- Считать температуру с помощью DS18B20 | Raspberry Pi 2
- Мониторинг температуры на Raspberry Pi
- Измерение температуры с помощью RASPBERRY PI
- Библиотека Python датчика температуры TMP006 с использованием Raspberry pi,
- Датчик температуры Python и Raspberry Pi
- Метеостанция Raspberry Pi