Пока мы собираем предзаказы на Remote, начнем цикл статей о работе устройства и кейсах его применения.
Сегодня мы расскажем о беспроводных трактах устройства и особенностях их работы:
- О схемах работы устройства Remote.
- О работе Wi-Fi устройства.
- О том, как работает Bluetooth устройства.
- И, наконец, о том, как осуществлять запросы к устройству.
Схемы работы устройства Remote
Устройство может работать в 2х режимах работы: в режиме датчика и в режиме исполнителя.
Фактически, каждому из этих режимов работы соответствует определенный тип питания: если Remote подключен по USB - кабелю, то он работает в режиме датчика и исполнителя. Если работа идет от батареек, то устройство работает в режиме датчика.
В чем разница?
При постоянном питании от USB устройство всегда находится «на линии»: у него включен как WiFi, так и Bluetooth.
В случае работы от батареек - подавляющее количество времени сетевой тракт устройства отключен и включается только на 4 секунды каждые 5 минут. Это решение связано с быстрым расходом питания при постоянно включенных сетевых интерфейсах. Тем не менее, если на Remote приходит инфракрасный сигнал, то устройство «просыпается» и сообщает об этом в линию связи.
Не все ИК сигналы позволяют разбудить устройство, так как реализована дополнительная защита от ИК составляющей солнечных лучей, однако устройство умеет различать фоновые сигналы и сигналы от пульта управления.
Как работает Wi-Fi устройства
В каждом устройстве системы можно сохранить до 5-ти точек доступа.
Сохранение SSID / пароля происходит по принципам FIFO — при добавлении 6-ой — первая сохраненная точка доступа будет стерта. Обновление пароля не стирает и не изменяет количество сохраненных точек доступа. Единственное ограничение на текущий момент — то, что точка доступа должна быть не со скрытым SSID. Тем не менее, это ограничение чисто программное и может быть убрано в следующих версиях прошивки.
При старте Remote производит сканирование существующих рядом точек доступа Wi-Fi и проверяет наличие сохраненных паролей в памяти для найденных SSID. При наличии совпадений оно последовательно пробует коннект к каждой из них. В этот момент начинает мигать зеленым индикатор. Это означает, что идет процесс подключения.
Как только индикатор постоянно засветился зеленым — подключение удалось. Если точек доступа с известными паролями не найдено, то устройство переходит в режим точки доступа c SSID «LOOK.in Remote XXXXXXXX» и паролем, совпадающим с его ID (можно найти на наклейке с обратной стороны устройства), индикация светодиода — желтое свечение.
Если устройство подключено от USB, то оно будет раздавать точку доступа постоянно, до тех пор, пока пользователь не решит подключить его в свою Wi-Fi сеть (если решит, конечно, можно и без этого пользоваться).
При работе от батареек:
- Если Remote работает в режиме точки доступа (не подключено ни к одной сети), через 2 минуты оно перейдет в режим энергосбережения, и будет каждые 5 минут пытаться подключиться к точкам доступа, если они сохранены в памяти.
- Если устройство работает в режиме клиента, то каждые 5 минут будет подключаться к точке доступа на 4 секунды.
- Если принят ИК сигнал с пульта и устройство работало в режиме клиента, Remote выйдет из режима сна, подключится к точке доступа пользователя и посредством UDP сообщит о принятом сигнале.
Как работает Bluetooth устройства
Устройство имеет на своем борту Bluetooth 4.2 и реализует стек Bluetooth Low Energy. За редким исключением это BLE сервер.
BLE имеет 3 режима работы:
- Защищенный
- Публичный
- Сигнальный
В публичном режиме никаких ограничений на мощность сигнала нет, однако системная конфигурация устройства недоступна.
Сигнальный режим на короткое время включается в том случае, если сработал какой-нибудь датчик внутри Remote (например, принят ИК сигнал с пульта). В таком случае в Advertising пакет включается информация о сработавшем сенсоре и его значение. Кроме того, в сигнальном режиме интервал между пакетами минимален, что позволяет клиентам молниеносно обнаружить устройство.
Защищенный режим включается на 2 минуты с момента первого включения Remote. После этого устройство автоматически переходит в публичный режим. Если необходимо сконфигурировать устройство, а 2 минуты истекли - необходимо отключить питание и подать его снова. Тем не менее, протоколом предусмотрена возможность перехода устройства Remote из публичного режима в защищенный с помощью специального запроса к GATT.
Благодаря защищенному режиму реализуется так называемое «Быстрое подключение», с помощью которого можно настроить Remote просто поднеся к нему свой смартфон.
Если устройство работает от USB:
- 2 минуты работает защищенный режим BLE.
- По истечению 2х минут включается публичный режим, или ранее, если устройство было настроено с помощью мобильного приложения.
- Если приходит ИК сигнал BLE на короткое время переходит в сигнальный режим, затем возвращается в публичный.
- Если устройство работает от батареек:2 минуты работает защищенный режим BLE По истечению 2х минут BLE отключается и включается на 4 секунды каждые 5 минут в публичном режиме.
- Если приходит ИК сигнал BLE включается в сигнальном режиме, затем отключается.
Как осуществлять запросы к устройству
Краткое описание API устройства представлены на сайте проекта.
Если устройство выступает в режиме Wi-Fi точки доступа и не подключено в качестве клиента, то для выполнения запросов необходимо подключиться к точке доступа, которую оно создает и выполнять все запросы к IP 192.168.4.1
Если же устройство выступает в режиме клиента к вашей Wi-Fi точке доступа, то необходимо выполнять запросы либо к IP устройства, либо к URL http://XXXXXXXX.local, где XXXXXXXX — ID устройства, который можно найти с обратной стороны корпуса.
Запросы можно выполнять любым клиентом, например, с помощью Postman.
API устройств построен по REST-схеме, однако существенно упрощён.
Для получения какой-либо информации используются GET запросы, для сохранения или изменения данных - POST запросы. POST-запросы доступны не для всех данных, так как некоторые поля являются неизменяемыми. POST запросы должны быть отправлены в виде JSON в теле сообщения.Запросы интерпретируются в независимости от закрывающего слеша «/». При интерпретации все URI запросов приводятся к нижнему регистру. Таким образом запросы вида «/Device/», «/device/» при обработке будут приведены к виду «/device»
Запрос вида:
POST /Device» { "Name" : "Торшер" }
Будет приведен устройством к виду:
POST /device { "name" : "Торшер" }
Все поля объекта первого уровня, в данном случае — «name» — дополнительно передаются в запросы внутри устройства как параметры наравне с параметрами GET запроса, разделенными &. Это приводит к тому, что для устройства список параметров следующих запросов эквивалентен:
GET /device?name=Торшер
POST /Device { "Name" : "Торшер" }
Виды запросов:
GET — получение информации об узле APIPOST — сохранение и обновление информации об узле API
DELETE — удаление узла API
Коды ответов:
200 — Запрос успешно выполнен400 — Переданы неверные параметры запроса
500 — Внутренняя ошибка устройства при выполнении запроса
Спасибо за внимание, в следующей записи рассмотрим подключение и конфигурацию нового устройства
Жду продолжения 👍🏻👍🏻👍🏻
Интересно как вам удалось добиться стабильной работы BLE и WIFI на ESP32 одновременно. У меня в самоделке не выходит стабильно. В интернете советуют разделять на разные чипы протоколы (тогда будут раздельные антенны). Как это сделано у вас, если не секрет?
Это был долгий тюнинг и подгонка параметров работы Wi-Fi и BLE.
На самом деле ESP32 не может работать одновременно (по крайней мере пока нам не удалось этого добиться), когда Wi-Fi включен в режиме точки доступа, а BLE в режиме клиента со сканированием. Тогда ответ от точки доступа может занимать десятки секунд, что категорически ставит крест на коммерческом использовании. А, зачастую, вообще к точке доступа не подключиться. В остальных сочетаниях все стабильно, даже без особой подгонки. Исходя из этого, в основном BLE у нас работает в режиме сервера. Очень редко переходя в режим клиента, и в очень специфичных случаях.
Другая большая проблема чипа, к сожалению, в том, что BLE использует один с Wi-Fi радиотракт, то есть не получается держать BLE-сервер постоянно включенным на батарейных девайсах.