Купил себе Raspberry Pi 3+ и заказал несколько датчиков для построения умного дома. Это мой первый опыт в этом деле и я постараюсь описать как можно больше подводных камней при работе с моими купленными датчиками и малиной.
Модуль Погода Сенсор Температура и влажности Давление освещения Сенсор CJMCU
- HTU21D
- BMP180
- BH1750FVI
Хватит описаний, приступаем…..
Умный дом с HTU21D + BMP180 + BH1750FVI и Raspberry pi 3+
Установка Raspbian
Первое что необходимо сделать — установить и настроить вашу малинку. Я описывал процесс установки в своей статье:
Установка Raspbian from scratch на Unix/Linux
Покупка датчиков
Я заказывал на алиэкспресс по запросу «HTU21D + BMP180 + BH1750FVI Модуль Погода Сенсор Температура и влажности Давление освещения Сенсор CJMCU». Не знаю почему, но выбрал именно эту микросхему. В ней имееться несколько датчиков с которыми можно будет разобраться как это все работает. При необходимости, я всегда могу купить другой вариант.
Данная микросхема выглядит вот так:
Имееться 4 пина:
- GND — Земля.
- SDA — Пин для опроса метрик.
- SCL — Пин для опроса метрик.
- 3V3 — Вольтаж, в 3.3V.
Распиновка для Raspberry pi 3 +
Погуглил распиновку и решил добавить ее сюда для дальнейшего юседжа:
Собственно, подключаем микруху по описанию пинов. Там всего их 4 шт, по этому — думаю что не составит труда все вставить как нужно.
Включаем 1-Wire, I2C, SPI в Raspberry pi 3+
Сейчас, стоит включить некоторые интерфейсы для работы с датчиками, для этого, выполняем следующую команду:
# raspi-config
Выглядит это вот так:
Нас интересует «Interfacing Options». Переходим на данный пункт и кликаем «enter». Следующим действием включаем «SPI»:
Выбираем что необходимо включить/выключить и жмакаем «enter». Затем, выбираем что нужно, включить «YES» или выключить «NO».
Аналогичными действиями, включаем «1-Wire» и «I2C».
Замечание: Если у вас /boot раздел смонтирован в read-only (ro), то стоит отредактировать /etc/fstab и убрать данную опцию или добавить write (rw) и после чего, выполнить reboot.
Установка ПО для Raspberry pi 3 +
Ну, для начала, обновим ОС:
# apt update && apt dist-upgrade
Ставим пакет для python3:
# pip3 install sensor i2csense
Если нужно уставить PIP, то вот статья:
Установка pip/setuptools/wheel в Unix/Linux
Ставим пакеты:
# apt install -y i2c-tools python3-smbus
Для работы с htu21d и python3 стоит поставить пакет:
# pip3 install adafruit-circuitpython-htu21d lm-sensors
Для работы с другими модулями/датчиками и python3 стоит поставить пакет:
# apt install -y python3-pigpio rpi.gpio python3-gpiozero
Иницилиазируем pigpiod либу:
# pigpiod
Если получили ошибку:
2019-05-29 02:17:32 initInitialise: Can't lock /var/run/pigpio.pid
Can't initialise pigpio library
Решение:
# rm -f /var/run/pigpio.pid && killall pigpiod && pigpiod
Можно идти дальше.
Проверка ПО для Raspberry, сбор данных
Проверим, работает ли модуль i2c, с помощью следующей команды:
# lsmod | grep i2c_
i2c_bcm2835 16384 0
i2c_dev 16384 0
Смотрим датчики которые используют 1-wire:
# ls /sys/bus/w1/devices/
00-03b000000000 00-7db000000000 00-fdb000000000 w1_bus_master1
Смотрим датчики которые используют SPI:
# i2cdetect -y 0
Error: Could not open file `/dev/i2c-0' or `/dev/i2c/0': No such file or directory
Смотрим датчики которые используют I2C:
# i2cdetect -y 1
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- 23 -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: 40 -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- 77
Или вот еще утилита которая может определить сенсоры:
# i2csense
Running i2cdetect utility in i2c bus 1:
The command '/usr/sbin/i2cdetect -y 1' has returned:
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- 23 -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: 40 -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- 77
3 sensors detected in 0x23, 0x40, 0x77
Еще полезности:
# cat /sys/bus/i2c/devices/i2c-*/name
bcm2835 I2C adapter
Или:
# i2cdetect -l
i2c-1 i2c bcm2835 I2C adapter I2C adapter
Идем дальше.
Написание ПО для Raspberry pi 3 + и датчиков
Пример 1, открываем файл:
$ vim htu21d_sensor/htu21d_sensor.py
И прописываем:
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
from Adafruit_HTU21D.HTU21D import HTU21D
sensor = HTU21D()
temperature = sensor.read_temperature()
humidity = sensor.read_humidity()
dewpoint = sensor.read_dewpoint()
print("Temperature(Температура): {}C".format(round(temperature, 1)))
print("Humidity(Влажность): {}%".format(round(humidity, 1)))
print("Dewpoint: {}".format(round(dewpoint, 1)))
sensor.reset()
Запускаем:
$ python3 htu21d_sensor/htu21d_sensor.py
Temperature(Температура): 36.5C
Humidity(Влажность): 22.9%
Dewpoint: 12.1
Честно, температура явно не такая. Попробую разобраться попозже. А для тестов — пойдет и так (хотя и печальненько….).
Вот и все, статья «Умный дом с HTU21D + BMP180 + BH1750FVI и Raspberry pi 3+» завершина.