Система управління розумним будинком на основі raspberry pi

Система управління розумним будинком на основі Raspberry Pi

Інтернет речей

Система управління розумним будинком на основі Raspberry Pi

Натхненний ідеєю забезпечення власного життя розумного будинку, я почав роботу над проектом системи управління освітленням у вітальні свого будинку. Мета даного проекту полягала в створенні системи, що дозволяє здійснювати установку таймерів для відключення освітлення у вітальні будинку з можливістю управління цією системою за допомогою мережі Інтернет за допомогою веб-браузера. Також я хотів реалізувати API, який міг би використовуватися згодом для програмного управління режимом роботи пристрою з боку інших пристроїв.

Апаратне забезпечення

Сформувавши список вимог до системи, я почав підбір апаратного забезпечення. У Таблиці 1 наведено список приладів і матеріалів, які були використані мною для реалізації апаратної частини системи, а на рисунку 1 показана блокова діаграма апаратної частини системи.

Таблиця 1. Прилади і матеріали

Обмеження натягу кабелів

Система управління розумним будинком на основі raspberry pi

Малюнок 1. Блокова діаграма апаратної частини системи

Опис процесу монтажу апаратної частини системи займає багато часу, але є досить простим. В першу чергу слід з'єднати блок живлення з стінний розеткою з допомогою подовжувача, відрізавши розетку це подовжувача. Зачистіть дроти і закріпіть їх за допомогою гвинтів в терміналах блоку живлення. Далі з'єднайте Raspberry Pi з блоком живлення, відрізавши роз'єм типу A від кабелю USB і з'єднавши дроти з відповідними висновками блоку живлення, і вставте роз'єм micro USB в роз'єм живлення RPi. Після цього слід зачистити обидва кінці двох жив гнучкого кабелю і з'єднати їх з відповідними терміналами з позначеннями GND і JDVcc блоку живлення і блоку реле. Нарешті, слід видалити джампер, що з'єднує висновок з позначенням JDVcc з висновком з позначенням Vcc. У тому випадку, якщо ви не видалите цей дампер, на призначені для напруги 3.3 В висновки RPi буде подано напругу в 5 В, яке з високою ймовірністю виведе комп'ютер з ладу.

Тепер, коли харчування підведено до всіх терміналів, слід з'єднати лінії IN1-IN8 модуля реле з відповідними висновками роз'єму GPIO за допомогою гнучкого кабелю таким чином, як показано на рисунку 2. Представлений в даній статті код був розроблений для випадку, коли висновки IN1-IN7 з'єднані з висновками GPIO1-GPIO7. У тому випадку, якщо ви вирішите поєднати дані висновки по-іншому, вам доведеться модифікувати відповідним чином ваш код.

Схема розташування висновків роз'єму GPIO Raspberry Pi приведена на рисунку 2. На порти введення-виведення Raspberry Pi подається напруга 3.3 В, а модуль реле працює з напругою 5 В. Однак, реле ізольовані від висновків GPIO Raspberry Pi за допомогою оптопари. На оптопари може подаватися напруга 3.3 В з виведення Vcc. На висновок Vcc модуля реле може бути подана напруга 3.3 В з роз'єму GPIO Raspberry Pi. Переконайтеся в тому, що ви прибрали джампер, який замикає висновки Vcc і JDVcc модуля реле. На висновок JDVcc має подаватися напруга 5 В для коректної роботи реле. Розглянутий модуль реле розмикає контакти в активному стані. З цього випливає, що ви повинні заземлити термінали IN1-IN8 для включення реле.

Система управління розумним будинком на основі raspberry pi

Малюнок 2. Схема розташування висновків роз'єму GPIO Raspberry Pi

Попередження: проявляйте особливу обережність при з'єднанні апаратних компонентів системи. Наслідки ураження електричним струмом можуть оказатьсяфатальнимі!

Система управління розумним будинком на основі raspberry pi

Малюнок 3. Монтаж апаратної частини системи

програмне оточення

Програмне забезпечення

бібліотеки

Серверний додаток, що працює на рівні Raspberry Pi, має керувати станом висновків роз'єму GPIO плати Raspberry Pi. Воно також має надавати інтерфейс HTTP для передачі даних графічного інтерфейсу і інтерфейс WebSocket для передачі повідомлень з командами і даними стану. Готового до установки серверного додатка з такими специфічними функціями просто не існує, тому я прийняв рішення про створення своєї власної реалізації сервера з використанням мови програмування Python. Для спрощення розробки описаного серверного додатка з використанням мови програмування Python доступні модулі з реалізаціями методів для роботи з інтерфейсом GPIO Raspberry Pi, для створення сервера HTTP і для роботи з інтерфейсом WebSockets. Так як всі перераховані модулі призначені для виконання поставлених завдань, мені довелося розробити мінімальний обсяг коду.

Лістинг 1. Використання модуля RPi.GPIO

CherryPy є модульним веб-фреймворком для мови програмування Python. Можливості даного фреймворка легко розширюються до підтримки протоколу WebSocket за допомогою модуля ws4py. Модулі CherryPy і ws4py також можуть бути встановлені за допомогою інструменту pip.

Приклади використання фреймворка CherryPy і плагіна ws4py наведені в розділах з документацією фреймворка CherryPy і модуля ws4py відповідно. Для створення найпростішого сервера на основі фреймворку CherryPy може використовуватися код, наведений в лістингу 2.

Лістинг 2. Код найпростішого сервера на основі фреймворку CherryPy

У більш складному коді як параметр методу quickstart може передаватися покажчик на екземпляр класу з параметрами конфігурації. Даний підхід проілюстровано за допомогою фрагмента коду з лістингу 3. Наведений код обслуговує запити до подресурсу / js, працюючи з файлами з піддиректорії js. Піддиректорія js розташована в директорії з вихідним кодом, що розробляється сервера.

Лістинг 3. Передача параметра методу quickstart

Для додавання підтримки протоколу WebSocket в сервер на основі фреймворку CherryPy слід модифікувати код таким же чином, як показано в лістингу 4. В рамках класу обробника запитів протоколу WebSocket повинні бути реалізовані три методи: opened. closed і received_message. У лістингу 4 наведено код найпростішого сервера з підтримкою протоколу WebSocket, який був максимально скорочений з метою пояснення призначення його основних функціональних частин; виходячи з вищесказаного, даний код насправді не виконує ніякої корисної роботи.

Лістинг 4. Найпростіший сервер з підтримкою протоколу WebSocket

На стороні клієнта сценарії сторінки HTML повинні реалізовувати функцію для з'єднання з сервером по протоколу WebSocket і обробки вхідних повідомлень. У лістингу 5 показаний код простий сторінки HTML зі сценарієм, що реалізує дану функцію. У цьому коді подія jQuery.ready () використовується для ініціювання з'єднання з сервером по протоколу WebSocket. Сценарій з даного лістингу реалізує методи для обробки всіх подій: onopen (). onclose (). onerror () і onmessage (). Для розширення можливостей даного сценарію в нього слід додати реалізацію методу onmessage (). призначеного для обробки вхідних повідомлень.

Лістинг 5. Код сторінки зі сценарієм для з'єднання з сервером по протоколу WebSocket і обробки вхідних повідомлень

Система управління розумним будинком

Файл relayLabel.json містить необхідні дані конфігурації, такі, як назви реле, значення таймерів для включення і відключення освітлення та інші. У лістингу 6 показана базова схема конфігурації програмної частини системи. Наведений шаблон повинен повторюватися для кожного з реле. Значення властивості dow формується побитово для кожного з днів тижня починаючи з молодшого двійкового розряду для понеділка і закінчуючи старшим двійковим розрядом для неділі.

Лістинг 6. Базова схема конфігурації програмної частини системи

На рисунку 4 показана блокова діаграма системи із зазначенням на її основні функціональні частини. У Таблиці 2 перераховані всі команди, які клієнт може відправити серверу, а також дії, які сервер повинен буде виконувати при їх отриманні. Дані команди передаються від браузера сервера в форматі JSON. Для команд використовується наступна схема:

Система управління розумним будинком на основі raspberry pi

Малюнок 4. Блокова діаграма системи

Таблиця 2. Команди

Збереження нових назв реле в файлах формату JSON

висновок

Схожі статті