Можно ли создать "виртуальное" последовательное устройство, которое отправляет данные через "виртуальный" последовательный порт? Мне нужно разработать код для взаимодействия с Arduino, но у меня его нет. Можно ли это сделать с помощью socat или кода, который записывает в dev/ttyXXX файл?
РЕДАКТИРОВАТЬ: я использую Arch Linux
Ответ 1 · рейтинг 16 · esorton
Да, вы можете использовать socat для имитации последовательного порта.
Вам необходимо использовать тип адреса Socat PTY:
PTY: Generates a pseudo terminal (pty) and uses its master side. Another
process may open the pty's slave side using it like a serial line or
terminal.
Самый простой вариант:
socat PTY,link=./virtual-tty,raw,echo=0 -
Приложение, которое вы тестируете, откроется virtual-tty. Вывод из вашего приложения будет напечатан на консоли. Введенный вами текст будет отправлен в ваше приложение.
Как отмечалось выше, тип адреса PTY создает peudo-terminal. Параметр link создает мягкую ссылку между псевдотерминалом и заданным файлом. Вы можете выбрать любое имя файла, какое пожелаете. Без софт-ссылки вам нужно было бы открыть устройство, и трудно определить правильный. raw переводит псевдотерминал в необработанный режим. Обычно вы этого хотите, поскольку вам не нужны какие-либо специальные параметры обработки терминала. echo=0 отключает режим эха.
Если у вас есть (или вы создаете) приложение, которое имитирует код, выполняемый на Arduino, вы также можете подключить его через socat. Если ваш симулятор общается через stdin / stdout, используйте следующую команду:
socat PTY,link=./virtual-tty,raw,echo=0 EXEC:simulator-command
Вышеупомянутое соединение stdin / stdout simulator-command с псевдотерминалом.
Если ваш симулятор также обменивается данными через последовательный порт, то дважды используйте команду PTY:
socat PTY,link=./arduino-sim,raw,echo=0 PTY,link=./virtual-tty,raw,echo=0
Откройте симулятор arduino-sim.