Raspberry Pi

Настройте Raspberry Pi Home Automation

Настройте Raspberry Pi Home Automation
Едно от най-важните неща за домашната автоматизация е управлението на променливотоковото напрежение с високо напрежение с помощта на постоянен ток с ниско напрежение. За да управлявате високо напрежение AC от Raspberry Pi, ще ви е необходим 5V релеен превключвател. Можете да управлявате превключвателя на релето с помощта на GPIO щифтовете на Raspberry Pi. След това релейният превключвател може да управлява променливотоковите домакински уреди чрез Raspberry Pi.

Тази статия ще ви покаже как да използвате Raspberry Pi и превключвателя за реле 5V за включване и изключване на крушка от вашето мобилно устройство. Статията включва уеб приложение, до което можете да осъществите достъп от всяко устройство във вашата мрежа и да управлявате безжично всички домакински уреди с променлив ток във вашия дом. И така, нека започнем с нашия прост експеримент за домашна автоматизация на Raspberry Pi.

Неща, от които ще имате нужда

Ако искате да използвате вашия Raspberry Pi без глава (чрез SSH или VNC), ще ви трябват следните неща:

1) Raspberry Pi 3 или Raspberry Pi 4.
2) 5V реле превключвател.
3) Електрически проводници.
4) 3 женски към женски свързващи проводника.
5) AC крушка.
6) Поставка за електрическа крушка.
7) AC щепсел.
8) Инструмент за рязане и отстраняване на тел.
9) отвертка CR-V 3.
10) Микро-USB (Raspberry Pi 3) или USB Type-C (Raspberry Pi 4) захранващ адаптер.
11) Мигаше 16 GB или 32 GB microSD карта с Raspberry Pi OS.
12) Мрежова свързаност на Raspberry Pi.
13) Лаптоп или настолен компютър за достъп до VNC отдалечен работен плот или SSH достъп до Raspberry Pi.

Ако не искате да имате достъп до Raspberry Pi дистанционно чрез SSH или VNC, ще ви трябва и следното:

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

Ако имате нужда от помощ при мигането на изображението на Raspberry Pi OS към microSD картата, вижте статията Как да инсталирате и използвате Raspberry Pi Imager.

Ако сте начинаещ Raspberry Pi и се нуждаете от помощ при инсталирането на Raspberry Pi OS на Raspberry Pi, вижте статията Как да инсталирате Raspberry Pi OS на Raspberry Pi 4.

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

Изображенията на всички необходими инструменти са дадени по-долу.

Включване на Raspberry Pi

След това свържете захранващия кабел към Raspberry Pi и включете Raspberry Pi.

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

5V релейни изводи

Релето е основно превключвател. Но, за разлика от традиционния превключвател, релето може да се управлява от малко количество постояннотоково напрежение.

Релето 5V е много лесно за използване. Той има две страни: едната страна се използва за управление на релето чрез DC с ниско напрежение (от Raspberry Pi), а другата страна се използва за управление на AC напрежение с високо напрежение (i.д., електрическата крушка), в зависимост от състоянието на релето.


От едната страна релето има два светодиода (един червен и един зелен) и три щифта (IN, GND, и VCC). Тези три щифта се използват за управление на релето от Raspberry Pi.

Първите два щифта от другата страна се използват за управление на домашния уред AC.

Свързване на 5V реле към Raspberry Pi

За да свържете 5V релето към Raspberry Pi, ще ви трябват три женски към женски свързващи проводника.

Включете едната страна на свързващите проводници към IN (жълта жица), GND (черен проводник) и VCC (червени проводници) щифтове в 5V реле, както е показано по-долу.


Другата страна на проводниците отива в щифтовете за заглавки GPIO на Raspberry Pi, както е показано на изображението по-долу.

Червеният проводник трябва да влезе в ПИН 2 (VCC) на Raspberry Pi.
Черният проводник трябва да влезе в ПИН 6 (GND) на Raspberry Pi.
Жълтата жица трябва да влезе в ПИН 7 (GPIO 4) на Raspberry Pi.


След като 5V релето е свързано към Raspberry Pi, то трябва да изглежда както е показано на изображението по-долу.

Разрешаване на GPIO достъп до потребител за влизане

За да разрешите достъп до GPIO щифтовете, потребителят по подразбиране за вход на Raspberry Pi OS пи трябва да се добави към gpio група.

Можете да добавите пи потребител на gpio група със следната команда:

$ sudo usermod -aG gpio $ (whoami)


За да влязат в сила промените, рестартирайте Raspberry Pi със следната команда:

$ sudo рестартиране

Създаване на директория на проекти

Също така е добра идея всички файлове на проекта да бъдат организирани.

За да поддържате файловете на проекта организирани, създайте директорията на проекта ~ / www и необходимите поддиректории със следната команда:

$ mkdir -pv ~ / www / шаблони, статични


След като директорията на проекта е създадена, отидете до директорията на проекта, както следва:

$ cd ~ / www

Превключване на 5V реле от Raspberry Pi

Сега, когато сте свързали релето 5V към Raspberry Pi, ще превключите релето от Raspberry Pi, използвайки езика за програмиране Python.

ЗАБЕЛЕЖКА: Превключване е термин, използван в електрониката. Превключването означава контрол (i.д. включване / изключване) определено електронно устройство.

За да експериментирате с превключване на релето с помощта на езика за програмиране Python, създайте новия тест за скрипт на Python.py в директорията на проекта, както следва:

$ nano тест.py


Въведете следните редове кодове в теста.py Python скрипт.

от gpiozero LED за внос
от време внос сън
докато е вярно:
реле = LED (4)
print ("Relay: On")
сън (5)
реле.близо()
print ("Relay: Off")
сън (5)

След като приключите, натиснете + х следван от Y и за да запазите тест.py Python скрипт.


Тук, ред 1 внос LED от gpiozero библиотека и ред 2 импортира сън функция от време библиотека.


Редовете 6-14 са в рамките на безкраен цикъл.


Ред 6 инициализира светодиод в GPIO 4 на Raspberry Pi, който е свързан с IN щифт на релето.


Линия 8 включва релето с помощта на На() метод.

Ред 9 отпечатва съобщение в конзолата с помощта на печат () функция.

Ред 10 забавя изпълнението на следващия ред код за пет секунди с помощта на сън () функция.


Линия 12 изключва релето с помощта на близо() метод.

По същия начин ред 9 отпечатва съобщение на конзолата с помощта на печат () функция и ред 10 забавя изпълнението на следващия ред код за 5 секунди с помощта на сън () функция.


След това стартирайте тест.py Python скрипт, както следва:

$ python3 тест.py


The тест.py Python скриптът трябва да започне да превключва 5V релето. Трябва да чувате щракащ звук на всеки пет секунди. Когато релето превключва състояние (от включено към изключено или от изключено към включено), то издава щракащ шум. Това означава, че релето функционира правилно.


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


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


След като тестването приключи, натиснете + ° С за прекратяване на тест.py скрипт.

Свързване на крушката за променлив ток към 5V реле

Релето 5V вече трябва да функционира правилно. Сега ще свържете вашия домакински уред с променлив ток (в този случай крушка) към релето 5V.

Първо изрежете черния електрически проводник, свързан към електрическата крушка, с телеграма.


След като черният електрически проводник, свързан към електрическата крушка, е отрязан с телеграма, тя трябва да изглежда както е показано на изображението по-долу.


След това отстранете външния слой, за да изложите около ½ инча от електрическия проводник, както е показано на изображението по-долу.


След това сгънете откритите проводници, както е показано на изображението по-долу.


Разхлабете маркираните винтове на релето с отвертка CV-3.


Поставете откритите проводници, които сте свалили и сгънали по-рано, в двата винтови клеми и затегнете винтовете с отвертка CV-3.

Тестване на превключване на релето след свързване на променливотоково натоварване

След като променливотоковото натоварване е свързано към релето 5V, свържете щепсела на крушката към контакта.


Стартирайте тест.py Python скрипт от директорията на проекта, както следва:

$ python3 тест.py


The тест.py Python скриптът трябва да започне да превключва 5V релето, което от своя страна ще превключва електрическата крушка с високо напрежение на интервали от пет секунди. Електрическата крушка трябва да остане включена за пет секунди, след това да остане изключена за пет секунди и т.н.

Електрическата крушка е изключена на изображението по-долу.


Електрическата крушка е включена на изображението по-долу.


Както можете да видите, можем да превключваме релето и да управляваме електрическата крушка с високо напрежение с помощта на езика за програмиране Python. И така, натиснете + ° С за прекратяване на тест.py скрипт.

Нека преминем към следващия раздел.

Писане на уеб приложение за автоматизация на дома

В този раздел ще ви покажа как да напишете уеб приложение, базирано на API, използвайки езика за програмиране Python. Можете да използвате уеб приложението, за да контролирате релето и променливотоковия домакински уред (и) или електрическо (и) устройство (а), свързано (и) към релето от уеб браузър.

ЗАБЕЛЕЖКА: Всички кодове, показани в този раздел, са налични в моето хранилище на GitHub shovon8 / raspberry-pi-home-automation. Ако искате, можете да клонирате моето хранилище на GitHub и да пропуснете всички кодове.

Създайте сървъра.py Python скрипт в директорията на проекта, както следва:

$ nano сървър.py


Въведете следните редове с кодове в сървър.py Python скрипт.

от колба импортиране Колба, jsonify, url_for, render_template
от gpiozero LED за внос
от uuid внос uuid4
стаи =
стаи ['Стая 1'] = [
„id“: uuid4 (),
'name': 'Light 1',
'icon': 'fa fa-lightbulb',
'status': Невярно,
'relayPin': 4,
'relayInstance': Невярно
,
„id“: uuid4 (),
'name': 'Вентилатор 1',
'icon': 'fa fa-fan',
'status': Невярно,
'relayPin': 6,
'relayInstance': Невярно
]
стаи ['Баня 1'] = [
„id“: uuid4 (),
'name': 'Light 1',
'icon': 'fa fa-lightbulb',
'status': Невярно,
'relayPin': 5,
'relayInstance': Невярно
]
ап = колба (__ име__)
ап.config ['SEND_FILE_MAX_AGE_DEFAULT'] = 0
@app.маршрут ('/')
def home ():
връщане render_template ('./ индекс.html ', стаи = стаи)
def toggle_appliance_status (id):
за стая в стаи:
за уред в стаи [стая]:
ако str (уред ['id']) == id:
ако уред ['relayInstance']:
уред ['relayInstance'].близо()
appliance ['relayInstance'] = Невярно
друго:
уред ['relayInstance'] = светодиод (уред ['relayPin'])
уред ['relayInstance'].На()
уред ['статус'] = не уред ['статус']
връщане Вярно
връщане False
@app.route ('/ уред / превключване /')
def appliance_toggle (id):
връщане jsonify ('status': toggle_appliance_status (id))

След като приключите, натиснете + х следван от Y и за да запазите сървър.py Python скрипт.


Тук редове 1-3 импортират всички необходими компоненти от съответните им библиотеки.


Ред 5 създава празно стаи речник. В този речник ще съхраним всички подробности за уреда за променлив ток, които искаме да контролираме от уеб приложението.


The стаи подробностите се съхраняват в редове 7-29.


Нека обсъдим структурата на данните на една от стаите.

Тук името на стаята ще бъде Стая 1. Така, Стая 1 е ключът към стаи речник.


The Стая 1 key съдържа масив като стойност. Броят на елементите на масива е равен на броя на домашните уреди с променлив ток, които имате в тази стая, които също искате да контролирате от уеб приложението. В този случай имаме два домакински уреда с променлив ток, които искаме да контролираме: Светлина 1 и Вентилатор 1.


Всяка дефиниция на домакински уреди има документ за самоличност. The документ за самоличност е произволно генериран UUID. Това се използва, за да се определи коя стая искаме да контролираме с помощта на API.

Домакинският уред също има всичко изброено:

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


Ред 31 инициализира уеб кол сървър на Python.

Ред 32 конфигурира уеб сървъра на колбата.


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

Колба използва Jinja2 език за шаблони за визуализиране на индекс.html файл. И така, преминах стаи речник към индекс.html файл. Jinja2 ще направи началната страница с помощта на стаи данни.


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

Връща се Вярно ако операцията за превключване е успешна. Ако има грешка, тя ще се върне Невярно.


Редове 55-57 се използват за превключване на домакински уред с помощта на / уред / превключване / Крайна точка на API на уеб сървъра. Тук, документ за самоличност е идентификаторът на домашния уред.


Създайте индекс.html файл в шаблони / директория на вашия проект, както следва:

$ nano шаблони / индекс.html

Въведете следните редове с кодове в индекс.html скрипт.








Автоматизация на дома с Raspberry Pi



Домашна автоматизация на Raspberry Pi


% за стая в стаи%

стая



% за уред в стаи [стая]%


прибор ['name']

% endfor%


% endfor%



След като приключите, натиснете + х следван от Y и за да запазите индекс.html файл.


Създавам стил.css файл в статичен / директория на вашия проект, както следва:

$ nano static / style.css


Въведете следните редове с кодове в стил.css файл.

@import url ('https: // шрифтове.googleapis.com / css2?семейство = BenchNine: [имейл защитен]; 400; 700 & display = swap ');
*
марж: 0;
подплата: 0;
семейство шрифтове: 'BenchNine', sans-serif;

#content> h1
фон: линеен градиент (вдясно, rgb (112, 24, 163), rgb (86, 127, 240));
цвят: #fff;
подравняване на текст: център;
подложка: .5em 0;

div.стая
марж: .5em;
граница: 2px твърд rgb (112, 24, 163);
граница-радиус: 5px;

div.стая h2
/ * фон: rgb (9, 76, 121); * /
фон: линеен градиент (вдясно, rgb (112, 24, 163), rgb (86, 127, 240));
подплата: 0 0 0 .5em;
цвят: #fff;

div.уреди
марж: .5ем .5em 0 0;
дисплей: flex;
гъвкаво обвиване: обвиване;

div.уред
граница: 2px твърд rgb (112, 24, 163);
граница-радиус: 5px;
ширина: 110px;
височина: 120px;
подравняване на текст: център;
марж: 0 0 .5ем .5em;
дисплей: flex;
flex-direction: колона;

div.уред i.фа
размер на шрифта: 4em;
flex-grow: 1;
подложка: 0.3em;
цвят: rgb (204, 50, 50);

div.уред [data-active = "active"] i.фа
цвят: rgb (32, 177, 51);

div.обхват на уреда
дисплей: блок;
шрифт-тегло: получер;
фон: rgb (112, 24, 163);
цвят: #fff;

След като приключите, натиснете + х следван от Y и за да запазите стил.css файл.


Създайте ап.js файл в статичен / директория на вашия проект, както следва:

$ nano static / app.js


Въведете следните редове с кодове в ап.js файл.

прозорец.addEventListener ('load', main);
функция main ()
функция toggleApplianceState (e)
var id = e.път [1].документ за самоличност;
var http = нов XMLHttpRequest ();
http.onreadystatechange = функция ()
ако това.readyState === 4 && това.статус === 200)
ако (JSON.разбор (това.responseText).статус === вярно)
ако (напр.път [1].hasAttribute ('data-active'))
д.път [1].removeAttribute ('data-active')
друго
д.път [1].setAttribute ('data-active', 'active')




http.отворен ("GET", '/ appliance / toggle / $ id', true);
http.изпрати ();

var уреди = документ.getElementsByClassName ('уред');
за (i = 0; i < appliances.length; i++)
уреди [i].addEventListener ('щракване', toggleApplianceState);

След като приключите, натиснете + х следван от Y и да запазите ап.js файл.


Тук ред 1 изпълнява главен () функция, когато уеб страницата приключи зареждането.

В индекс.html файл, всеки домакински уред е затворен в уред клас. Редове 26-29 се използват за избор на всеки домакински уред от уеб страницата и прикачване на щракнете събитие за уреда. Когато някой кликне върху домакински уред от уеб страницата, toggleApplianceState () функцията ще се изпълни.


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


Придвижете се до статичен / директория в директорията на вашия проект, както следва:

$ cd статично /


Изтеглете Font Awesome със следната команда:

$ wget https: // use.страхотно.com / releases / v5.15.1 / fontawesome-free-5.15.1-уеб.цип


След като Font Awesome бъде изтеглен, трябва да намерите новия zip файл fontawesome-free-5.15.1-уеб.цип в статичен / директория.

$ ls -lh


Разархивирайте fontawesome-free-5.15.1-уеб.цип файл със следната команда:

$ разархивирайте fontawesome-free-5.15.1-уеб.цип


The fontawesome-free-5.15.1-уеб.цип файлът сега трябва да бъде разархивиран.


Новата директория fontawesome-free-5.15.1-уеб / трябва да се създаде в статичната / директория, както можете да видите на екранната снимка по-долу.

$ ls -lh

Преименувайте директорията fontawesome-free-5.15.1-уеб / да се fontawesome / със следната команда:

$ mv -v fontawesome-free-5.15.1-уеб fontawesome


Сега вече не се нуждаете от fontawesome-free-5.15.1-уеб.цип файл. И така, премахнете fontawesome-free-5.15.1-уеб.цип файл със следната команда:

$ rm -v fontawesome-free-5.15.1-уеб.цип


The статичен / структурата на директориите трябва да изглежда както е показано на екранната снимка по-долу.

$ ls -lh


Върнете се обратно в директорията на проекта ~ / www както следва:

$ cd ..

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

За да тествате уеб приложението за домашна автоматизация, изпълнете следната команда в директорията на проекта:

$ FLASK_APP = сървър.py колба работи


Уеб приложението трябва да е достъпно на порт 5000 на вашия Raspberry Pi.


От уеб браузъра Chromium посетете http: // localhost: 5000. Уеб приложението за домашна автоматизация трябва да се зареди.

Щракнете върху иконата на крушката, посочена на изображението по-долу.


Сега крушката за променлив ток трябва да бъде включена. Цветът на иконата също трябва да се промени на зелен, което показва, че крушката е включена.


И така, уеб приложението за домашна автоматизация работи. Натиснете + ° С за прекратяване на уеб сървъра.

Създаване на Systemd услуга за уеб приложението за автоматизация на дома

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

Първо създайте raspi-home-автоматизация.обслужване файл в директорията на вашия проект, както следва:

$ nano raspi-home-автоматизация.обслужване

Въведете следните редове в raspi-home-automation.служебен файл.

[Мерна единица]
Описание = Уеб услуга за домашна автоматизация на Raspberry Pi
След = мрежа.мишена
[Обслужване]
WorkingDirectory = / home / pi / www
Околна среда = FLASK_APP = сървър.py
Околна среда = FLASK_ENV = производство
ExecStart = / usr / bin / flask run --host = 0.0.0.0
StandardOutput = наследяване
StandardError = наследяване
Рестартиране = винаги
Потребител = pi
[Инсталирай]
WantedBy = многопотребителски.мишена

След като приключите, натиснете + х следван от Y и да запазите raspi-home-автоматизация.обслужване файл.


Копирайте raspi-home-автоматизация.обслужване файл в / etc / systemd / system / директория със следната команда:

$ sudo cp -v raspi-home-automation.service / etc / systemd / system /


Презаредете системните демони, за да влязат в сила промените, както следва:

$ sudo systemctl daemon-reload


Добавете raspi-home-автоматизация услуга за стартиране на системата на Raspberry Pi OS със следната команда:

$ sudo systemctl дава възможност за автоматизация на raspi-home.обслужване


Рестартирайте Raspberry Pi със следната команда:

$ sudo рестартиране


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

$ sudo systemctl статус raspi-home-automation.обслужване

Достъп до уеб приложението за автоматизация на дома от други устройства

За достъп до уеб приложението за домашна автоматизация от други устройства във вашата домашна мрежа ще трябва да знаете IP адреса на вашето Raspberry Pi устройство.

Можете да намерите IP адреса на вашето Raspberry Pi 4 устройство от уеб интерфейса за управление на вашия домашен рутер. В моя случай IP адресът е 192.168.0.103. Това ще бъде различно за вас. Така че, не забравяйте да замените моя IP с вашия отсега нататък.


Ако имате достъп до конзолата Raspberry Pi, можете да изпълните и следната команда, за да намерите IP адреса.

$ hostname -I


След като знаете IP адреса на вашето Raspberry Pi устройство, можете да получите достъп до него от всяко устройство във вашата домашна мрежа.

Както можете да видите на екранната снимка по-долу, имам достъп до уеб приложението за автоматизация на дома от моя смартфон с Android.


Не забравяйте да включите щепсела на крушката в контакта.


Електрическата крушка трябва да бъде изключена по подразбиране.


Ако докоснете иконата на крушка от уеб приложението за домашна автоматизация, цветът на иконата на крушката трябва да се промени на зелен, което показва, че крушката е включена.


Както можете да видите на изображението по-долу, крушката е включена.

Заключение

Тази статия ви показа как да използвате 5V реле за управление на електрическо устройство с високо напрежение от Raspberry Pi с помощта на езика за програмиране Python. Статията също така ви показа как да напишете базирано на API Python колба уеб приложение за управление на релето от уеб браузъра. Тази статия трябва да ви помогне да започнете с домашната автоматизация с помощта на Raspberry Pi.

Как да разработите игра на Linux
Преди десетилетие не много потребители на Linux биха прогнозирали, че любимата им операционна система един ден ще бъде популярна игрална платформа за ...
Пристанища с отворен код на търговски игрални машини
Безплатни разширения на играта с отворен код и междуплатформени игри могат да се използват за възпроизвеждане на стари, както и някои от доста скорошн...
Най-добрите игри за команден ред за Linux
Командният ред не е само най-големият ви съюзник при използване на Linux - той може да бъде и източник на забавление, защото можете да го използвате, ...