Блог

Remote: Беспроводные интерфейсы

Пока мы собираем предзаказы на 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 — получение информации об узле API
POST — сохранение и обновление информации об узле API
DELETE — удаление узла API

Коды ответов:

200 — Запрос успешно выполнен
400 — Переданы неверные параметры запроса
500 — Внутренняя ошибка устройства при выполнении запроса

Спасибо за внимание, в следующей записи рассмотрим подключение и конфигурацию нового устройства

t.me/LOOKin_Remote


Жду продолжения 👍🏻👍🏻👍🏻

Интересно как вам удалось добиться стабильной работы BLE и WIFI на ESP32 одновременно. У меня в самоделке не выходит стабильно. В интернете советуют разделять на разные чипы протоколы (тогда будут раздельные антенны). Как это сделано у вас, если не секрет?

Это был долгий тюнинг и подгонка параметров работы Wi-Fi и BLE. 

На самом деле ESP32 не может работать одновременно (по крайней мере пока нам не удалось этого добиться), когда Wi-Fi включен в режиме точки доступа, а BLE в режиме клиента со сканированием. Тогда ответ от точки доступа может занимать десятки секунд, что категорически ставит крест на коммерческом использовании. А, зачастую, вообще к точке доступа не подключиться. В остальных сочетаниях все стабильно, даже без особой подгонки. Исходя из этого, в основном BLE у нас работает в режиме сервера. Очень редко переходя в режим клиента, и в очень специфичных случаях.

Другая большая проблема чипа, к сожалению, в том, что BLE использует один с Wi-Fi радиотракт, то есть не получается держать BLE-сервер постоянно включенным на батарейных девайсах.


Вернуться назад
Вернуться назад