Давно хотели автоматизировать базовые функции вашего дома, сделать их легкодоступными и управляемыми удаленно? Предлагаем вашему вниманию статью, которая поможет сделать собственный умный дом на базе Raspberry Pi и Arduino. В данной статье мы расскажем, как создать блок управления, который позволит нам управлять освещением в разных комнатах, измерять температуру и влажность, управлять игровой приставкой PlayStation 4, домофоном, принимать сигналы с датчиков движения. Все это можно автоматизировать посредством Apple HomeKit.
Что необходимо иметь?
- RaspberryPi 3 - $42.50
- NodeMCU ESP-12E - $2.98
- Датчик движения HC SR501 - $1.39
- Датчик температуры и влажности DHT21 - $2.59
- 5V модуль реле, 10A 250V - $1.48x2
- MicroSD 8GB, 10 Class - $8.55
- Блок питания - $5.18
- Провода
Можно выбрать любую другую версию Raspberry Pi. Наш выбор - Raspberry Pi 3 из-за наличия встроенного WiFi и Bluetooth. Вместо NodeMCU можете взять обычный Arduino Nano и отдельный модуль ESP8266 для WiFi. Далее все это спаять, перепрошить и настроить. Однако, для задач, которые мы будем выполнять, не нужны лишние затраты времени. В связи с чем, как по цене так и по трудозатратам, разумнее взять NodeMCU или что-то другое, уже готовое. Относительно силового реле – выберите необходимое вам количество. В нашем случае будут задействованы 3 устройства, в связи с чем мы будем использовать два реле с двумя отдельно-управляемыми отсеками. Ну и само собой, датчик движения вы тоже можете не использовать, если у вас нет в нем необходимости. Статья расскажет об установке, настройке всех этих компонентов, а каким именно образом использовать - решать вам.
Установка Raspbian Jessie
- Переходим на официальный сайт Raspberry Pi, и скачиваем последнюю версию операционной системы Raspbian Jessie Lite. Вы можете использовать обычную версию с desktop-ом, если вдруг она вам будет необходима для каких-то других целей
- Форматируем SD карту FAT32 или FAT.
- Следуем инструкции по установке скачанного образа на Windows, Linux или macOS. Мы воспользовались Etcher для быстрого монтирования образа из-под Mac OS X в графическом интерфейсе.
- Вставляем карту памяти в Raspberry Pi, подключаем USB клавиатуру и HDMI монитор (можно обычный телевизор). Ждем загрузки и корректируем некоторые настройки по своему усмотрению
- Изменяем пароль по умолчанию в пункте 2 - Change User Password
- Экран загрузки оставляем Scratch, так как графический интерфейс нам не пригодится
- Изменяем имя хоста в Advanced Options > Hostname (по желанию)
- Включаем SSH в Advanced Options > SSH, для удобного управления с другого компьютера
- Все! Нажимаем Finish и ждем перезагрузки
Настройка Wifi на Raspberry Pi
- После загрузки Raspberry открываем файл интерфейсов сети, для этого пишем:
sudo nano /etc/network/interfaces Находим iface wlan0 inet manual и меняем на iface wlan0 inet static, под ним добавляем статичный локальный адрес. В нашем случае получилось так:
auto wlan0
allow-hotplug wlan0
iface wlan0 inet static
address 192.168.1.150
netmask 255.255.255.0
gateway 192.168.1.1
wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf address, netmask, gateway - разумеется пишем под настройки вашего роутера.
После введения изменений нажимаем CTRL+X, потом Y, потом ENTER - Открываем файл супликанта, вводя в командную строку следующее:
sudo nano /etc/wpa_supplicant/wpa_supplicant.confВ открывшемся файле пишем настройки вашего WiFi, как указано ниже. В нашем случае получилось так:
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
network={
ssid="PerfectoWeb"
psk="AcC3S4R@SBP1"
} Естественно, вместо PerfectoWeb - ваш SSID, а вместо AcC3S4R@SBP1 - ваш пароль.
После введения изменений нажимаем CTRL+X, потом Y, потом ENTER. - Вводим в командную строку: sudo ifdown wlan0 После завершения процесса вводим: sudo ifup wlan0 Перезагружаемся командой: sudo reboot Wifi настроен и будет автоматически подключаться при старте Raspberry Pi.
Обновление системы
- До начала настройки рекомендуем обновиться и проапгрейдится. Для этого вводим в командную строку: sudo apt-get update
sudo apt-get upgrade - Если вдруг, вы используете не Raspbian Jessie, то стоит установить необходимый компилятор. Проверить версию можно по команде:
g++-4.9 -v Если в ответе вы получили gcc version 4.9.2 (Raspbian 4.9.2-10), то все в порядке. Если же у вас старая версия или вовсе не установлен компилятор, то необходимо установить следующей командой:
sudo apt-get install g++
Установка Node.js
Нам необходимо установить Node.js начиная с версии 4.0. Именно с этой версии Node.js начал поддерживать ARM платформы по умолчанию. Мы установим версию 6.х, так как на данный момент многие плагины Homebridge не адаптированы под версию 8.х. Для установки последней актуальной версии из линейки 6.х выполняем следующие команду:
curl -sL https://deb.nodesource.com/setup_6.x | sudo -E bash -
sudo apt-get install -y nodejs Проверяем корректность установленной версии:
nodejs -v В нашем случае установилась версия v6.11.2
Установка Homebridge
- Изначально необходимо установить Avahi и прочие зависимости, которые необходимы для пакета MDNS из библиотеки HAP-NodeJS.
Выполняем команду: sudo apt-get install avahi-daemon avahi-discover libnss-mdns libavahi-compat-libdnssd-dev - Устанавливаем Homebridge и все зависимости последовательностью следующих команд:
sudo npm install -g --unsafe-perm homebridge hap-nodejs node-gyp
cd /usr/lib/node_modules/homebridge/
sudo npm install --unsafe-perm bignum
cd /usr/lib/node_modules/hap-nodejs/node_modules/mdns
sudo node-gyp BUILDTYPE=Release rebuild
Проверяем тестовым запуском:
homebridge В ответ должны получить:
[2017-08-15 10:05:15] ---
[2017-08-15 10:05:15] config.json (/home/pi/.homebridge/config.json) not found.
Scan this code with your HomeKit App on your iOS device to pair with Homebridge:
┌────────────┐
│ 031-45-154 │
└────────────┘
[2017-08-15 10:05:15] Homebridge is running on port 44278 Это означает, что все успешно установлено и работает. Вы можете заметить, что Homebridge не смог найти файл конфигурации config.json. Именно его необходимо создать на следующем шаге. - Создаем файл конфигурации следующими командами:
sudo -i
mkdir /root/.homebridge
touch /root/.homebridge/config.json
Пример с минимальной конфигурацией:
{
"bridge": {
"name": "RaspberryPi",
"username": "08:61:6E:E3:2D:7A",
"port": 51826,
"pin": "031-45-170"
} } Но мы рекомендуем скачать нашу версию, с уже прописанными плагинами, чтобы в конечном итоге у вас получилась такая-же система, как и у нас. - Далее делаем homebridge демоном и добавляем его в автозагрузку. Для этого вам необходимо создать файл:
sudo nano /etc/init.d/homebridge Скачиваем скрипт для автозагрузки и копируем его содержимое в /etc/init.d/homebridge.
После сохранения, выполняем следующие команды
chmod 755 /etc/init.d/homebridge
update-rc.d homebridge defaults Теперь при запуске Raspberry Pi у нас homebridge будет запускаться автоматически от имени пользователя root.
Установка плагинов Homebridge
Homebridge, посредством плагинов от сотни разработчиков, может управлять GPIO Raspberry Pi на разном уровне, а также IR, Wifi, Bluetooth устройствами. Для нашей сборки необходимо установить следующие плагины:
- Устанавливаем cmdswitch2 для вкл/выкл устройств скриптом
sudo npm install -g homebridge-cmdswitch2 - Устанавливаем homebridge-cmd_light_control для вкл/выкл и диммирования света
sudo npm install -g homebridge-cmd_light_control - Устанавливаем HttpTemphum для получения данных температуры и влажности через HTTP в формате JSON
sudo npm install -g homebridge-httptemperaturehumidity - Устанавливаем homebridge-hc-sr501 для считывания данных с датчика движения HC-SR501
sudo npm install -g homebridge-hc-sr501 - Устанавливаем ps4-waker для вкл/выкл PlayStation 4
sudo npm install -g ps4-waker
Данный набор плагинов достаточен для нашей сборки, их конфигурации вы можете найти и изменить в config.json, который скачали ранее.
Подключение устройств
Далее вам необходимо подключить все необходимые устройства в пины Raspberry Pi, как это указано на фотографии.
БУДЬТЕ ОСТОРОЖНЫ при работе с реле и высоким напряжением! Если вы чего-то не знаете точно, лучше не трогать!
После подключения, скатайте архив со скриптами, разархивируйте и загрузите в директорию /home/pi/.
Обратите внимание: все файлы должны иметь права 0777.
Для этого вы можете выполнять команду для всех файлов по отдельности следующим образом:
chmod 0777 /home/pi/light_bathroom_off.py
... Выполните данную команду для всех файлов, которые вы скачали и загрузили в директорию /home/pi/
Подключение к PlayStation 4
- Включаем PlayStation 4. Переходим в настройки Settings > [Remote Play Connection Settings] > [Add Device]
- В терминале RaspberryPi пишем
ps4-waker - Система попросит вас открыть приложение PS4 на мобильном телефоне и подключиться к ps4-waker.
- Далее вас попросит указать пин-код с экрана монитора, куда подключен PS4. После ввода создастся связь и в RaspberryPi будут сохранены ключи и сертификаты для дальнейшего подключения.
Настройка термометра на Arduino
- Подключаем NodeMCU к компьютеру и открываем официальный программатор.
Для NodeMCU необходимо установить драйвер, в нашем случае он построен на чипе CH340G. Для этого необходимо зайти в File > Preferences, далее в поле Additional Boards Manager URLs указать ссылку для скачивания альтернативных плат http://arduino.esp8266.com/stable/package_esp8266com_index.json и нажать OK. После, переходим в раздел Tools > Boards > Boards Manager, в строке поиска пишем esp8266, находим esp8266 by ESP8266 Community и устанавливаем. - Устанавливаем модуль для управления датчиком DHT и модуль Adafruit Sensor master.
- Скачиваем скетч для создания HTTP сервера и вывода данных с датчика температуры и влажности DHT21.
В скетче смените IP адрес и данные для подключения к WiFi на ваши. Заливаем скетч и идем дальше. Подключаем датчик, как показано на фотографии. В нашем случае подключение идет на ножку D5, GDN и 3.3V. Обратите внимание Датчик работает именно на 3.3V, при подключении на 5V он может сгореть.- На данный момент установка статичного IP адреса в NodeMCU работает некорректно. А это очень важно для нас. Мы пошли другим путем. Зарезервировали в роутере IP адрес 192.168.1.190 под MAC адрес нашего NodeMCU. Теперь при подключении к сети, NodeMCU всегда получает IP 192.168.1.190. Этот же адрес нужно указать в /home/pi/.homebridge/config.json на RaspberryPi для модуля HttpTemphum.
Запускаемся!
- Очищаем кеш аксессуаров и persist на Raspberry Pi следующими командами:
sudo -i
rm -r /root/.homebridge/accessories
rm -r /root/.homebridge/persist
Перезагружаемся:
reboot - Включаем Arduino к USB 5V/1A и ставим в нужное место в комнате.
- Открываем iPad, iPhone и заходим в приложение Home (Дом). Нажимаем добавить аксессуар и ваш планшет или смартфон должен увидеть устройство с названием RaspberryPi. Добавляем его и радуемся!
Вуаля! Теперь мы можем управлять светом на кухне, в ванной, управлять PlayStation 4, получать данные от датчика движения, узнавать температуру и влажность. Мы также можем автоматизировать некоторые действия в Apple Home. Например, чтобы все устройства автоматически выключались, когда вы уходите из дома. Или, чтобы при достижении определенной температуры, реле включало не свет, а вентилятор. Надеемся, данная статья была полезной для вас и на основе нее вы сможете автоматизировать и другие, необходимые вам устройства.