Открытая платформа для создания заботливой квартиры

Прежде чем приступить к программированию сценариев умного дома, нужно собрать инфраструктуру - глаза и руки. Сделать это быстро и без лишних затрат помогут макеты.

При выборе стандарта радиосвязи мы руководствовались доступностью устройств, широтой распространения технологии, простотой настройки и мобильностью. Наилучшим образом под эти критерии подходят WiFi и Bluetooth. Например, в Raspberry 3 Pi и Orange Pi 2 Plus эти стандарты поддерживаются из коробки.

Интерфейс Плюсы Минусы Потребление
WiFi Высокая скорость передачи данных, есть связь с Интернет-сервисами. Приличный радиус действия. Зависимость от параметров локальной сети. Для приема данных нужен режим HTTP-сервера. 30 мА - 200 мА
Bluetooth LE Независим от Интернета. Есть широковещательный режим. Есть готовые прошивки. Небольшой радиус действия (10 м). Передаются небольшие объемы данных. Может быть задержка в передаче данных. 0.1 мА
Другие Устраняют недостатки предыдущих Слабое распространение элементной базы. Требуют лицензионных отчислений.

При всех своих минусах Bluetooth LE идеально подходит для прототипирования устройств, подключаемых к умной квартире и дому. Такие устройства являются мобильными, легко собираются, длительное время работают от одной или нескольких батареек.

Выбор элементной базы

Наверно самым распространенным чипом, в который встроена возможность связи по Bluetooth LE, является семейство чипов фирмы Texas Instruments CC2540/2541. Модули с этим чипом стоят очень дешево и доступны практически в любом магазине электронных компонентов. Обычно на модуле размещены необходимые согласующие элементы, вспомогательные светодиоды и контакты для подключения.

Чип CC2541 относится к катеории SoC (System on Chip), то есть представляет собой полноценный микроконтроллер, с приличным объемом памяти, встроенным АЦП, таймерами и модулем связи Bluetooth LE. По идее, этот чип идеально подходит для реализации компонентов умного дома - может считывать показания датчиков, управлять реле и т.п. Однако, с этим есть некоторые сложности. Легкости, присущей программированию Atmel-контроллеров в среде Arduino, здесь нет. Программирование CC2541 может выполнить только подготовленный специалист.

Но есть и хорошая новость. Во всех разновидностях модулей, построенных на базе CC2541, уже есть готовая прошивка, которая может что-то делать. Вопрос лишь в том, что именно. Здесь мы уже покопались и делимся с вами результатами исследования.

Обзор 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.

Начало работы

Спецификация Bluetooth LE определяет некий способ работы с BLE-устройствами:

  1. сначала устройства нужно подключить по радиоканалу;
  2. при помощи утилит (или ПО, установенного на телефоне) можно запросить перечень характеристик (или функций), поддерживаемых устройством;
  3. тем же способом можно считывать/записывать значения характеристик. То, на какие характеристики будет какой отклик, определяется прошивкой BLE-модуля.
  4. 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

Настройка модулей

Взаимодействие с CC2541 осуществляется через интерфейс UART. На платке специально выведены ножки Rx и Tx для подключения к ПК или микроконтроллерам. Предварительно необходимо настроить модуль, например, задать ему дружественное имя, выбрать режим работы, мощность радиосигнала и т.п. Достигается это передачей AT-команд через UART-интерфейс, прямо как в старых модемах. У каждой прошивки есть свой собственный набор AT-команд и спецификация, где описано их назначение.

Есть два простых способа настройки BLЕ-модуля:

  1. при помощи кабеля конвертера USB - RS232 и программки типа Terminal
  2. при помощи Arduino-платы, к пинам которой подключается BLE-модуль.

Для реализации второго сценария мы подготовили схему подключения:

Схема USB-RS232

Откройте 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 дней.