Настройка домашней автоматизации Raspberry Pi

Set Up Raspberry Pi Home Automation



Одна из самых важных вещей для домашней автоматизации - это управление высоковольтным переменным током с помощью низковольтного постоянного тока. Для управления высоковольтным переменным током от Raspberry Pi вам понадобится релейный переключатель на 5 В. Вы можете управлять переключателем реле с помощью контактов GPIO Raspberry Pi. Затем релейный переключатель может управлять бытовой техникой переменного тока через Raspberry Pi.

В этой статье будет показано, как использовать Raspberry Pi и реле на 5 В для включения и выключения лампочки на мобильном устройстве. Статья включает веб-приложение, к которому вы можете получить доступ с любого устройства в вашей сети и управлять любой бытовой техникой переменного тока в вашем доме по беспроводной сети. Итак, давайте начнем с нашего простого эксперимента по домашней автоматизации Raspberry Pi.







Вещи, которые вам понадобятся

Если вы хотите использовать Raspberry Pi без головы (через SSH или VNC), вам понадобятся следующие вещи:



1) Raspberry Pi 3 или Raspberry Pi 4.
2) Релейный переключатель 5 В.
3) Электрические провода.
4) 3 соединительных провода «мама-мама».
5) Лампочка переменного тока.
6) Держатель лампочки переменного тока.
7) Вилка переменного тока.
8) Кусачки и инструмент для зачистки.
9) Отвертка CR-V 3.
10) Адаптер питания Micro-USB (Raspberry Pi 3) или USB Type-C (Raspberry Pi 4).
11) Прошита карта памяти microSD на 16 или 32 ГБ с ОС Raspberry Pi.
12) Сетевое подключение на Raspberry Pi.
13) Ноутбук или настольный компьютер для доступа к удаленному рабочему столу VNC или доступа SSH к Raspberry Pi.



Если вы не хотите получать доступ к Raspberry Pi удаленно через SSH или VNC, вам также понадобится следующее:





14) Монитор.
15) Кабель HDMI или micro-HDMI.
16) Клавиатура.
17) Мышь.

Если вам нужна помощь с прошивкой образа ОС Raspberry Pi на карту microSD, ознакомьтесь со статьей Как установить и использовать Raspberry Pi Imager.



Если вы новичок в Raspberry Pi и вам нужна помощь в установке ОС Raspberry Pi на Raspberry Pi, ознакомьтесь со статьей Как установить ОС Raspberry Pi на Raspberry Pi 4.

Кроме того, если вам нужна помощь с настройкой Raspberry Pi без использования головы, ознакомьтесь со статьей Как установить и настроить ОС Raspberry Pi на Raspberry Pi 4 без внешнего монитора.

Ниже приведены изображения всех необходимых инструментов.

Включение Raspberry Pi

Затем подключите кабель питания к Raspberry Pi и включите Raspberry Pi.

После включения Raspberry Pi вы можете подключиться к Raspberry Pi через VNC или SSH. Или вы можете подключить к Raspberry Pi клавиатуру, мышь и монитор, чтобы получить к нему прямой доступ.

Распиновка реле 5В

Реле - это в основном переключатель. Но, в отличие от традиционного переключателя, реле может управляться небольшим количеством постоянного напряжения.

Реле 5V очень просто использовать. Он имеет две стороны: одна сторона используется для управления реле через низковольтный постоянный ток (от Raspberry Pi), а другая сторона используется для управления высоковольтным переменным током (например, лампочка), в зависимости от состояния реле. .


С одной стороны реле имеет два светодиода (один красный и один зеленый) и три контакта ( В, ЗЕМЛЯ, а также VCC ). Эти три контакта используются для управления реле от Raspberry Pi.

Первые два контакта на другой стороне используются для управления бытовой техникой переменного тока.

Подключение реле 5 В к Raspberry Pi

Чтобы подключить реле 5 В к Raspberry Pi, вам понадобятся три соединительных провода «мама-мама».

Подключите одну сторону соединительных проводов к В (желтый провод), GND (черный провод) и VCC (красный провод) контакты в реле 5 В, как показано ниже.


Другая сторона проводов входит в контакты заголовка GPIO Raspberry Pi, как показано на изображении ниже.

Красный провод должен войти в PIN 2 (VCC) из Raspberry Pi.
Черный провод должен войти в ПИН 6 (GND) из Raspberry Pi.
Желтый провод должен войти в PIN 7 (GPIO 4) из Raspberry Pi.


После подключения реле 5 В к Raspberry Pi оно должно выглядеть, как показано на изображении ниже.

Разрешение доступа GPIO для авторизованного пользователя

Чтобы разрешить доступ к контактам GPIO, пользователь по умолчанию для входа в ОС Raspberry Pi Пи следует добавить в gpio группа.

Вы можете добавить Пи пользователь к gpio group с помощью следующей команды:

$судоusermod-aGgpio $(кто я)


Чтобы изменения вступили в силу, перезагрузите Raspberry Pi с помощью следующей команды:

$судоперезагружать

Создание каталога проекта

Также рекомендуется хранить все файлы проекта в порядке.

Чтобы файлы проекта были организованы, создайте каталог проекта. ~ / www и необходимые подкаталоги с помощью следующей команды:

$mkdir -pv~/www/{шаблоны, статические}


После создания каталога проекта перейдите в каталог проекта следующим образом:

$CD~/www

Переключение реле 5 В с Raspberry Pi

Теперь, когда вы подключили реле 5 В к Raspberry Pi, вы переключите реле с Raspberry Pi с помощью языка программирования Python.

ПРИМЕЧАНИЕ: переключение это термин, используемый в электронике. Под переключением понимается управление (то есть включение / выключение) определенного электронного устройства.

Чтобы поэкспериментировать с переключением реле с помощью языка программирования Python, создайте новый скрипт Python test.py в каталоге проекта следующим образом:

$наноtest.py


Введите следующие строки кода в скрипт Python test.py.

изgpiozeroИмпортироватьВЕЛ
из время Импортироватьспать

в то время как Правда:
релезнак равноВЕЛ(4)
Распечатать('Реле на')
спать(5)

реле.близко()
Распечатать(«Реле: выключено»)
спать(5)

Когда вы закончите, нажмите + X с последующим А ТАКЖЕ а также чтобы спасти test.py Скрипт Python.


Здесь строка 1 импортирует ВЕЛ от gpiozero библиотека, а строка 2 импортирует спать функция от время библиотека.


Строки 6-14 находятся в бесконечном цикле.


Строка 6 инициализирует светодиод в GPIO 4 Raspberry Pi, подключенного к В пин реле.


Строка 8 включает реле с помощью на() метод.

Строка 9 печатает сообщение в консоли с помощью Распечатать() функция.

Строка 10 задерживает выполнение следующей строки кода на пять секунд с помощью спать() функция.


Строка 12 отключает реле с помощью близко() метод.

Таким же образом строка 9 выводит сообщение на консоль с помощью Распечатать() функция, а строка 10 задерживает выполнение следующей строки кода на 5 секунд с помощью спать() функция.


Затем запустите test.py Скрипт Python следующим образом:

$python3 test.py


В test.py Скрипт Python должен начать переключение реле 5 В. Вы должны слышать щелкающий звук каждые пять секунд. Когда реле переключает состояние (с включенного на выключенное или с выключенного на включенное), оно издает щелкающий звук. Это означает, что реле работает нормально.


Когда реле находится в выключенном состоянии (нормальная работа - нагрузка переменного тока отключена), только сеть Светодиод должен загореться, как вы можете видеть на изображении ниже.


Когда реле находится во включенном состоянии (нагрузка переменного тока подключена), оба зеленый LED и то сеть Светодиод должен загореться, как вы можете видеть на изображении ниже.


После завершения тестирования нажмите + C прекратить test.py сценарий.

Подключение лампочки переменного тока к реле 5 В

Реле 5 В теперь должно работать нормально. Теперь вы подключите свой бытовой прибор переменного тока (в данном случае лампочку) к реле 5 В.

Сначала перережьте черный электрический провод, подключенный к лампочке, с помощью кусачки.


После того, как черный электрический провод, подключенный к лампочке, будет отрезан кусачком, он должен выглядеть, как показано на изображении ниже.


Затем снимите внешний слой, чтобы обнажить около ½ дюйма электрического провода, как показано на изображении ниже.


Затем сложите оголенные провода, как показано на рисунке ниже.


Ослабьте отмеченные винты реле отверткой CV-3.


Вставьте оголенные провода, которые вы сняли и загнули ранее, в две винтовые клеммы и затяните винты отверткой CV-3.

Проверка переключения реле после подключения нагрузки переменного тока

После подключения нагрузки переменного тока к реле 5 В подключите вилку лампочки к розетке.


Запустить test.py Скрипт Python из каталога проекта следующим образом:

$python3 test.py


В test.py Сценарий Python должен начать переключение реле 5 В, которое, в свою очередь, будет переключать лампочку переменного тока высокого напряжения с пятисекундными интервалами. Лампочка переменного тока должна гореть пять секунд, затем пять секунд и так далее.

На изображении ниже лампочка не горит.


На изображении ниже горит лампочка.


Как видите, мы можем переключать реле и управлять высоковольтной лампочкой переменного тока с помощью языка программирования Python. Итак, нажмите + C прекратить test.py сценарий.

Теперь перейдем к следующему разделу.

Написание веб-приложения для домашней автоматизации

В этом разделе я покажу вам, как написать веб-приложение на основе API, используя язык программирования Python. Вы можете использовать веб-приложение для управления реле и бытовыми приборами переменного тока или электрическими устройствами, подключенными к реле, через веб-браузер.

ЗАМЕТКА: Все коды, показанные в этом разделе, доступны в моем репозитории GitHub. shovon8 / малина-пи-домашней автоматизации . Если хотите, можете клонировать мой репозиторий GitHub и пропустить все коды.

Создайте сценарий Python server.py в каталоге проекта следующим образом:

$наноserver.py


Введите следующие строки кодов в поле server.py Скрипт Python.

изфлягаИмпортироватьКолба,jsonify,url_for,render_template
изgpiozeroИмпортироватьВЕЛ
изuuidИмпортироватьuuid4
номеразнак равно {}
номера['Комната 1'] знак равно [{
'я бы': uuid4(),
'имя':'Свет 1',
'значок':'фа фа-лампочка',
'положение дел':Ложь,
'relayPin':4,
'relayInstance':Ложь
}, {
'я бы': uuid4(),
'имя':'Вентилятор 1',
'значок':'фа фа-фан',
'положение дел':Ложь,
'relayPin':6,
'relayInstance':Ложь
}]
номера['Ванная 1'] знак равно [{
'я бы': uuid4(),
'имя':'Свет 1',
'значок':'фа фа-лампочка',
'положение дел':Ложь,
'relayPin':5,
'relayInstance':Ложь
}]
приложениезнак равноКолба(__имя__)
приложение.config['SEND_FILE_MAX_AGE_DEFAULT'] знак равно 0
@приложение.маршрут('/')
defдом():
возвращениеrender_template('./index.html',номеразнак равнономера)
deftoggle_appliance_status(я бы):
длякомнатавномера:
дляприборвномера[комната]:
если п(прибор['я бы']) == я бы:
еслиприбор['relayInstance']:
прибор['relayInstance'].близко()
прибор['relayInstance'] знак равно Ложь
еще:
прибор['relayInstance'] знак равноВЕЛ(прибор['relayPin'])
прибор['relayInstance'].на()
прибор['положение дел'] знак равно нетприбор['положение дел']
возвращение Правда
возвращение Ложь
@приложение.маршрут('/ устройство / переключатель /')
defприбор_toggle(я бы):
возвращениеjsonify({'положение дел': toggle_appliance_status(я бы)})

Когда вы закончите, нажмите + X с последующим А ТАКЖЕ а также чтобы спасти server.py Скрипт Python.


Здесь строки 1-3 импортируют все необходимые компоненты из соответствующих библиотек.


Строка 5 создает пустой номера толковый словарь. В этом словаре мы будем хранить все детали устройства переменного тока, которыми мы хотим управлять из веб-приложения.


В номера детали хранятся в строках 7-29.


Давайте обсудим структуру данных одной из комнат.

Здесь название комнаты будет Комната 1. Так, Комната 1 ключ к номера толковый словарь.


В Комната 1 key содержит массив в качестве значения. Количество элементов массива равно количеству бытовых приборов переменного тока, которые у вас есть в этой комнате, которыми вы также хотите управлять из веб-приложения. В данном случае у нас есть две бытовые приборы переменного тока, которыми мы хотим управлять: Свет 1 а также Вентилятор 1 .


Каждое определение бытового устройства имеет я бы . В я бы - это случайно сгенерированный UUID. Это используется для определения того, какой комнатой мы хотим управлять с помощью API.

В бытовой технике также есть все следующее:

  • имя (Свет 1 в этом случае)
  • значок (Класс значков Font Awesome, поскольку для значков мы будем использовать Font Awesome)
  • статус (True если на а также Ложь если выключенный )
  • relayPin (номер контакта GPIO, используемый для управления реле, подключенным к бытовому прибору переменного тока)
  • relayInstance (инициализированный ВЕЛ объект gpiozero библиотека, отвечающая за управление соответствующим выводом GPIO - relayPin )


Строка 31 инициализирует веб-сервер Python Flask.

Строка 32 настраивает веб-сервер Flask.


Строки 34-36 отправляют index.html файл из шаблоны / каталог при посещении веб-приложения домашней автоматизации.

Flask использует Jinja2 язык шаблонов для рендеринга index.html файл. Итак, я прошел номера словарь в index.html файл. Jinja2 отобразит домашнюю страницу с помощью номера данные.


Функция toggle_appliance_status () в строках 39-52 используется для включения бытового прибора, если он выключен, и выключения бытового прибора, если он включен, с помощью устройства я бы .

Он возвращается Правда если операция переключения прошла успешно. Если есть ошибка, он вернет Ложь .


Строки 55-57 используются для переключения бытового прибора с помощью / устройство / переключатель / Конечная точка API веб-сервера. Здесь, я бы - это идентификатор бытовой техники.


Создать index.html файл в шаблоны / каталог вашего проекта следующим образом:

$наношаблоны/index.html

Введите следующие строки кодов в поле index.html сценарий.


< html языкзнак равно'на'>
< голова >
< мета кодировказнак равно'UTF-8'>
< мета имязнак равно'область просмотра' содержаниезнак равно'ширина = ширина устройства, начальный масштаб = 1.0'>
< ссылка relзнак равно'таблица стилей' hrefзнак равно'{{url_for (' static ', filename =' fontawesome / css / all.min.css ')}}'>
< ссылка relзнак равно'таблица стилей' hrefзнак равно'{{url_for (' static ', filename =' style.css ')}}'>
< заглавие >Домашняя автоматизация с Raspberry Pi</ заглавие >
</ голова >
< тело >
< div я бызнак равно'содержание'>
< h1 >Raspberry Pi Домашняя автоматизация</ h1 >

{% за комнату в комнатах%}
< div классзнак равно'комната'>
< h2 >{{ комната }}</ h2 >
< div классзнак равно'Техника'>
{% для устройства в комнатах [room]%}
< div классзнак равно'прибор' я бызнак равно'{{устройство [' id ']}}'> ='активный'>
< я классзнак равно'{{устройство [' icon ']}}'></ я >
< охватывать >{{устройство ['имя']}}</ охватывать >
</ div >
{% endfor%}
</ div >
</ div >
{% endfor%}

</ div >

< сценарий srcзнак равно'{{url_for (' static ', filename =' app.js ')}}' типзнак равно'текст / javascript'></ сценарий >
</ тело >
</ html >

Когда вы закончите, нажмите + X с последующим А ТАКЖЕ а также чтобы спасти index.html файл.


Создать style.css файл в статический / каталог вашего проекта следующим образом:

$наностатический/style.css


Введите следующие строки кодов в поле style.css файл.

@Импортировать url('https://fonts.googleapis.com/css2?family=BenchNine: [защита электронной почты]; 400; 700 & display = swap');

* {
прибыль: 0;
набивка: 0;
семейство шрифтов: 'BenchNine', без засечек;
}

#содержание >h1{
фон:линейный градиент(кПравильно, rgb(112, 24, 163), rgb(86, 127, 240));
цвет: #fff;
выравнивание текста: центр;
набивка: .5em 0;
}

div.комната {
прибыль: .5em;
граница: 2 пикселя твердый rgb(112, 24, 163);
border-radius: 5 пикселей;
}

div.комнатаh2{
/ * фон: rgb (9, 76, 121); * /
фон:линейный градиент(кПравильно, rgb(112, 24, 163), rgb(86, 127, 240));
набивка: 0 0 0 .5em;
цвет: #fff;
}

div.Техника {
прибыль: .5em .5em 0 0;
отображать:сгибать;
гибкая пленка:сворачивать;
}

div.appliance {
граница: 2 пикселя твердый rgb(112, 24, 163);
border-radius: 5 пикселей;
ширина: 110 пикселей;
рост: 120 пикселей;
выравнивание текста: центр;
прибыль: 0 0 .5em .5em;
отображать:сгибать;
гибкое направление:столбец;
}

div.applianceя.fa {
размер шрифта: 4em;
гибкий рост: 1;
обивка: 0.3em;
цвет: rgb(204, пятьдесят, пятьдесят);
}

div.appliance[активный по даннымзнак равно'активный']я.fa {
цвет: rgb(32, 177, 51);
}

div.applianceохватывать{
отображать: блокировать;
font-weight: жирный;
фон: rgb(112, 24, 163);
цвет: #fff;
}

Когда вы закончите, нажмите + X с последующим А ТАКЖЕ а также чтобы спасти style.css файл.


Создать app.js файл в статический / каталог вашего проекта следующим образом:

$наностатический/app.js


Введите следующие строки кодов в поле app.js файл.

окно.addEventListener('нагрузка',главный);

функцияглавный() {
функцияtoggleApplianceState(А также) {
кудая бызнак равноА также.дорожка[1].я бы;

кудаhttpзнак равно новыйXMLHttpRequest();

http.onreadystatechange знак равно функция() {
если(это.readyState === 4 && это.положение дел === 200) {
если(JSON.разбирать(это.responseText).положение дел === правда) {
если(А также.дорожка[1].hasAttribute('данные активны')) {
А также.дорожка[1].removeAttribute('данные активны')
} еще {
А также.дорожка[1].setAttribute('данные активны', 'активный')
}
}
}
}

http.открытым('ПОЛУЧАТЬ',``/прибор/переключать/${я бы}``, правда);
http.Отправить();
}


кудаТехниказнак равнодокумент.getElementsByClassName('прибор');
для(язнак равно0;я<Техника.длина;я++) {
Техника[я].addEventListener('щелкнуть',toggleApplianceState);
}
}

Когда вы закончите, нажмите + X с последующим А ТАКЖЕ и сохранить app.js файл.


Здесь строка 1 запускает главный() функция, когда веб-страница завершает загрузку.

в index.html файл, каждый бытовой прибор заключен в прибор класс. Строки 26-29 используются для выбора каждого бытового устройства на веб-странице и прикрепления щелкнуть событие к прибору. Когда кто-то нажимает на бытовую технику на веб-странице, toggleApplianceState () функция будет запущена.


В строках 4-23 toggleApplianceState () функция используется для запроса / устройство / переключатель / конечная точка веб-сервера, чтобы изменить состояние выбранного бытового устройства. Запрос выполняется в фоновом режиме через AJAX. После получения ответа веб-страница обновляется соответствующим образом.


Перейдите к статический / в каталоге вашего проекта следующим образом:

$CDстатический/


Загрузите Font Awesome с помощью следующей команды:

$wgethttps://use.fontawesome.com/релизы/v5.15.1/fontawesome-free-5.15.1-web.zip


После загрузки Font Awesome вы должны найти новый zip-файл. fontawesome-free-5.15.1-web.zip в статический / каталог.

$ls -lh


Разархивируйте fontawesome-free-5.15.1-web.zip файл с помощью следующей команды:

$распаковатьfontawesome-free-5.15.1-web.zip


В fontawesome-free-5.15.1-web.zip файл теперь должен быть разархивирован.


Новый каталог fontawesome-free-5.15.1-web / должен быть создан в каталоге static /, как вы можете видеть на скриншоте ниже.

$ls -lh

Переименовать каталог fontawesome-free-5.15.1-web / к fontawesome / с помощью следующей команды:

$мв -vfontawesome-бесплатно-5.15.1-web fontawesome


Теперь вам больше не нужен fontawesome-free-5.15.1-web.zip файл. Итак, удалите fontawesome-free-5.15.1-web.zip файл с помощью следующей команды:

$rm -vfontawesome-free-5.15.1-web.zip


В статический / структура каталогов должна выглядеть так, как показано на скриншоте ниже.

$ls -lh


Вернитесь в каталог проекта ~ / www следующее:

$CD..

Тестирование веб-приложения домашней автоматизации

Чтобы протестировать веб-приложение домашней автоматизации, выполните следующую команду в каталоге проекта:

$FLASK_APP= запуск фляги server.py


Веб-приложение должно быть доступно на порту 5000 вашего Raspberry Pi.


В веб-браузере Chromium перейдите на http: // локальный: 5000 . Должно загрузиться веб-приложение домашней автоматизации.

Щелкните значок лампочки, показанный на изображении ниже.


Лампочка переменного тока должна теперь включиться. Цвет значка также должен измениться на зеленый, указывая на то, что лампочка горит.


Итак, веб-приложение для домашней автоматизации работает. Нажмите + C для завершения работы веб-сервера.

Создание службы Systemd для веб-приложения домашней автоматизации

В этом разделе я покажу вам, как создать служебный файл systemd для веб-приложения домашней автоматизации, чтобы оно автоматически запускалось при загрузке.

Сначала создайте raspi-home-automation.service файл в каталоге вашего проекта следующим образом:

$наноraspi-home-automation.service

Введите следующие строки в файл raspi-home-automation.service.

[Ед. изм]
Описание= Веб-служба домашней автоматизации Raspberry Pi
После= network.target
[Услуга]
WorkingDirectoryзнак равно/дом/Пи/www
Средазнак равноFLASK_APP= server.py
Средазнак равноFLASK_ENV= производство
ExecStartзнак равно/usr/являюсь/пробег фляги--хозяин= 0.0.0.0
Стандартный выход= наследовать
Стандартная ошибка= наследовать
Рестарт= всегда
Пользователь= пи
[Установить]
Разыскивается= multi-user.target

Когда вы закончите, нажмите + X с последующим А ТАКЖЕ и сохранить raspi-home-automation.service файл.


Скопируйте raspi-home-automation.service файл в / и т.д. / systemd / system / каталог с помощью следующей команды:

$судо cp -vraspi-home-automation.service/так далее/система/система/


Перезагрузите демоны systemd, чтобы изменения вступили в силу следующим образом:

$судоsystemctl демон-перезагрузка


Добавить распи-домашняя автоматизация сервис для системного запуска ОС Raspberry Pi с помощью следующей команды:

$судоsystemctlвключитьraspi-home-automation.service


Перезагрузите Raspberry Pi с помощью следующей команды:

$судоперезагружать


После загрузки Raspberry Pi распи-домашняя автоматизация сервис должен быть активен / запущен, как вы можете видеть на скриншоте ниже.

$судоsystemctl статус raspi-home-automation.service

Доступ к веб-приложению домашней автоматизации с других устройств

Чтобы получить доступ к веб-приложению домашней автоматизации с других устройств в вашей домашней сети, вам необходимо знать IP-адрес вашего устройства Raspberry Pi.

Вы можете узнать IP-адрес своего устройства Raspberry Pi 4 в веб-интерфейсе вашего домашнего маршрутизатора. В моем случае IP-адрес 192.168.0.103. Для вас все будет по-другому. Так что не забудьте с этого момента заменить мой IP на ваш.


Если у вас есть доступ к консоли Raspberry Pi, вы также можете выполнить следующую команду, чтобы найти IP-адрес.

$имя хоста


Узнав IP-адрес своего устройства Raspberry Pi, вы сможете получить к нему доступ с любого устройства в домашней сети.

Как вы можете видеть на скриншоте ниже, я получил доступ к веб-приложению домашней автоматизации со своего смартфона Android.


Обязательно вставьте вилку лампочки в розетку.


По умолчанию лампочка должна быть выключена.


Если вы коснетесь значка лампочки в веб-приложении домашней автоматизации, цвет значка лампочки должен измениться на зеленый, указывая на то, что лампочка горит.


Как вы можете видеть на изображении ниже, лампочка горит.

Заключение

В этой статье показано, как использовать реле 5 В для управления высоковольтным электрическим устройством переменного тока с Raspberry Pi с помощью языка программирования Python. В статье также было показано, как написать веб-приложение Python Flask на основе API для управления реле из веб-браузера. Эта статья должна помочь вам начать работу с домашней автоматизацией с помощью Raspberry Pi.