USB-хост Arduino + RS232

Я хотел бы получить совет по этому вопросу. В основном есть устройство на основе COM-порта, которое мне нужно подключить к планшету Android через USB. Планшет будет обмениваться пакетами данных с COM-устройством, но а) Arduino может потребоваться выполнить такое же преобразование пакетов б) планшет не должен использовать функцию OTG и не должен сам быть мастером.

Итак, мои вопросы

1) Какая плата Arduino лучше всего подходит? 2) Есть ли вариант использовать китайские платы ради оптимизации затрат? 3) Нужен ли мне отдельный экран RS232 и USB, или можно использовать встроенные контакты USB и данных?

Извините за этот довольно нубский вопрос, но это именно то, кем я являюсь для платформы Arduino. Будем признательны за любые ответы.

, 👍1

Обсуждение

Ни один Arduino не реализует USB-хост. Для этого потребуется более или менее полная ОС. И не совсем понятно, как части вашего проекта связаны между собой., @Dmitry Grigoryev

@DmitryGrigoryev Я считаю, что Arduino Duo должен поддерживать режим USB Host, по крайней мере, я видел это в различных блогах и форумах в Интернете: https://forum.arduino.cc/index.php?topic=548469.0 Итак, можете ли вы объяснить, что делать? в смысле, пожалуйста?, @Ivan

Истинный. Тем не менее, вы приняли ответ, предлагающий 32U4, у которого нет режима хоста, поэтому я все еще не понимаю, что вы пытаетесь сделать. Вы решили использовать OTG или использовать Duo для соединения COM-устройства и Android-устройства вместе? Или сама Arduino является устройством на основе COM, о котором вы говорите?, @Dmitry Grigoryev

@DmitryGrigoryev извините за неясность. Дано а) COM-устройство, б) Android-планшет. Необходимо решить, как их подключить, чтобы планшет мог отправлять/получать данные на/с COM-устройства, но при этом держать планшет заряженным (поэтому OTG не вариант, поскольку он превратил бы его в мастер, тем самым отдавая заряд). Кроме того, может потребоваться дополнительное преобразование данных, передаваемых между устройствами., @Ivan


1 ответ


Лучший ответ:

1

1) Какая плата Arduino лучше всего подходит? 2) Есть ли вариант использовать китайские платы ради оптимизации затрат? 3) Нужен ли мне отдельный экран RS232 и USB, или можно использовать встроенные контакты USB и данных?

При общении с Android необходимо убедиться, что для этого доступно программное обеспечение. На самом деле это больше зависит от приложения, чем от операционной системы, и из-за этого можно сильно ограничить, какие платы будут работать, а какие нет.

Лично я бы выбрал плату на базе ATMega32U4, которая обеспечивает стандартный интерфейс CDC/ACM. Это также имеет то преимущество, что (часто единственный) UART на плате не используется связью USB.

Затем вам нужно преобразовать UART в RS232, используя (например) плату MAX232.

,

да, у меня есть полный контроль над приложением для Android, и, в принципе, совместить его с бордом не будет проблемой., @Ivan

Я немного озадачен сейчас. Потому что ATMega32U4 используется в Arduino Micro и Leonardo, которые, как я полагал, не могут быть хост-устройствами. Читая документы, я склонялся к Arduino Due, потому что в документации для класса USBHost конкретно указано, что класс совместим только с моделью Due., @Ivan

@Ivan Вы хотите, чтобы устройство Android было хостом., @Majenko

Не совсем так, я бы хотел, чтобы это был раб, а борд выступал в роли хозяина., @Ivan

@Ivan Тогда у тебя впереди долгая работа. В Android нет (AFAIK) API для таких вещей. Вы можете выполнять передачу файлов, совместное использование сети и т. д., но не последовательное соединение. Для этого вам *нужно* устройство Android в качестве хоста., @Majenko

@Ivan Рассматривали ли вы вместо этого подключение к Android через Bluetooth?, @Majenko

Хм, то есть, по сути, вы говорите, что я не смогу использовать классы UsbDevice, UsbInterface, UsbEndpoint из Android SDK в случае, если планшет подключен как подчиненный и не сможет ответить на борд Arduino, когда тот запрашивает данные?, @Ivan

К сожалению, Bluetooth вообще не вариант., @Ivan

@Ivan Единственные ресурсы, которые вы, вероятно, найдете, - это использование Android в качестве хоста. Это нормальный вариант, это разумный вариант, и единственное другое упоминание, которое я могу найти о том, что кто-то хочет сделать это, упоминает об изменении установки Android и компиляции собственного ядра. Итак.... нет., @Majenko

Круто, большое спасибо за помощь. Попробую что-нибудь придумать., @Ivan

Извините, что беспокою вас, не углублялся в тему, но, похоже, Android позволяет подключать USB-аксессуары https://source.android.com/devices/accessories/custom#connecting-over-usb, и я нашел пример ( который я не уверен, работает) - https://github.com/Geotab/android-external-device-example/blob/master/app/src/main/java/com/geotab/AOA/AccessoryControl.java , попробую поиграть с ним., @Ivan

Возвращаясь к первоначальному вопросу :) Считаете ли вы Arduino Due лучшей платой для экспериментов?, @Ivan

@Ivan То есть Android является хозяином. Аксессуар — это устройство., @Majenko

И нет, я бы выбрал Pro Micro или Leonardo., @Majenko

Хм, в этом документе говорится: «Из-за низкой выходной мощности устройств Android AOA требует, чтобы аксессуар действовал как USB-хост, что означает, что подключаемый аксессуар должен питать шину»., @Ivan

@Ivan AOA - странный зверь. Это не нормальное соединение через USB. Режим «хост» используется только с точки зрения питания в этой системе - устройство Android по-прежнему должно подключаться к аксессуару, а не к телефону. Также нет поддержки AOA в Arduino., @Majenko

правильно я вижу и кажется, что это именно то, что мне нужно. В основном основная цель не разрядить батарею планшета. Если AOA позволяет выполнять программную часть работы на планшете, но питание по-прежнему подается извне, меня это устраивает. Попробую поиграть с упомянутыми вами платами и, возможно, с Arduino Due. Большое спасибо за помощь!, @Ivan

Блин, только что заметил последнюю фразу "Также нет поддержки AOA в Arduino" :(, @Ivan

Всегда есть вероятность, что кто-то где-то написал плагин библиотеки AOA для USB-стека Arduino, но я в этом сомневаюсь. Возможно, вы работаете в Atmel Studio..., @Majenko

AOA поддерживается в Arduino (или была), но называется ADK. https://www.arduino.cc/en/Guide/ArduinoADK. В последний раз кто-то был в восторге от этого в 2012 году. В библиотеке USB Host Shield 2.0 есть ссылки на ADK, как и в библиотеке хостов USB Due https://github.com/arduino-libraries/USBHost/tree/master/examples/ADKTerminalTest. Работает ли еще Arduino ADK, я не знаю. BLE или WiFi — лучшие варианты для связи с устройством Android., @gdsports