Большая красная кнопка на Thunderboard Sense и Artik 5 (BLE)

В качестве проекта «выходного дня» я взялся за реализацию большой красной кнопки из отладок, которые у меня имелись в наличии — в частности, на Thunderboard Sense Kit. Почему именно большая красная кнопка? Не знаю, людям нравится, внимание притягивает, да и вообще модная тема.

Что необходимо для реализации проекта:

  1. Большая красная кнопка — ради нее все и задумывалось. Кнопка должна быть нормально разомкнутой.
  2. Thunderboard Sense Kit
  3. Samsung Artik 5
  4. Seeed Studio Arduino Base Shield
  5. Seeed Studio Grove Buzzer

complex_white

Настройка Thunderboard Sense

К счастью, нам не нужно ничего менять в коде Thunderboard Sense, иначе бы это превратилось в головную боль — Bluetooth SDK для разработки под это устройство требует наличие компилятора IAR ARM 7.80, что для многих бы стало большой проблемой.

В качестве актуатора будет выступать кнопка SW1 — на данную кнопку будет завязана вся логика.

sw12

Дефолтная прошивка не требует изменений, т.к. имеет следующую логику работы:

  1. В неактивном состоянии Thunderboard Sense спит и не доступен для подключения. Для перехода в режим Advertisement, необходимо нажать SW1.
  2. После нажатия на SW1 устройство будет доступно для подключения.
  3. После отключения от Thunderboard Sense центрального устройства, он снова переходит в режим сна.

На Thunderboard Sense реализованы различные сервисы и характеристики (список можно посмотреть в репозитории приложения для Android). Нас интересует только одна характеристика — CHARACTERISTIC_PUSH_BUTTONS, имеющая UUID fcb89c40-c601-59f3-7dc3-5ece444a401b, которая содержит одно значение uint8_t, которое может быть равно:

  1. Нулю (=0), если не нажата ни одна кнопка;
  2. Единице (=1), если нажата кнопка SW1;
  3. Двум (=2), если нажата кнопка SW2;
  4. Трем (=3), если нажаты SW1 и SW2;

Примечательно, что данная характеристика имеет свойство read, что приводит к нас решению периодического чтения значения характеристики.

Установка пакетов для работы на Artik 5

Если вы берете впервые в руки отладочную плату Artik 5, то для начала необходимо провести базовую настройку, согласно руководству по быстрому старту. Для начала работы необходимо настроить все то, что вам необходимо для работы — это, в основном, обновление до последней версии и подключение по WiFi/Ethernet к сети Интернет.

Далее необходимо залогиниться на Artik, например, через SSH.

В качестве пакетного менеджера для ОС Fedora, предоставляемой Samsung для Artik, является dnf, который установлен по умолчанию, поэтому все инструкции по установке будут приводится для него.

Для начала установим весь софт, необходимый для работы с Bluetooth Smart (синоним — BLE):

Кроме этого, установим git:

Далее — устанавливаем Node.JS и npm:

После того, как успешно установлен npm, необходимо установить основной модуль для работы — noble — модуль позволяет обслуживать BLE-подключения в случае, если устройство, на котором запускается этот код, является центральным (Central Role). Для обратной ситуации есть модуль bleno, но нам нужен именно noble, т.к. Artik 5 будет иметь центральную роль:

Кроме noble необходимо установить artik-sdk — модуль, реализующий работу с периферией Artik

Теперь мы готовы к разработке!

Спаривание устройств

Для этого необходимо воспользоваться интерактивной утилитой bluetoothctl.

Сначала запустим ее:

Затем включим возможность спаривания с помощью данной утилиты:

Далее, включив Thunderboard Sense нажатием на кнопку SW1,   начинаем сканирование, пока не найдем нужное нам устройство — мы его определим по имени и/или адресу:

scan on

Как только нужное устройство найдено, прекращаем сканирование командой:

Самое важное для нас — сохранить/записать адрес нашего Thunderboard Sense и выполнить следующие команды:

На данном этапе мы получим в случае успеха сообщение: «Connection successful» и теперь мы можем запросить информацию об устройстве, введя его адресс:

И мы получим вывод, похожий на следующее:

info

Теперь вводим команду:

Ииииии… мы готовы писать код на Node.JS!

Работа с Bluetooth на Artik 5

noble позволяет реализовывать код для центрального устройства. Таким образом, мы должны обеспечить следующую логику работы при реализации чтения с Thunderboard Sense:

  1. Сканирование — для нахождения включенного Thunderboard Sense.
  2. Подключение к устройству c заранее известным адресом.
  3. Получение списка сервисов и характеристик.
  4. Чтение значений характеристики, отвечающей за кнопки.

Если очень кратко — то смотрите код в репозитории проекта https://bitbucket.org/sithings/app_thunderboardtoartik

Сканирование

Для начала сканирования, необходимо удостовериться, что адаптер Bluetooth включен и только после этого запускать сканирование:

Подключение к Thunderboard Sense

После начала сканирования необходимо нажать кнопку SW1 на Thunderboard Sense, чтобы вывести его из режима сна. Как только устройство с нужным адресом появится в зоне действия сети, происходит подключение к нему.

Получение списка сервисов и характеристик

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

Я определяю нужную нам характеристику, отвечающую за состояние кнопок с помощью перебора списка всех характеристик:

Чтение значений характеристики

Характеристика, которая отвечает за состояние кнопок, имеет только одно свойство — read — т.е. для того, чтобы получать состояние кнопок, нам нужно периодически считывать ее значения через заданные интервалы времени. После того, как нужная характеристика определена, необходимо задать интервал вызова считывания значения кнопок:

Код самой функции обратного вызова, думаю, не требует пояснений:

Заставляем буззер пищать при нажатии кнопки на Thunderboard Sense

К сожалению, у меня не получилось работать с периферией Artik 5 через модуль artik-sdk и я решил работать с GPIO напрямую через sysfs. Буззер Grove Buzzer подключен через Seeed Studio Base Shield на пин 2 в терминологии Arduino. Для Artik этот пин — gpio121.

При запуске скрипта пин должен быть инициализирован как «выход»:

Для того, чтобы буззер пищал, необходимо пин подтянуть к питанию:

Для того, чтобы перестал пишать — притянуть к земле:

При выходе из скрипта пин должен быть освобожден для использования другими программами:

Все это реализовано в модуле config.js репозитория https://bitbucket.org/sithings/app_thunderboardtoartik.

Обличаем Thunderboard Sense в большую красную кнопку

У меня вот такая большая красная кнопка, как на фото.

Big Red Button

Примечательно, что она стоит дороже, чем сам Thunderboard Sense Kit.

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

button connect

Подпаяйтесь удобными вам проводами согласно схеме и у вас получится что-то похожее на мое фото.

inside_button

Тестирование

Видео теста работы.

Многие скажут, что это совсем не серьезно — такая слабая пищалка для такой огромной кнопки. Ну что ж — я заменил буззер на реле и подключил сигнальную лампу.

Выглядит уже более солидно.

Результаты

Ну что ж, все работает. Хотелось бы конечно сделать буззер как отдельное Bluetooth-устройство, но у меня был только один Thunderboard Sense. Ну а идей, планов по доработке и приведение в законченный вид, конечно же, множество.

Ссылка на репозиторий с кодом — https://bitbucket.org/sithings/app_thunderboardtoartik

Ссылки

Сохранить

Сохранить

Сохранить

Сохранить

Сохранить

Сохранить

Сохранить

Добавить комментарий