Умный дом с заменой arduino-компонент.
Основное назначение –– автоматизация различных процессов с помощью контроллеров и одноплатных контроллеров. В рамках данного проекта решение применяется для:
- Взаимодействия удаленного между различными участниками системы;
- Управления различных устройств (в данном проекте приведены упрощенные примеры, но несложно подключить и полноценные бытовые приборы).
Использование данной системы может установлено в абсолютно любом помещении:
- офисные помещения;
- дома;
- магазины и склады;
- банки и другие объекты кредитно-финансовой сферы;
- частный сектор (дома, дачи, квартиры).
Структурная схема реализации данного проекта представлена ниже:
В данном проекте едиснтвенное устройство, которое контролирует все остальные –– LinkIt Smart 7688 Duo. Внутри данного контроллера располагается web-server на nodejs с сервером express
, а также python сервер для обращения к устройствам по виртуальным COM-портам.
В первоначальной реализации использовались физические платы Arduino Uno как конечные устройства с интерфейсом взаимодействия Bluetooth. Во время дальнейшей реализации проекта пришли к результату, что данные платы требуют слишком много ресурсов: как настроек, количество кода, так и банально цены.
Было принято решение использовать эмулятор Proteus. В качестве замены Arduino выступил контроллер PIC16F877.
Список устройств, подключенных к трем таким контроллерам через виртуальные COM-порты:
- датчик температуры;
- LCD-экран;
- шлагбаум (на основе шагового двигателя).
В случае перегрева или переохлаждения датчика температуры автоматически отправляется сообщение через telegram-бота пользователю системы, на LCD-экране показывается специальное уведомление, а также открывается шлагбаум. Ниже представлен скрин конечных виртуальных устройств.
# | Название | Описание | ЯП |
---|---|---|---|
1 | API взаимодействия с устройствами | Взаимодействие с конечными устройствами | Python 3 |
2 | Слушатель устройств | Проверяет устройства на возможные неопладки | Python 3 |
3 | Статика клиентского приложения | Раздача статики | Nodejs |
4 | Бот | Функции бота | Nodejs |
Ручка | Тип запроса | Запрос | Ответ | Описание |
---|---|---|---|---|
/set_lcd_text | GET | ?text= | 'Ok' | Задать текст на LCD |
/clear_lcd | GET | 'Ok' | Очистить текст | |
/get_lcd_text | GET | Получить текущий текст на LCD | ||
/is_ok_lcd | GET | 200/404 | Узнать текущее состояние LCD | |
/turn_motor | GET | <Opened/Closed> | Закрыть/открыть шлагбаум | |
/status_motor | GET | <Open/Close> | Узнать текущий статус шлагбаума | |
/is_ok_motor | GET | 200/404 | Узнать текущее состояние шлагбаума | |
/get_temperature | GET | /-?\d\d\d?.\d\d\d\d C/ | Получить текущую температуру помещения | |
/change_temperature | GET | ?type=<up/low> | 'Ok' | Уменьшить или увеличить температуру программно |
/is_ok_temp | GET | 200/404 | Узнать текущее состояние датчика |
Для увеломлений пользователя используется Telegram-бот.
Клиентская часть написана на TypeScript
+ React
. Ниже скрин пользовательской части.
Здесь написано более подробно.
Клиентская часть отправляет запрос (через прокси сервер на nodejs
) на API для управления устройствами. API через COM-порты виртуальные
управляет устройствами (или получает данные с них).
Также есть watcher, который наблюдает постоянно за устройствами (включены ли устройства, какая температура). Если произошла какая-то аномалия, то вотчер отправляет через Telegram-бота уведомление пользователю, открывает шлагбаум, уведомляет также через LCD-экран.
- Си
- Python 3
- Nodejs
- TypeScript
- Proteus
- mikroC (использовали дополнительный пакет)
- Parallels
Видео примера использования представлено ниже (кликните на картинку для перехода в YouTube):