Очень хороший инструмент для ленивых создателей приложений под Android от MIT — App Inventor. Расширение для Serial OTG (замена «штатного» Serial)
Очень интересная тема — использование смартфона для IoT. Подключение внешних устройств к смартфону: ранее посмотрели технологию BLE. Здесь посмотрим как можно подключить внешние устройства (например, на Arduino) к телефону кабелем…
В AppInventor есть «штатный» объект для «организации последовательного канала связи с внешними устройствами» — Serial:
Однако, на практике, оказалось, что далеко не все внешние USB устройства определяются и работают с этим элементом. В частности, столкнулся, что USB-UART устройства на CH340 «тут — не работают»!
Выходом для самодельщиков является альтернативная библиотека — расширение Serial OTG. Здесь соберу основные моменты в работе с SerialOTG расширением в App Inventor. Основная информация по расширению — здесь.
В App Inventor вместо встроенного объекта Serial для работы с используем специальное расширение Serial OTG. Первым делом надо его скачать и установить.
Сначала — жмем Import extension (выделено слева), и устанавливаем скачанный ранее по ссылке файл. В списке появляется расширение SerialOTG. Вытаскиваем его в Дизайнере на экран.
Пример будет простым: надо установить связь (ну и разорвать ее чтоб можно было), принимать поступающие по USB-UART текстовые данные и отображать их в Списке.
Первым делом надо инициализировать последовательный порт. Это удобно делать «автоматом» при открытии программы. Добавляем необходимые действия в событие инициализации экрана:
Здесь устанавливается только скорость обмена (9600). Можно произвести полную настройку последовательного порта. Либо оставить те значения настройки, что были прописаны в свойствах объекта SerialOTG
Это — в «Дизайнере» 🙂
Теперь рисуем две кнопки: одну для установления соединения, вторую для разрыва:
Отработка кнопки «Установить соединение» (левая).
Использована функция Открыть. На практике первое нажатие кнопки приводит к открытию на телефоне окна с запросом на разрешение использования Serial OTG. Нужно разрешить 🙂 — после этого для установления соединения надо повторно нажать на кнопку «Установить соединение». Вот после этого фон надписи с кнопками станет зеленым (связь будет установлена). Наличие связи проверяется свойством «IsOpen».
Отработка кнопки «Разорвать соединение»
Теперь рассмотрим — каким образом у меня получилось читать данные с последовательного порта. На мой взгляд, должно быть событие типа «Когда в буфере есть символ…» Но я такого не нашел. Поэтому использовал событие от срабатывания таймера, в котором читал буфер ввода.
Таймер настроен на период в 1 секунду. Работу с часами мы рассмотрели ранее. Предполагается что данные поступают пакетами не слишком часто и за секунду они не успеют «улететь».
В обработке приема данных, собственно, важна лишь верхняя строка «RadLn». Предполагается, что поступают символьные данные и строка заканчивается CR+LN. Принятый текст сохраняется в переменной, потом проверяется — «А есть ли в переменной что-то?» И если есть, то отсекаются последние два символа (предполагаем, что это не нужные нам CR LN). Затем готовая строка помещается в Список (как с ним работать рассмотрено здесь). И производится позиционирование Списка на экране на последней строке.
Не рассмотрена задачка записи данных в порт. Пока такой практической задачи не встретилось 🙂 Ну, думаю, больших затруднений тут не должно быть («выкинуть всегда легче, чем поймать»).