В первой статье цикла была приведена методика «быстрого старта» в создании собственных андроидных приложений. Для примера использовалась среда визуального программирования Applnventor-2 (AI2). Тем, кто преодолел начальные трудности и обошел все подводные камни, удалось увидеть на экране планшета первое тестовое приложение. Но, чтобы разобраться в деталях и тонкостях, нужно умерить пыл и заменить тактику «семимильных шагов» тактикой «мелких перебежек» с постепенным приближением к цели.
Проводя эксперименты с Android, не надо забывать о главной задаче — научиться создавать приложения, которые осуществляли бы двухстороннюю связь с удаленным микроконтроллерным устройством, будь то AVR, PIC, STM32Discovery или Arduino.
Удаленная связь ассоциируется в первую очередь с беспроводными интерфейсами Bluetooth (ВТ) и Wi-Fi. Первый из них проще в применении, да и финансово менее обременительный. С другой стороны не все планшеты поддерживают «синий зуб», хотя в большинстве случаев допускают подключение простого адаптера ВТ и программную активацию виртуального СОМ-порта [2].
О том, как соединить МК, ВТ и Android подробно рассказывалось в [1] (РА11-12/2014). Единственная проблема заключалась в применении «чужого» программного обеспечения, которое нельзя приспособить под свои нужды.
К счастью, в среде AI2 имеется поддержка ВТ, что позволяет как «из кубиков» строить авторские приложения. При этом знание языка Java не требуется, а для понимания физики работы нужны лишь минимальные теоретические основы.
Краткие сведения об интерфейсе ВТ
Для работы устройств ВТ выделяется диапазон частот 2400…2483 МГц. Вся полоса разбивается на 79 канальных интервала. Передатчик и приемник синхронно «перепрыгивают» с одной канальной частоты на другую по псевдослучайному закону 1600 раз в секунду.
Дальность связи зависит от мощности передатчика и чувствительности приемника. В случае планшета с ВТ класса 2 (до 2,5 мВт) устойчивое соединение наблюдается в пределах 10-20 м внутри помещения или через кирпичную/бетонную стену.
Каждое ВТ-устройство поддерживает один или несколько наборов профилей: для воспроизведения музыки, организации персональной микросети, передачи текста, цифровых данных. Важно, чтобы оба устройства ВТ поддерживали профиль SPP (Serial Port Profile). Тогда цифровые данные от МК смогут передаваться через стандартный интерфейс UART, а на планшете их будет принимать виртуальный COM-порт. Радиотракт в данном случае служит проволочной линией с сигналами TxD, RxD.
Соединение по ВТ осуществляется, как правило, в режиме «точка-точка», при этом для безопасности можно вводить пароль (PIN-код, ключ, шифр), чтобы создать так называемую «пару». Одно из устройств будет ведущим, другое ведомым. Соответственно, на одной стороне организуется «сервер», к которому обращается «клиент».
Конструктивно различают: чипы ВТ, модули ВТ, адаптеры ВТ, шилды ВТ. Для подключения к МК подойдут адаптеры и шилды. Планшет с Android лучше выбирать такой, чтобы сразу содержал встроенный модуль ВТ. Допускается экспериментировать и с мобильными телефонами.
Третейский судья
Предположим, что программа под Android уже создана, однако, прежде чем опробовать ее действие на удаленном МК, не мешало бы провести оперативное тестирование работы с помощью компьютера или ноутбука. Имеется в виду использовать канал ВТ и два виртуальных COM-порта для связи между планшетом и компьютером. Последний будет играть роль «третейского судьи», чтобы подтвердить исправность оборудования.
Для настольного компьютера нужно приобрести недорогой китайский BT-адаптер, вставляемый в разъем USB (рис.11). Иначе его называют «донгл» или «свисток». При первом включении операционная система опознает новое устройство и установит стандартные драйвера Microsoft. Но, рано радоваться, виртуальных COM-портов видно не будет.
Чтобы активизировать дополнительные профили, требуется установить «родные» драйвера от разработчика продукта. Хорошо, если они находятся на прилагаемом к «свистку» компакт-диске, а если нет?
Помощь, как это часто бывает, приходит из Интернета. Но для начала надо самостоятельно выяснить идентификационные номера VID и PID адаптера, для чего в диспетчере устройств открыть его свойства: «Радиомодули Bluetooth- Generic Bluetooth Radio-Сведения» (рис. 12).
Далее, с выясненными VID, PID зайти на сайт <http://notebookclub.org/forum/thread-730.html> и определить фирму-изготовитель чипа BT. Для справки, чипы выпускают фирмы: Atheros, Broadcom, Intel, Motorola, Ralink, Realtek, Toshiba, Widcomm. К большинству из них подходят пакеты драйверов от Broadcom, Atheros, Intel, предлагаемые на сайте для скачивания. Например, адаптер с VID=0A12, PID=0001 относится к продукции Toshiba, но успешно инсталлируется драйверами от Atheros программой «Bluetooth Suite» («Bluetooth_Atheros_XP_ July_2014.exe», 165 Мбайт).
После установки драйверов и перезагрузки компьютера, в трее должен появиться значок ВТ, а в диспетчере устройств — изменения согласно рис. 13. Кроме того, добавятся профили: передачи файлов, DHCP, аудио, ВТ-клавиатуры, ВТ-мыши, факса и даже дистанционного фотоаппарата.
Назначение виртуальных COM-портов можно посмотреть в схеме настроек «Bluetooth Suite» (рис.14), из чего следует, что головным портом для связи с планшетом будет СОМ7. Интересный нюанс — «родной» драйвер от Toshiba добавляет в систему не 3, а целых 9 виртуальных COM-портов, что не принципиально.
Окно дизайна AI2 (Designer)
В первом приложении все действия по синтезу программы «мяукающего кота» слепо копировались по подсказкам из сайта помощи AI2. Это было целесообразно для быстрого освоения методики программирования и гарантированного получения результата.
Во втором приложении спешить уже некуда, можно рассмотреть детали и углубиться в теорию пользовательского интерфейса Android. В качестве примера будет создано приложение «TestBT», которое просканирует окружающее пространство, составит список близлежащих ВТ-устройств, соединится с одним из них, передаст текст «Hello, World!», а затем разъединит связь.
На рис.15 показан внешний вид окна дизайна приложения «TestBT», где стрелками обозначены новые понятия: «активность», «контейнер», «служба».
Общее поле, на котором размещаются кнопки, списки, текст, картинки, относится к «Activity». Поскольку перевод этого термина на русский язык еще не устоялся, то некоторые авторы называют его «активность», «активити», а некоторые — «деятельность». Слово «активность» легче запоминается на ассоциативном уровне, поэтому будет употребляться в дальнейшем.
В любом приложении должна содержаться, как минимум, одна активность Screenl. Запускается она первой и считается главной. Из нее запускаются другие активности, к примеру, служебные. Мнемонически можно представить себе активности, как отдельные странички сайта в браузере.
Важным элементом интерфейса являются «контейнеры» (англ. Layout), иногда именуемые «макетами» или «панелями». Они расставляются в разных местах экрана активности, отделяя одну зону пользовательского интерфейса от другой. Внутри контейнеров обычно размещаются кнопки, списки, изображения.
Контейнеров может быть много, а может и ни одного, как, например, в первом тестовом приложении. Польза от контейнеров ощущается в тех случаях, когда кнопки надо размещать не одна под одной, а в горизонтальной строке или в виде «квадратно-гнездовой» клавиатуры.
Служба (англ. Service) в Android не имеет визуального интерфейса, поэтому в AI2 размещается внизу, за полем активности. Служба выполняется в фоновом режиме и будет действовать до тех пор, пока не завершит свою работу. Приложения могут подключаться к службам, запускать их, производить остановку.
В табл.1 перечислены свойства (Properties) тех компонентов приложения «TestBT», которые отличаются от установленных по умолчанию. Это поможет воссоздать проект самостоятельно.
Подробное описание функций разных компонентов приведено на русскоязычном сайте <http://android-lamer.ru/> и в книге [3], при этом информация, относящаяся к AI, будет актуальна и для AI2.
Табл.1
Компонент | Функция | Изменяемые свойства (остальное по умолчанию) |
Screen1 | Активность | Icon «<ввести имя файла иконки с расширением *.png>». Title «TestBT» |
HorizontalArrangement1 | Контейнер | AlignHorizontal «Center», Wight «Fill parent» |
ListPicker1 | Список | Text «Соединение BT» |
Button1 | Кнопка | Text «Разъединение BT» |
Label1 | Надпись | Text «(с) Радиоаматор, №2-2015», TextAlignment «Center», Width «Fill parent» |
Редактор блоков AI2 (Blocks Editor)
На рис. 16 показан внешний вид редактора блоков AI2, где в графическом виде разрисована логика работы приложения «TestBT».
Каркас любой программы AI2 состоит из одной или нескольких мозаик, каждая из которых содержит разноцветные блоки. Соединяются блоки
между собой системой впадин и выступов. Где размещать мозаики на экране и в какой очередности — решает программист. Более того, правой кнопкой мыши можно всегда перегруппировать и пересортировать мозаики в удобном для обозрения виде.
В отличие от Си-образных языков программирования, в приложениях для Android нет унифицированной точки входа при запуске, наподобие функции «main». В этом смысле все мозаики являются равноправными. Единственное, что при желании можно сформировать мозаику начальной инициализации (аналог функции «setup» eArduino), выбрав блоки с ключевым словом «Initialize».
Управление действиями удобно рассматривать через призму системы прерываний. Векторами прерываний можно считать события, указанные в верхнем блоке мозаики, в частности, нажатие кнопки, активация списка, срабатывание таймера, прием данных и т.д. То есть ОС Android постоянно находится в режиме ожидания. Как только наступает одно из перечисленных событий, будут выполняться действия, указанные в конкретной мозаике в порядке «слева-направо, сверху-вниз».
Строки на рис. 16 для удобства пронумерованы цифрами. Разумеется, в реальном проекте такая нумерация отсутствует. Она нужна лишь для ссылок по тексту статьи.
Логика работы приложения «TestBT»
Программа состоит из трех мозаик: (1-2), (3-8), (9-11). Все надписи в блоках выполнены на английском языке. Переводить их нужно дословно, считая весь текст, разбитым на длинные предложения с запятыми и точками в конце каждой строки. Что не ясно — домысливается, а потом проверяется экспериментально.
Строка 1. Событие происходит тогда, когда список ListPickerl активируется, т.е. нажата сенсорная полоска «Соединение ВТ».
Строка 2. Действие — открыть экран служебной активности и показать в списке ListPickerl перечень сетевых адресов и имен (AddressesAndNames) от близлежащих ВТ-устройств. Иными словами, система обращается к службе BluetoothClientl, которая прослушивает радиодиапазон, находит BT- модули и выводит их перечень на вспомогательный экран.
Возврат из служебной активности к основному приложению возможен двумя путями:
- нажатием на системную кнопку «Возврат» (полукруг с обратной стрелкой в Android), при этом произойдет переход к предыдущему экрану без каких-либо действий;
- нажатием в списке ListPicker1 на строку с названием обнаруженного ВТ-устройства (компьютера), при этом произойдет переход к началу мозаики-2.
Строка 3. Событие происходит тогда, когда выбрана строка в списке ListPicker1 на служебном экране черного цвета.
Строки 4-8. Действие — попытаться подключиться к ВТ-устройству с адресом, ранее выбранным в списке ListPicker1 из мозаики-1. Если подключение удачное, то сменить цвет полоски «Соединение BT» с белого на зеленый, а также передать удаленному устройству текст «Hello, World!».
В компьютере надо включить ВТ-адаптер, запустить любую терминальную программу, выбрать COM-порт (в данном случае СОМ7) и наблюдать появление текста «Hello, World!» от планшета. Интересная деталь — скорость виртуального СОМ-порта задавать не надо. Она игнорируется, поскольку соединение идет «поверх» эмуляции на максимально доступной для ВТ-2.0 скорости примерно 230 кбод.
Если соединение не удалось, то служба BluetoothClientl дает запрос на создание пары с удаленным устройством и попросит ввести пароль на планшете (рис. 17).
Цифры пароля могут быть любыми, но такими же, как и в компьютере. После создания пары, в диспетчере программы «Bluetooth Suite» должны появиться стрелки соединения, как на левой пиктограмме рис. 18. В дальнейшем пароль вводить, как правило, не требуется.
Строка 9. Событие происходит тогда, когда нажата кнопка «Разъединение BT». В этой строке для примера показан информационный комментарий, который добавляет сам программист правой кнопкой мыши «Add Comment» при выделении любого объекта схемы. Комментарии на работу приложения никак не влияют.
Строки 10-11. Действие — разорвать связь по BT и установить цвет фона надписи «Соединение BT» белым вместо зеленого. При этом в «Bluetooth Suite» стрелки соединения через пару секунд должны превратиться в «галочку», как на правой пиктограмме рис. 18.
Выход из приложения «TestBT» можно производить стандартными средствами Android, но внизу слева предусмотрена специальная иконка с тремя горизонтальными полосами, облегчающая задачу. Этот «копирайт» имеется во всех приложениях, созданных с помощью AI2, т.е. по его наличию можно судить о применяемой среде программирования.
Литература
- Самбук-Нагорный Р. Использование eAndroid адаптера USB2COM на базе СР2102 / <http://komposter.com.ua/content/ispolzovanie-v-android-adaptera-usb2com-na-baze-cp2102-2014-11 -03>.
- Колисниченко Д. Н. Android для пользователя. Полезные программы и советы / Денис Колисниченко. — БХВ-Петербург, 2013.
Автор: Сергей Рюмик, г. Чернигов
Источник: Радиоаматор №2, 2015