Эксперименты с Android. Приложение 5

В предыдущих статьях цикла было рассказано о том, как составлять Bluetooth-приложения для Android в среде AI2. Предполагалось наличие план­шета и компьютера, причем планшет всегда вы­ступал клиентом, а компьютер — сервером. Теперь предстоит научиться составлять серверные прило­жения для Android, чтобы осуществлять связь между двумя и более планшетами. Важность такого под­хода определяет то, что любое из устройств сети в дальнейшем можно заменить микроконтроллерным ВТ-модулем.

Беспроводное соединение по каналу Bluetooth организуется по принципу «клиент-сервер». Это означает, что на одной стороне системы находится устройство-сервер, которое регистрирует в общей базе данных некий сервис. То есть , сервер готов предоставлять информационную услугу. На проти­воположной стороне имеется устройство-клиент, которое определяет, с каким именно сервером ему желательно соединиться, чтобы получить нужную информацию или услугу.

В зоне охвата радиосвязи клиента может од­новременно находиться несколько разных ВТ-серверов. Получив их описания и профили, клиент выбирает, кому именно адресовать запрос на сое­динение. Логично предположить, что ВТ-клиент, ко­торый имеет профиль передачи SPP, разрешающий ему обмен данными по виртуальному COM-порту, не будет обращаться к BT-серверу, организующему раздачу музыки, и наоборот.

На бытовом уровне можно представить ситуа­цию, когда покупатель (клиент) идет на рынок (в сеть). На рынке он просматривает товар у несколь­ких продавцов (серверов) и, оценив ситуацию (изу­чив профили), начинает разговаривать (устанавли­вает связь) с одним из них.

В электронной системе клиент всегда является инициатором операций, и он первым задает вопро­сы серверу. В реальной жизни бывает и наоборот, особенно в жарких странах Северной Африки, когда продавец буквально затаскивает покупателя в свою лавку и расхваливает товар, ни на минуту не умол­кая…

Сценарий соединения

Программное управление каналом Bluetooth осу­ществляется с помощью стека протоколов — SDP, RFCOMM, L2CAP, ОВЕХ и др. Это позволяет созда­вать сервисы с разными профилями, например, по передаче команд, файлов, музыки, факсимильных сообщений. К счастью, детально изучать стеки не надо, поскольку при программировании в среде AI2 эта сложная «кухня» скрыта от пользователей.

В AI2 существуют две отдельные службы: ВТ-клиент и ВТ-сервер. Во всех ранее созданных приложениях (Приложение 1, 2, 3, 4) применялась служба ВТ- клиент.

Клиентский модуль осуществляет:

  • поиск доступных в данное время серверов;
  • поиск нужного сервера по его профилю;
  • запрос на соединение;
  • обмен информацией с сервером.

В рамках предварительных операций клиент от­правляет на сервер короткие сообщения. Перечень допустимых сообщений ограничен. Заголовок со­общения содержит поля, которые характеризуют передаваемую информацию, в частности, поле со значением объема в байтах, чтобы принимающая сторона могла зарезервировать место в памяти или сообщить о ее нехватке.

Серверному модулю необходимо:

  • зарегистрировать сервис в базе данных;
  • перейти к ожиданию запроса от клиента;
  • осуществить обмен данными с клиентом.

Обычно программа для Android поддерживает унитарное направление — или клиент, или сервер. Но в одном приложении могут мирно уживаться как клиентская, так и серверная части. Распределение ролей между ними происходит в момент установ­ления нового контакта. Например, в приложении Bluetooth-чата «btchat.apk» (автор «Рига Vida Apps»} <http://puravidaapps.com/btchat.php> сервером автоматически становится тот планшет, к которо­му шлют запрос. Как говорится, «кто первым встал, того и тапки» (рис.34).

Рис. 34

Рис. 34

Связь по Bluetooth является двухсторонней. То есть, и сервер, и клиент, как принимают, так и пере­дают данные. К примеру, клиент собирает информа­цию с датчиков. После их опроса, он сам связыва­ется с сервером и передает ему сведения. Другая ситуация — сервер собирает информацию с датчи­ков. По запросу от клиента он отдает ему все нако­пленные данные.

Практическая часть

В эксперименте участвуют два планшета. На одном из них запускается новое серверное прило­жение «ServerBT» (рис.35, рис.36, табл.5), на дру­гом — ранее разработанное клиентское приложение «ReceiveBT» (Приложение 3). Клиент первым устанавли­вает связь с сервером, а затем переходит в режим ожидания. Как только от сервера поступают дан­ные, клиент выводит их на свой экран. «Фишкой» проекта является голосовой ввод текста в планшет на стороне сервера, что легко организуется встро­енными средствами AI2.

Рис. 35

Рис. 35

Рис. 36

Рис. 36

Пояснения к мозаикам

Строки 2, 4, 5, 15, 18. Обращение к функ­циям ВТ-сервера производится аналогично функциям ВТ-клиента (Приложения 1, 2, 3, 4), но толь­ко слово «BluetoothClienfl» замещается словом «BiuetoothServerl».

Строки 1-3. Этот блок выполняется сразу по­сле запуска приложения, на что указывает текст «Initialize». Изначально планшет не знает, от кого он получит запрос, поэтому приложение ловит «маяки» от любых клиентов. Следовательно, поле «serviceName» оставляется пустым.

Строки 4-9. После того, как соединение с кли­ентом установлено, ему посылается англоязыч­ный «Привет всему миру!», затем кнопки Buttont и Button2 становятся видимыми на экране, а в цен­тральной полосе появляется визитка подтвержде­ния связи.

Строки 10, 11. Стандартный вызов службы Speech Recognizer. После этого начинает работать интернет-сервис Google по распознаванию речи длительностью до 3 с. Пара строчек в программе, а какой колоссальный интеллект задействуется!

Строки 12-16. После распознавания речи про­исходит трансляция текста и распечатка в цен­тральном поле экрана. Кроме того, этот же текст передается по ВТ-каналу в сторону клиента.

Строки 17-19. Нажатие на кнопку «Разъедине­ние ВТ» приводит к обрыву связи и к закрашиванию прямоугольника кнопки фиолетовым цветом.

Протокол общения

Сеанс связи начинается с нажатия на кнопку «Соединение ВТ» в приложении «ReceiveBT». По­сле этого на уровне ОС Android производится по­иск близлежащих ВТ-объектов, синхронизация паролей (если это первая связь) и установление контакта. Данная процедура выполняется точно так же, как и в предыдущих статьях цикла.

В случае успеха — кнопка соединений в при­ложении «ReceiveBT» окрашивается зеленым цве­том, а на экране клиента появляется приветствие «Hello, World!». На другом конце связи в приложе­нии «ServerBT» становятся видимыми две скрытые кнопки (разъединение и передача), а в централь ном поле появляется фраза: «Соединение установ­лено!».

Теперь можно передавать от сервера к клиенту любые короткие голосовые команды (фразы). Для этого в приложении «ServerBT» надо нажать кнопку «Передать голосовое сообщение», после чего дол­жен появиться характерный значок микрофона.

Далее в работу вступает сервис распознавания речи Google, который будет внимательно прослу­шивать микрофон планшета и по окончании тайм­аута отобразит все сказанное в текстовом виде.

Таблица 5

Компонент Функция

Изменяемые свойства (остальное по умолчанию)

Screen1 Активность AppName «ServerdBT», Title «ServerdBT», Icon «ввести иконку RA5.png или любую другую»
HorizontalArrangement1 Контейнер Align Horizontal “Center”, Width “Fill parent»
Button1 Кнопка Text “Разьединение ВТ”, Visible “удалить галочку”
TextBox1 Строка Width “Fill parent”, Hint “ ”, Text “Сервер ждёт клиента…»
Button2 Кнопка Width “Fill parent”, Shape «rounded», Text «Передать голосовое сообщение», Visible “удалить галочку»
Label1 Текст Width “Fill parent», Text “(с) Радиоаматор, №7/8-2015”, TextAlignment «center»

Степень распознавания речи довольно высокая, правда, при этом планшет должен быть подключен к Интернету. Владельцы планшетов с Android-4.1 и выше могут установить русский голосовой офлайн- пакет по методике <http://blinddroid.ru/blog/android-and-samsung/zagruzka-komponenta-dlya-raspoznavaniya-rechi-oflain> и работать без Всемир­ной паутины.

Если кириллица не распознается, то в меню на­строек Android в пункте голосового ввода надо про­верить, был ли активирован русский словарь (ан­глийский установлен по умолчанию).

Завершение сеанса связи производится кноп­кой «Разъединение ВТ» на серверной или клиент­ской стороне. Теперь можно вволю потренировать свои голосовые связки, зная, что слова передавать­ся на противоположную сторону не будут, о чём сви­детельствует надпись: «Error 515: Not connected to a Bluetooth device».

Распознавание речи

В приложении «ServerBT» используется голосо­вой ввод речи. На физическом уровне осуществля­ется преобразование речевого сигнала в цифровую информацию.

Первый образец прибора для распознавания речи (точнее, цифр) появился в 1952 году на фир­ме «Bell Laboratories». В 1962 году во время Все­мирной выставки в Сиэтле фирма IBM представила более совершенное устройство «Shoebox», которое успешно справлялось и с цифрами, и с буквами.

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

Серьезный скачок в развитии произошел в наши годы, и связан он, в первую очередь, с широким внедрением Интернета. Так в 2009 году появилось первое приложение «Voice Search» от Google для iPhone, которое позволяло вести голосовой поиск. В 2011 году в «iPhone 4S» было установлено при­ложение «Siri». Эта программа уже не просто рас­познавала речь, но и могла вести живое общение с пользователем на его родном языке, отвечая шут­ками на курьезные вопросы.

Основные сферы применения технологии рас­познавания речи:

  • голосовое управление;
  • голосовые команды;
  • голосовой ввод текста;
  • голосовой поиск.

В приложениях, созданных в AI2, используется скрипт голосового ввода, базирующийся на движке «Google Voice Search». Специалисты считают этот движок весьма высококачественным, да и к тому же он бесплатный. Альтернативой могут служить ана­логичные сервисы «Яндекс.Навигатор» и «Google Now».

Общие рекомендации по вводу речи

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

Сервис Google не очень хорошо распознает не­которые окончания слов, например, при спряжении глаголов. Но он чудесно разбирается с неологизма­ми, например, с компьютерными терминами: капча, Интернет, сеть, вэбмани.

Сетевое соединение

Устройства Bluetooth могут объединяться в пико­сети (piconet), включающие до 8 устройств. Каждое устройство может принадлежать нескольким сетям (scatternet), и так до 72 устройств в сети. Это, конеч­но, теория, а на практике количество одновременно обслуживаемых устройств меньше.

Как соединить между собой два устройства в системе «сервер-клиент», было показано в при­ложении «ServerBT». Если требуется большее чис­ло участников, то можно пойти по пути, который предложил Дмитрий Осипов [7]. Он средствами AI2 организовал сеть, состоящую из одного клиента (мобильный телефон, планшет) и трёх серверов на платах Arduino с ВТ-модулями (рис.37).

Рис. 37

Рис. 37

Включение и отключение светодиодов на платах Arduino происходит одновременно и практически без задержек во времени по голосовым командам от телефона. Проект имеет открытые исходные коды, доступные для самостоятельного изучения. Един­ственное, что объем приложения очень большой — в блок-схеме файла «BluetoothMulti3Connect.aia» <https://yadi.sk/d/laEOoVHHehKPa> содержится 48 мозаик с общим числом элементов около 1000 (!).

Литература

  1. Осипов, Д. Bluetooth multi Connect. Управле­ние тремя Bluetooth-устройствами единовременно! Arduino Арр Inventor / <https://www.youtube.com/watch?v=uLYIvBPwdT4>.

Автор: Сергей Рюмик, г. Чернигов

Источник: Радиоаматор №9, 2015

Возможно, вам это будет интересно:

Постоянная ссылка на это сообщение: http://meandr.org/archives/28486

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