USB OTG serial port: программы и утилиты |
Добавил(а) microsin | |||||||||||||
Уже давно известно (начиная с Android 3.1+ и его Android USB Host API), что через порт USB OTG операционная система Android умеет работать как хост USB с мышами и клавиатурами. Также можно управлять и самодельными устройствами USB HID [2, 3]. Но как обстоят дела с обменом данными с классом USB CDC (виртуальный COM-порт), или USB serial-интерфейс (RS-232 TTL)? Возможность работать с последовательным портом очень удобна для подключения множества устройств на микроконтроллерах, например тех же плат Arduino, или какого-нибудь заводского оборудования. Оказывается, все также очень даже неплохо. Эта статья посвящена краткому обзору готового софта и библиотек, которые позволяют работать с последовательными портами в операционной системе Android. [Первое подключение устройства USB CDC к Android] Для подключения к порту USB Android какого-нибудь устройства USB Вам понадобится специальный кабель USB OTG. Его можно недорого купить в магазине или на рынке, или изготовить самому [4]. Если у Вас уже установлены какие-нибудь программы, поддерживающие последовательное соединение через USB (например, какие-нибудь программы, рассмотренные во врезках ниже), то при первом подключении устройства к порту USB OTG операционная система Android выдаст приглашение запустить для работы с устройством какую-нибудь из установленных программ, см. скриншот ниже. Если Вы сделаете на этом экране свой выбор, то сразу запустится выбранная программа, и ей будет предоставлено разрешение работать с подключенным устройством USB. Если Вы ничего не выберете (просто нажмете на кнопку "Назад"), то разрешение на доступ к устройству будет запрошено позже, когда в программе Вы попытаетесь подключиться к устройству USB CDC: Если на этом экране выбрать "Да", то программа сможет работать с Вашим устройством USB CDC. Если еще при этом установить галочку "Использовать по умолчанию для этого USB-устройства", то при каждом подключении устройства USB CDC к порту USB OTG будет автоматически запускаться эта программа, и ей будут сразу автоматически дано разрешение на доступ к устройству. [Терминальные клиенты, поддерживающие USB OTG serial] Готовые программные клиенты под Android, которые позволяют организовать текстовую консоль для приема/передачи текстовой информации через виртуальный COM-порт USB, избавляют Вас от необходимости писать управляющее программное обеспечение, когда Вы хотите через Android управлять какой-нибудь электронной аппаратурой. Ниже представлен краткий обзор нескольких таких утилит. Это утилита для проверки, совместим ли Ваш мобильный телефон, или смартфон, или планшет с устройством UART/RS-232. Рута не требует, бесплатная, но на этом достоинства программы заканчиваются. У меня она не заработала, не нашла подключенное через порт USB OTG устройство на чипе FT232R (при попытке открыть соединение через меню Open программа выдавала сообщение "Not found USB UART device!"). Причина в том, что пока чипы FTDI этой программой не поддерживаются. Весьма годная программа. Можно подключать устройства USB CDC на чипах Silicon Laboratories CP210X, FTDI FT232 (ARDUINO) и Prolific PL2303 (это популярные микросхемы моста USB-CDC/ACM - TTL UART). Так же можно использовать беспроводную систему Zigbee Chip TI CC2531 (USB-Enabled SOC Solution for 2.4-GHz IEEE 802.15.4).
Поддерживаются все смартфоны, на которых есть порт USB с поддержкой режима хоста (OTG) - Samsung galaxy2 / galaxy 3 / galaxy note / galaxy note2 / Vega racer R3 и т. п. Требуемая версия Android: 3.1 (API Level 12). [Быстрый старт] 1. Подключите кабелем OTG устройство к смартфону. [Создание кнопок управления] 5. Кликните на кнопку с зеленым плюсиком, введите имя для кнопки и содержимое данных для отправки. Если кликнуть на эту кнопку, то программа отправит данные в устройство. Принятые от устройства данные будут отображены в текстовом окне консоли. Формат данных для кнопок управления. Можно вводить двоичные данные, как это показано ниже - в шестнадцатеричном (hex), двоичном (binary) или десятичном (decimal) виде: - Decimal: @ + 3 цифры (0..255), например CR: @013 Escape-символы @, #, & можно вводить, если их указать дважды, тогда будут переданы соответственно @, #, &. Между передаваемыми данными можно вводить задержку. Задержка указывается в миллисекундах, пример: up< % sleep:1000 %>down< % sleep:2000 %>left< % sleep:3000 %>right Здесь закодирована следующая последовательность действий: 1. Отправка "up". Простая программа последовательного терминала (с открытым исходным кодом, см. https://github.com/devmel/), предназначенная для управления устройством на микроконтроллерах (http://devmel.com/). Очень полезна как инструмент отладки в приложениях с обменом данными. Заявлена совместимость: 1. С Bluetooth (модули HC-05, HC-06, любой Bluetooth-Serial адаптер). 2. С адаптерами USB OTG и микросхемами моста USB-TTL UART: Silicon Laboratories CP210X 3. С шиной LinkBus (Ethernet to UART device, подробнее см. http://www.devmel.com/linkbus). Для адаптеров USB-TTL UART поддерживаются настройки: Baud Rate: 1200 .. 250000 В приложении нет никакой рекламы. Несмотря на то, что в описании к программе для поддержки режима хоста USB требуются права root, программа все равно нормально работает с USB-TTL UART (например, с платами Arduino) и не на рутованном устройстве Android. Выбор порта подключения и настройка параметров:
Запрос на подтверждение пользователем разрешения для подключения к устройству USB CDC (USB-TTL UART платы Arduino): Общий вид на главное окно программы в отключенном и подключенном состоянии соединения с устройством USB CDC:
Программа для последовательного терминала на смартфонах. Можно использовать устройства USB на чипах Silicon Laboratories CP210X, FTDI FT232 и Prolific PL2303 (CDC/ACM UART для моста USB). Также можно использовать Zigbee Chip TI CC2531 (USB-Enabled SOC Solution для 2.4-GHz IEEE 802.15.4 и приложений ZigBee). Предоставляет стандартный набор базового функционала, который предоставляют аналогичные программы на платформе PC. Поддерживаются все смартфоны, на которых есть порт USB с поддержкой режима хоста (OTG) - Samsung galaxy2 / galaxy 3 / galaxy note / galaxy note2 / Vega racer R3 и т. п. Требуемая версия Android: 3.1 (API Level 12) или более свежая. [Быстрый старт] 1. Подключите кабелем OTG устройство к смартфону.
Можно настраивать параметры последовательного соединения - Baud rate, Data bits, Parity, Stop bits, также поддерживаются опции режима управления потоком данных (Handshaking Mode setting). Доступно ведение лога для принимаемых данных, для файла лога нужно указать путь наподобие "[External Storage Root] / USBTerminal / YYMMDD_hhmmss.log". [Описание кнопок и функций главного окна] - ASCII: выводить принимаемые данные как строку ascii. Передаваемые данные по умолчанию передаются как строки символов. Но можно вводить данные и в других форматах: - Decimal: @ + 3 цифры (0..255), например CR: @013 Escape-символы @, #, & можно вводить, если их указать дважды, тогда будут переданы соответственно @, #, &. - Кнопка передачи (в виде правой стрелки): запускает передачу данных в устройство USB. [Пункты меню] - Settings: откроется окно настроек параметров соединения (Serial Communication Settings). Очень простая программа консоли соединения с устройством USB-Serial (CDC-ACM). Автором тестировалась а платами Arduino UNO, MEGA, а также с NXP LPC1769. При обнаружении совместимого устройства USB программа запросит разрешение на доступ: Когда соединяетесь с устройством CDC-ACM, выберите в меню пункт Open Device.
[Возможности программы] - Поддержка протокола CDC-ACM (Arduino, встраиваемые платформы, PSoC и т. п. С помощью этой программы Вы можете, к примеру, обмениваться данными между Android и платой Arduino UNO. И если на Вашем электронном устройстве стоит адаптер FTDI USB-Serial (FT232RL), то любой микроконтроллер можно соединить с устройством на Android. [FAQ] Q: Почему мой телефон/планшет (Android 3.1 или более новая версия) не совместим с программой? Q: Но мой телефон/планшет поддерживает флешки USB, USB мышь и USB клавиатуру. Q: Можно ли получить двоичный или исходный код программы? Основная программа: https://github.com/ksksue/Android-USB-Serial-Monitor-Lite.Библиотека (драйвер): https://github.com/ksksue/FTDriver. Q: Какой может быть самый большой выходной ток для устройства USB? Утилита UsbTerminal это программа эмулятора терминала (иногда она называется "monitor"). С её помощью можно использовать телефоны или планшеты с портом USB обмениваться данными с внешними устройствами. Телефон или планшет с системой Android должен поддерживать режим хоста USB, так называемый USB On-The-Go (USB-OTG). Также требуется кабель USB-OTG [4].
[Возможности программы] • Поддержка устройств USB, принадлежащих классу CDC-ACM. 1. Auto - работает как "настоящий" терминал, без специального поля ввода для подготовки отправляемых данных. Символы отправляются в последовательное устройство по мере их ввода, в соответствии с нажатиями кнопок на клавиатуре. Это режим по умолчанию. • Поддержка отправки управляющих символов (например Ctrl-C). Ограничения: нет поддержки escape-последовательностей для перемещения курсора, управления цветом текста и т. п.. Это означает, что нет эмуляции VT100, и такие программы Unix, как vi, emacs, top, и т. д. не поддерживаются. Поддерживаются устройства USB: Arduino на основе чипов FTDI (например оригинальный Arduino Uno), на основе класса CDC (например Arduino Uno R3) и на основе чипа CH340 (например дешевые клоны Arduino). Также поддерживаются любые устройства, которые используют микросхему FTDI FT232R. Примечание: устройства Prolific (например, основанные на кристалле PL2303) в настоящий момент не поддерживаются. Для пользователей Arduino: одно из достоинств UsbTerminal это метод обработки DTR. Обычно когда плата Arduino подключена к компьютеру PC, она перезагружается каждый раз приложением эмуляции терминала, которая подключена к ней. Это происходит из-за того, что PC переводит сигнал DTR в лог. 0 всякий раз при формировании соединения, и Arduino разработана так, что сбрасывается, когда сигнал DTR падает в лог. 0. Программа UsbTerminal работает по-другому - она не меняет автоматически уровень сигнала DTR. Когда Вы подключаете смартфон или планшет к плате Arduino и открываете UsbTerminal, плата Arduino продолжит работать так, как она это делала до сего времени. Если Вы хотите перегрузить плату Arduino, то можете просто управлять сигналом DTR в программе UsbTerminal с помощью специальной кнопки. Компания ECYPH LLC анонсирует полное программное и аппаратное решение для поддержки терминала на Android. Вместе с кабелем идет бесплатная программа терминала FTDI UART Terminal, и это позволяет получить полноценную поддержку RS232 Serial Port. Эта программа может работать с любыми чипами компании FTDI. На мой взгляд у этой программы есть главное достоинство - функция, которой нет ни у одной другой программы - возможность передавать файлы по протоколу XMODEM (и другим популярным коммуникационным протоколам). Это очень удобно для обновления программного обеспечения радиоаппаратуры и для обмена информацией в виде файлов. Что еще немало важно - эта программа с открытыми исходниками (ссылка для закачки J2xxHyperTerm.7z)! Программу можно установить из Google play store, для неё доступно руководство пользователя AN_242, и можно установить программу локально через пакет apk, см. J2xxHyperTerm.zip. Требования к операционной системе и устройству Android: Android OS 3.2 или более свежая, и аппаратная поддержка порта хоста USB. [Возможности программы] • Приложение запустится автоматически, когда Вы подключите к Android устройство USB на чипе FTDI: FT232R, FT245R, FT232H, FT2232D, FT2232H, FT4232H, FT230X, FT231X. Выводы: к сожалению, только одна программа показала хорошую устойчивость при приеме большого непрерывного потока данных - USB Serial Monitor Lite. Все остальные протестированные программы либо в таких условиях отказывались работать, либо слишком тормозили. [Библиотеки для написания программ под Android] 1. usb-serial-for-android https://github.com/mik3y/usb-serial-for-android 2. UsbSerial https://github.com/felHR85/UsbSerial [FTDI] http://www.ftdichip.com/Android.htm [android-serialport-api - android_to_rs232_guideline.wiki] [Ссылки] 1. Communicating with serial USB device over Android site:stackoverflow.com. |