Настройка на Raspberry Pi Home Automation

Set Up Raspberry Pi Home Automation



Едно от най-важните неща за домашната автоматизация е контролирането на AC с високо напрежение с помощта на DC с ниско напрежение. За да управлявате 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) Захранващ адаптер Micro-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 или micro-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 релейни изводи

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

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


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

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

Свързване на 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 група със следната команда:

$sudousermod-аГgpio $(кой съм аз)


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

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

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

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

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

$mkdir -пв~/www/{шаблони, статични}


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

$CD~/www

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

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

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

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

$наноtest.py


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

отgpiozeroвносLED
от време вноссън

докато Вярно:
реле=LED(4)
печат(„Реле: Включено“)
сън(5)

реле.близо()
печат(„Реле: Изключено“)
сън(5)

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


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


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


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


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

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

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


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

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


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

$python3 test.py


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


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


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


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

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

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

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


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


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


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


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


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

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

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


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

$python3 test.py


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

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


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


Както можете да видите, можем да превключим релето и да контролираме AC крушката с високо напрежение, използвайки езика за програмиране Python. Така че, натиснете + C за прекратяване на test.py скрипт.

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

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

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

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

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

$наноserver.py


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

отколбавносКолба,jsonify,url_for,render_template
отgpiozeroвносLED
отuuidвносuuid4
стаи= {}
стаи['Стая 1'] = [{
'документ за самоличност': uuid4(),
'име':„Светлина 1“,
'икона':'fa fa-крушка',
'състояние':Фалшиво,
'relayPin':4,
'relayInstance':Фалшиво
}, {
'документ за самоличност': uuid4(),
'име':„Вентилатор 1“,
'икона':'fa fa-fan',
'състояние':Фалшиво,
'relayPin':6,
'relayInstance':Фалшиво
}]
стаи[„Баня 1“] = [{
'документ за самоличност': uuid4(),
'име':„Светлина 1“,
'икона':'fa fa-крушка',
'състояние':Фалшиво,
'relayPin':5,
'relayInstance':Фалшиво
}]
приложение=Колба(__ име__)
приложение.config[„SEND_FILE_MAX_AGE_DEFAULT“] = 0
@приложение.маршрут('/')
defУ дома():
връщанеrender_template('./index.html',стаи=стаи)
deftoggle_appliance_status(документ за самоличност):
застаявстаи:
зауредвстаи[стая]:
ако стр(уред['документ за самоличност']) == документ за самоличност:
акоуред['relayInstance']:
уред['relayInstance'].близо()
уред['relayInstance'] = Фалшиво
иначе:
уред['relayInstance'] =LED(уред['relayPin'])
уред['relayInstance'].На()
уред['състояние'] = неуред['състояние']
връщане Вярно
връщане Фалшиво
@приложение.маршрут('/уред/превключване/')
defуред_заключване(документ за самоличност):
връщанеjsonify({'състояние': toggle_appliance_status(документ за самоличност)})

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


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


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


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


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

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


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


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

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

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


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

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


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

Използване на колби Джинджа2 шаблонен език за изобразяване на index.html файл. И така, преминах стаи речник на index.html файл. Джинджа2 ще визуализира началната страница с помощта на стаи данни.


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

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


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


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

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

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


< html lang='На'>
< глава >
< мета charset=„UTF-8“>
< мета име='изглед' съдържание='width = device-width, initial-scale = 1.0'>
< връзка отн='таблица със стилове' href='{{url_for (' static ', filename =' fontawesome/css/all.min.css ')}}'>
< връзка отн='таблица със стилове' href='{{url_for (' static ', filename =' style.css ')}}'>
< заглавие >Домашна автоматизация с Raspberry Pi</ заглавие >
</ глава >
< тяло >
< div документ за самоличност=„съдържание“>
< h1 >Raspberry Pi Домашна автоматизация</ h1 >

{ % за стая в стаи %}
< div клас='стая'>
< h2 >{{ стая }}</ h2 >
< div клас='уреди'>
{ % за уред в стаи [стая] %}
< div клас='уред' документ за самоличност='{{уред [' id ']}}'> ='активен'>
< i клас='{{уред [' икона ']}}'></ i >
< педя >{{уред ['име']}}</ педя >
</ div >
{ % endfor %}
</ div >
</ div >
{ % endfor %}

</ div >

< скрипт src='{{url_for (' static ', filename =' app.js ')}}' Тип='текст/javascript'></ скрипт >
</ тяло >
</ html >

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


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

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


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

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

* {
марж: 0;
подплънки: 0;
шрифтово семейство: „BenchNine“, без засечки;
}

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

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

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

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

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

div.устройствоi.fa {
размер на шрифта: 4ем;
гъвкаво израстване: 1;
подплата: 0,3 дм;
цвят: rgb(204, петдесет, петдесет);
}

div.appliance[данни активни='активен']i.fa {
цвят: rgb(32, 177, 51);
}

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

След като приключите, натиснете + 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('уред');
за(i=0;i<уреди.дължина;i++) {
уреди[i].addEventListener('щракнете',toggleApplianceState);
}
}

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


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

В 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 -ха


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

$разархивирайтеfontawesome-free-5.15.1-web.zip


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


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

$ls -ха

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

$mv -vfontawesome-free-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


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

$ls -ха


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

$CD..

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

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

$FLASK_APP= server.py колба се изпълнява


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


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

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


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


Така че уеб приложението за домашна автоматизация работи. Натиснете + C за прекратяване на уеб сървъра.

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

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

Първо, създайте raspi-home-automation.service файл в директорията на вашия проект, както следва:

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

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

[Мерна единица]
Описание= Уеб услуга за домашна автоматизация на Raspberry Pi
След= network.target
[Обслужване]
Работен Директория=/У дома/пи/www
Заобикаляща среда=FLASK_APP= server.py
Заобикаляща среда=FLASK_ENV= производство
ExecStart=/usr/съм/бягане на колба-хост= 0.0.0.0
StandardOutput= наследявам
Стандартна грешка= наследявам
Рестартирам= винаги
Потребител= пи
[Инсталирай]
Иска се от= многопотребителска цел

След като приключите, натиснете + X следван от И и да запазите raspi-home-automation.service файл.


Копирайте raspi-home-automation.service файл към /etc/systemd/system/ директория със следната команда:

$sudo cp -vraspi-home-automation.service/и т.н./система/система/


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

$sudosystemctl демон-презареждане


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

$sudosystemctlактивирайтеraspi-home-automation.service


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

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


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

$sudosystemctl статус raspi-home-automation.service

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

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

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


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

$име на хост -Аз


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

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


Включете щепсела на електрическата крушка в контакта.


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


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


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

Заключение

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