MIT App Inventor. Serial OTG

Очень хороший инструмент для ленивых создателей приложений под 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). Затем готовая строка помещается в Список (как с ним работать рассмотрено здесь). И производится позиционирование Списка на экране на последней строке.


Не рассмотрена задачка записи данных в порт. Пока такой практической задачи не встретилось 🙂  Ну, думаю, больших затруднений тут не должно быть («выкинуть всегда легче, чем поймать»).

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

Ваш e-mail не будет опубликован.

Нажимая кнопку "Отправить" Вы даёте свое согласие на обработку введенной персональной информации в соответствии с Федеральным Законом №152-ФЗ от 27.07.2006 "О персональных данных".