Accessibility device из Arduino

sadman41
Offline
Зарегистрирован: 19.10.2016

Красиво писать с первого раза не умею, поэтому первый пост пропущу.

sadman41
Offline
Зарегистрирован: 19.10.2016

Прошу не цитировать этот пост, я планирую добавить в него описательную часть по  Switch Access и TalkBack.

Введение

Многие владельцы устройств на Android, наверняка, обращали внимание на функциональный блок "Специальные возможности", а, быть может, активно или периодически ей пользуются. Эта часть операционной системы содержит набор программных сервисов и настроек, с помощью которых цифровые устройства становятся доступнее людям с ограниченными возможностями, такими, как, например, дисфункции конечностей, ослабленное зрение или его отсутствие.

Частью этого раздела являются такие программы, как Switch Access и TalkBack.

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

TalkBack – это программа чтения с экрана от Google, позволяющая взаимодействовать с устройством с помощью аудиоподсказок. Благодаря озвучиванию текста и действий вы можете пользоваться устройством, не глядя на экран. Подробнее о ней можно узнать в разделе "TalkBack" справки по блоку "Специальные возможности". Однако, взаимодействие с сенсорным экраном не всегда бывает удобным по ряду причин. Например - при наличии проблем с мелкой моторикой.

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

Несомненно, что проблемы управления можно решить Bluetooth клавиатурой/мышью/джойстиком. Но данный метод зачастую недешев, а так же излишне гибок в одном аспекте и недостаточно - в другом. Так, например, для работы со Switch Access необходима одна, но большая кнопка, а не множество мелких, как на стандартной клавиатуре. Для TalkBack же клавиатурные "аккорды" могут быть очень устрашающими - Alt-Ctrl-Shift-Return для запуска последовательного чтения экрана. Привыкнуть, конечно, можно, но... 

 

...но можно и иначе - создать относительно недорогое и простое в сборке устройство, к которому подключаются кнопки любого размера (для Switch Access), и/или передающее Android сложные клавиатурные комбинации по нажатию одной физической кнопки (для TalkBack).  

Так, как тут собрались "самопальщики", то и делать подобный девайс будем преимущественно из того, что есть под рукой. Первый предлагаемый мной вариант - это DIY Accessibility Keypad на базе ESP32. Это не совсем "Arduino", но в нем есть Bluetooth и BLE, а стало быть - подключение ко множеству разномастных Android-устройств можно осуществить достаточно просто и однотипно.

Сборка

Сборка очень незамысловата и доступна практически любому человеку, который дружит с собственными руками. Минимально необходимо иметь:
- Плату с контроллером ESP32 в подходящем формате;
- Удовлетворяющее задумке количество кнопок;
- Провода.

Устанавливаем кнопки между выходами GPIO контроллера, и пином GND. В моём прототипе использован MH-ET Live ESP32 MiniKit (в формате Wemos Mini D1) и пять кнопок. Резисторы на плате относятся к подсветке кнопок, и не являются обязательными деталями для конструкции без светодиодов.   

Кнопки подключаются абсолютно любые - большие аркадные или какой-нибудь "грибок", мимо которого уже не промажешь.

Затем загружаем с Github набор исходных текстов прошивки с рабочим названием AccessibilityKeypadBLE. Открываем их в Arduino IDE (1.8.9 справляется отлично) с установленным в нем Espressif Arduino core for the ESP32 (я использовал 1.0.4) и назначаем необходимые клавиатурные сочетания номерам GPIO, к которым подключены физические кнопки. Компилируем и заливаем в микроконтроллер.

Использование

После загрузки прошивки в контроллер в эфире должно появиться BLE-клавиатура c именем "AccessPad BLE". Добавляем данное устройство в разделе Bluetooth ОС Android. В последующие включения "AccessPad BLE" будет присоединяться к автоматически.

Если вы планируете использовать функцию Access Switch, следует назначить кнопку/кнопки определенным действиям в соответствующем. разделе "Специальных возможностей". TalkBack сразу подчиняется тем "аккордам", которые заданы в скетче. С доступными для назначения "аккордами" можно ознакомится в разделе "Use TalkBack keyboard shortcuts" справки Android. 

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

Далее - нажимаете на физическую кнопку, получаете результат - управляете вашим цифровым устройством на базе Android.

Демонстрация работы

Видеодемонстрация (извините, youtube-аккаунта не имею, положил к себе на Яндекс-диск):
1) Switch Access - управление Android одной физической кнопкой: https://disk.yandex.ru/i/3fdQErfvR5eRiA
2) TalkBack - управление Android несколькими физическими кнопками без сложных аккордов : https://disk.yandex.ru/i/9Y6lEsrZRnFS5w

Надеюсь, что данная разработка поможет в новом "цифровом" мире тем, кому и так не просто. 

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

Отлично!!!

sadman41
Offline
Зарегистрирован: 19.10.2016

Малофункциональный прототип постепенно превратился в многофункциональный.

Желающих приглашаю потестировать: Accessibility Keypad BLE  / OTA Ready release

Сейчас на борту имеется: 

  • Звуковое сопровождение действий системы (загрузка, активация Web-конфигуратора, сброс настроек, сопряжение по Bluetooth);
  • Представление физических кнопок как клавиш HID-клавиатуры (с модификаторами);
  • Поддержка PS/2 клавиатуры и представление её клавиш как клавиш HID-клавиатуры (с модификаторами);
  • Ускоренная перепосылка кодов HID-клавиатуры при удержании физической кнопки или клавиши PS/2;
  • Переход в режим энергосбережения и пробуждение по нажатию управляющей кнопки;
  • Сопряжение Bluetooth по запросу (но это не точно);
  • Web-интерфейс для конфигурирования системы, созданный с учетом требований доступности (Web accessibility);
  • Парольная защита подключения в режиме точки доступа Wi-Fi (для конфигурирования);
  • Возможность подключения ко внешней точке доступа Wi-Fi (для конфигурирования);
  • OTA-обновление прошивки;
  • Импорт/экспорт конфигурации.

Фото девайса сделаю при нормальном свете, а пока несколько скриншотов интерфейса:

 

sadman41
Offline
Зарегистрирован: 19.10.2016

Улучшенный прототип AccessPad BLE. Как видите - никаких дорогущих комплектующих для девайса не требуется, если руки откуда надо растут - собирается на "раз-два".  

Раскладка для этого кейпада:

ESC- TalkBack start/stop
"F1" - Browser 
"F2" - Assistent 
"F3" - Notifications
"7"  - First item
"8" - Home screen
"9" - Read from top item
"<-" - Tab
"4" - Previous item
"5" - Click on focused
"6" - Next item
"F4" - Previous heading
"Enter" - Next heading
"1" - Back
"2" - Previous window
"9" - Read from next item
"0" - Stop TalkBack speech
"Dot" - TalkBack menu

В принципе, если привыкнуть, то 18 клавиш достаточно для стандартного потребления информации в Android.

 

sadman41
Offline
Зарегистрирован: 19.10.2016

Использование Accessibility Keypad с технологией SwitchAccess - подключена одна внешняя кнопка.

Как можно понять из скриншота, девайс научился слать коды multimeda-клавиш (а так же притворяться гарнитурой), что позволяет  физическими кнопками отвечать на входящие звонки, либо отклонять их и т.д.. Управление медиа-плеерами, само-собой тоже доступно. Так что на базе этой прошивки уже можно собрать какую-нить Bluetooth(LE) управлялку андроидом в автомобиль или для TV-Box. 

** Применение USB-разъёмов является чистой случайностью. В коробке с надписью "полезный хлам" была обнаружена хренотень, которая отсылала URL рекламируемой конторы в браузер. Подключалась она по USB, внутри имеет пару кнопок. Небольшая модификация, заключающаяся в открыживании VCC и заведении кнопок на D+ с последующим прокидыванием их на ESP32, позволила получить неплохо выглядящий однокнопочный контрол, заведенный на GPIO.