Вставка себя в серийную связь
Мне поручен проект, связанный с Arduino и Raspbery PI. У меня большой опыт работы с Arduino и 0 с Raspbery или Linux. Человек, который работает, уволился, и есть некоторые проблемы, которые мне нужно начать отлаживать.
Проект включает в себя управление вводом и выводом с помощью Arduino, а также сенсорный экран и приложение SMS в Raspbery. Они подключаются к стандартному последовательному порту через USB.
Я хочу прочитать это сообщение на моем ПК-терминале. Какой самый простой способ вставить себя, ничего не изменяя в Raspbery?
@Affaltar, 👍1
Обсуждение3 ответа
Лучший ответ:
Как указано в комментариях st2000, подключение к USB — сложная задача и, конечно, не лучший вариант.
Возможно, есть программа для Raspbian, которая передает последовательные данные в 2 программы одновременно. (Я не знаю ни одного, и это было бы не по теме здесь)
Поэтому лучше всего использовать последовательную (UART) связь между чипом USB-Serial (который преобразует USB в реальный последовательный UART) и Atmega2560 (основной чип Arduino Mega). Чтение серийного номера (UART) — полностью пассивное действие. Вы не нарушаете общение с ним; только если вы попытаетесь отправить что-то со своего прослушивающего устройства. Mega использует первый последовательный интерфейс для связи через USB, а это означает, что вам нужно подключить контакты 0 и 1 (помеченные TX и RX).
Теперь о прослушивающем устройстве: здесь у вас есть несколько возможностей. Вы можете использовать контакты RX двух других ардуино или двух адаптеров USB-UART. Но я бы предложил сразу купить логический анализатор. Это небольшое USB-устройство, которое позволяет отображать цифровые сигналы (например, последовательную связь) на вашем ПК. Я использую один с программным обеспечением Pulseview. Он также может анализировать цифровой сигнал для различных протоколов связи, например UART. С помощью логического анализатора вы достигнете своей цели — прослушивания последовательной связи, но у вас также будет очень мощный инструмент для ваших будущих проектов Arduino (с его помощью вы сможете анализировать все виды цифровых сигналов). Они довольно дешевы (у меня есть один с небольшими зажимами, чтобы прикрепить его к цепи примерно за 15 евро).
В конце концов, вам решать, каким путем вы хотите пойти и что вы хотите купить.
Если все, что вы хотите сделать, это следить за тем, что происходит, вы можете взять пару адаптеров USB-UART и подключить контакт RX каждого к Arduino — один к контакту RX, чтобы увидеть, что получает Arduino, и один к контакту TX, чтобы увидеть, что передает Arduino.
Затем вам нужно открыть оба COM-порта в отдельных приложениях (если только вы не найдете приложение, позволяющее открывать оба вместе), чтобы увидеть, что проходит через каждый канал.
Возможно, вы сможете прослушивать сообщения от самого Raspberry Pi,
без дополнительного оборудования. Предполагая, что программа на Pi может быть настроена
использовать последовательный порт отличный от /dev/ttyACM0
,
программа могла создать пару псевдотерминалов, затем переслать данные обратно и
между /dev/ttyACM0
и главным псевдотерминалом, а
протоколирование всего. Если вы укажете свое приложение Pi на подчиненное устройство
псевдо-терминал, у вас есть регистратор «человек посередине»:
Arduino --(/dev/ttyACM0)-- logger --(pseudo-tty)-- application
Что интересно в ведомом псевдотерминале, так это то, что касается приложения, оно ведет себя точно как обычный серийный порт.
Кажется, у этой идеи довольно много реализаций. См. ответы на эти другие вопросы по обмену стеками:
- Как я могу отслеживать трафик последовательного порта?
- Прослушивание последовательного порта в Linux
Например, файл README interceptty указывает:
interceptty предназначен для размещения между последовательным портом (или другим терминальное устройство, или программа, или сокет, или что-то связанное с файловый дескриптор) и программа, которая взаимодействует с этим устройство, записывая все, что происходит между ними. Он делает это, открывая реальное устройство, создавая псевдотерминал, а затем пересылает все, что находится между ними, записывая все, что видит.
- Как разделить входящую строку?
- Как вывести несколько переменных в строке?
- В чем разница между Serial.write и Serial.print? И когда они используются?
- Загрузка Arduino Nano дает ошибку: avrdude: stk500_recv(): programmer is not responding
- Программы построения последовательных данных
- Как узнать частоту дискретизации?
- Что такое Serial.begin(9600)?
- Очистить существующий массив при получении новой последовательной команды
Что за Ардуино?, @Majenko
Непонятно, кто ведет речь. Только то, что связь осуществляется через USB. Итак, самый простой ответ - использовать анализатор протокола шины USB. Большинство из них стоят сотни долларов., @st2000
Если вы используете Arduino без встроенной поддержки USB, вы можете использовать контакты RX и TX, которые подключены к последовательному чипу USB (некоторые платы Arduino имеют несколько последовательных интерфейсов, поэтому вам нужно подключиться к правильному)., @chrisl
@Маженко Ардуино Мега2560, @Affaltar
@st2000 Raspbery отправляет команды и ожидает на них ответ, а Arduino регулярно (каждые 300 мс) отправляет отчет о состоянии, @Affaltar
@chrisl Могу ли я просто добавить еще одну пару проводов к используемым контактам RX и TX и читать их без перерыва?, @Affaltar