Открытая платформа для создания заботливой квартиры
Прежде чем приступить к программированию сценариев умного дома, нужно собрать инфраструктуру - глаза и руки. Сделать это быстро и без лишних затрат помогут макеты.
Почему Arduino?
Короткий ответ: потому что этой платформе обучают даже в школе. Безусловно, сейчас есть невероятное разнообразие аппаратных средств с более мощными вычислительными модулями, хорошей памятью, многообразием аппаратных интерфейсов и встроенными радиомодулями. Проблема с ними в том, что они стоят своих денег и предназначены для профессиональных разработчиков электроники.
Причина №1. Arduino - это очень просто, широко распространено, доступно и невероятно дешево. Вы сможете найти примеры кода под любые датчики, которые захотите использовать. Это просто создано для любительского прототипирования.
Кто-то скажет, что язык C уже анахронизм, а программировать устройства нужно на Python и JavaScript, ведь есть esp32, Espruino, Iskra JS и т.п. В домашней автоматизации есть очень разные задачи: простые и сложные. Простых очень много - управление исполнительными устройствами, снятие показаний с датчиков. На разных платформах количество кода будет одинаковое (вряд ли больше одного экрана), но цена за это окажется несопоставима. Нет никакого смысла впустую гонять такие мощности и переплачивать за это!
Причина №2. Arduino - это адекватное решение простых задач домашней автоматизации.
Часто можно встретить "холивар", что ESPxx куда круче Arduino по возможностям и главное - на борту есть WiFi-модуль. Для решения большинства задач домашней автоматизации WiFi крайне избыточен, ведь приходится передавать всего по несколько байт информации. Однако, при этом он очень энергоемкий и добавляет лишних забот по конфигурированию (хранит имя сети и пароль). А если WiFi не использовать, тогда зачем нужен этот модуль вообще?
Причина №3. Arduino - не содержит ничего лишнего, позволяет строить энергоэффективные решения.
Радиоинтерфейс
При выборе стандарта радиосвязи мы руководствовались доступностью устройств, широтой распространения технологии, простотой настройки и мобильностью. Наилучшим образом под эти критерии подходят WiFi и Bluetooth. Например, в Raspberry Pi и Orange Pi 2 Plus эти стандарты поддерживаются из коробки.
Интерфейс | Плюсы | Минусы | Потребление |
---|---|---|---|
WiFi | Высокая скорость передачи данных, есть связь с Интернет-сервисами. Приличный радиус действия. | Зависимость от параметров локальной сети. Для приема данных нужен режим HTTP-сервера. | 30 мА - 200 мА |
Bluetooth LE | Независим от Интернета. Есть широковещательный режим. Есть готовые прошивки. | Небольшой радиус действия (10 м). Передаются небольшие объемы данных. Может быть задержка в передаче данных. | 0.1 мА |
Другие | Устраняют недостатки предыдущих | Слабое распространение элементной базы. Требуют лицензионных отчислений. |
Принципиальное отличиее между WiFi и Bluetooth - топология сети устройств:
- Все WiFi устройства образуют "звезду", то есть у них есть центр, на который они передают данные и принимают команды для управления. В каждом оконечном устройстве должны быть прописаны имя сети и пароль. Если вы захотите сменить сеть, то вам придется перепрошить все устройства.
- Устройства Bluetooth LE передают свои данные в режиме широковещательной рассылки, таким образом, центральный узел всегда знает, какие устройства есть в его поле действия и получает данные. При необходимости он может подключиться к этому устройству и передать ему команду. Вам не нужно конфигурировать оконечные устройства вовсе. Перенесите их в другой дом или квартиру и они сразу заработают!
При всех своих минусах Bluetooth LE идеально подходит для прототипирования устройств, подключаемых к умной квартире и дому. Такие устройства являются мобильными, легко собираются, длительное время работают от одной или нескольких батареек.
Обзор BLE-модулей
Чтобы устройства домашней автоматизации могли использовать радиоинтерфейс Bluetooth LE, нужно подключить к Arduino чип, который реализует эту спецификацию. Она совсем не простая и "пустые" чипы (без полезной нам прошивки) нам не подойдут, хоть их и великое множество.
Задача решается использованием готовых BLE-модулей, где разрабочики уже залили в чип прошивку, которая умеет рассылать данные и принимать команды. Но, прежде чем покупать модуль, четко определитесь с тем, какие возможности вам от него потребуются. Модули разных производителей содержат разные прошивки, их нужно уметь отличать.
Название модуля | Производитель | Прошивка | Скорость, бод | Описание |
---|---|---|---|---|
HM-10 BLE 4.0 | JNHuaMao | Самый полнофункциональный BLE-модуль. Нужно уметь визуально отличать его от других реализаций, чтобы не купить аналог | ||
BLE CC41-A описание команд | Bolutek | V3.0.6 | 9600 | Простой BLE-модуль. Может передавать показания двух датчиков в широковещательном режиме. Может передавать пользовательские данные при подключении. |
BLE JDY-08 описание команд | jdy-rf | V3.383 | 115200 | Содержит развитые возможности по управлению выходами IO и PWM. Позволяет считывать параметры датчиков (до 5-ти устройств) в режиме iBeacon. |
BLE JDY-10 | - | V2.4 | 9600 или 115200 | Простой BLE-модуль на базе мощного китайского SoC TLSR8266F512. Позволяет передавать AT-команды или показания двух датчиков в режиме iBeacon. |
Настройка модулей
Взаимодействие с CC2541 осуществляется через интерфейс UART. На платке специально выведены ножки Rx и Tx для подключения к ПК или микроконтроллерам. Предварительно необходимо настроить модуль, например, задать ему дружественное имя, выбрать режим работы, мощность радиосигнала и т.п. Достигается это передачей AT-команд через UART-интерфейс, прямо как в старых модемах. У каждой прошивки есть свой собственный набор AT-команд и спецификация, где описано их назначение.
Есть два простых способа настройки BLЕ-модуля:
- при помощи кабеля конвертера USB - RS232 и программки типа Terminal
- при помощи Arduino-платы, к пинам которой подключается BLE-модуль.
Для реализации второго сценария мы подготовили схему подключения:
Откройте COM-монитор, встроенный в Arduino IDE, и загрузите следующую программу в Arduino. В результате BLE-модуль СС41-A сообщит свой адрес и версию прошивки.
#include <SoftwareSerial.h>
SoftwareSerial bleSerial(2, 3); // RX, TX
void setup() {
// проверьте, что скорость связи совпадает со скоростью по умолчанию для конкретного BLE-модуля
bleSerial.begin(9600);
bleSerial.setTimeout(500);
Serial.begin(9600);
configureDevice();
}
void loop() {
char c;
if (Serial.available()) {
c = Serial.read();
bleSerial.print(c);
}
if (bleSerial.available()) {
c = bleSerial.read();
Serial.print(c);
}
}
void configureDevice() {
sendCommand("AT");
sendCommand("AT+VERSION");
sendCommand("AT+VER");
sendCommand("AT+LADDR");
}
void sendCommand(const char * data) {
Serial.println(data);
bleSerial.println(data);
while(bleSerial.available()) {
Serial.println(bleSerial.readStringUntil('\n'));
}
delay(20);
}
Теперь вы во всеоружии для того, чтобы перейти к сборке умных датчиков и исполняющий устройств. Вперед!
Где купить
Как-то так сложилось, что купить элементы в оффлайне за разумную цену и в удобном месте не получится. Рекомендуем приобретать элементы в интернет-магазинах:
- Amperkot.ru - у ребят отличные цены на макетные платы, провода, батарейные отсеки, кнопки/светодиоды/резиторы и т.п. Некоторые простые датчики также можно купить здесь, например, touch-сенсоры, RCWL-сенсоры и т.п.
- ebay.com - в Китае лучше заказывать всевозможные датчики, BLE-модули, микроконтроллеры и микрокомпьютеры - это будет минимум в два раза дешевле, чем в интернет магазинах в РФ. Срок бесплатной доставки составит примерно от 20 до 40 дней.
Отладка
Спецификация Bluetooth LE определяет некий способ работы с BLE-устройствами:
- сначала устройства нужно подключить по радиоканалу;
- при помощи утилит (или ПО, установенного на телефоне) можно запросить перечень характеристик (или функций), поддерживаемых устройством;
- тем же способом можно считывать/записывать значения характеристик. То, на какие характеристики будет какой отклик, определяется прошивкой BLE-модуля.
- BLE-устройства поддерживают режим рассылки сообщений (advertising, iBeacon). В этом режиме с некоторой частотой отправляются сервисные сообщения, в которых можно передавать пользовательские данные.
Подайте питание на BLE-модуль и светодиод, расположенный на платке, скорее всего начнет периодически мигать. Это означает, что соединение с модулем не установлено.
Подключаемся к RPi по SSH и выполняем такие команды:
sudo -s
docker exec -it hass bash
Теперь мы можем выполнять команды внутри docker-контейнера с Home Assistant. Запустим сканирование BLE-устройств:
# hcitool lescan
LE Scan ...
00:15:84:00:70:C1 CC41-A
Пробуем подключиться, после чего светодиод на платке станет светиться постоянно:
# hcitool lecc 00:15:84:00:70:C1
Connection handle 64