В предыдущих статьях цикла было рассказано о том, как составлять 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).
Связь по Bluetooth является двухсторонней. То есть, и сервер, и клиент, как принимают, так и передают данные. К примеру, клиент собирает информацию с датчиков. После их опроса, он сам связывается с сервером и передает ему сведения. Другая ситуация — сервер собирает информацию с датчиков. По запросу от клиента он отдает ему все накопленные данные.
Практическая часть
В эксперименте участвуют два планшета. На одном из них запускается новое серверное приложение «ServerBT» (рис.35, рис.36, табл.5), на другом — ранее разработанное клиентское приложение «ReceiveBT» (Приложение 3). Клиент первым устанавливает связь с сервером, а затем переходит в режим ожидания. Как только от сервера поступают данные, клиент выводит их на свой экран. «Фишкой» проекта является голосовой ввод текста в планшет на стороне сервера, что легко организуется встроенными средствами AI2.
Пояснения к мозаикам
Строки 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).
Включение и отключение светодиодов на платах Arduino происходит одновременно и практически без задержек во времени по голосовым командам от телефона. Проект имеет открытые исходные коды, доступные для самостоятельного изучения. Единственное, что объем приложения очень большой — в блок-схеме файла «BluetoothMulti3Connect.aia» <https://yadi.sk/d/laEOoVHHehKPa> содержится 48 мозаик с общим числом элементов около 1000 (!).
Литература
- Осипов, Д. Bluetooth multi Connect. Управление тремя Bluetooth-устройствами единовременно! Arduino Арр Inventor / <https://www.youtube.com/watch?v=uLYIvBPwdT4>.
Автор: Сергей Рюмик, г. Чернигов
Источник: Радиоаматор №9, 2015