직렬 포트로 데이터를 보내고 답변을 보려면 어떻게 해야 합니까?

직렬 포트로 데이터를 보내고 답변을 보려면 어떻게 해야 합니까?

Linux에서는 명령 문자열(예: 일부 데이터)을 직렬 포트(제어 문자 포함)로 보내고 응답(종종 제어 문자도 포함할 수 있음)을 수신하고 싶습니다.

Linux에서 가능한 한 쉽게 이 작업을 수행하려면 어떻게 해야 합니까? 감사를 표현하는 예를 들어보세요!

답변1

Unix의 모든 장치는 장치 파일에 매핑되며 직렬 포트는 /dev/ttyS0 /dev/ttyS1... .

./dev/ttyS1

ls -l /dev/ttyS1

읽기 및 쓰기 액세스 권한이 필요하며, 공유 시스템인 경우 모든 사람에게 공개함으로써 보안에 미치는 영향을 고려해야 합니다.

chmod o+rw /dev/ttyS1

파일에 쓰는 매우 간단하고 조악한 방법은 간단한 echo명령을 사용하는 것입니다.

echo -ne '\033[2J' > /dev/ttyS1

그리고 읽어보세요

cat -v < /dev/ttyS1

cat을 한 터미널에서 실행하고 두 번째 터미널에서 echo할 수 있습니다.

모든 것이 횡설수설이라면 전송을 시작하기 전에 전송 속도, 비트 설정을 설정해야 할 수도 있습니다. stty그렇게 할 것입니다. !!stty는 stdin을 기본 파일 설명자로 사용하면 영향을 받습니다.

동등한 명령.

stty 19200 < /dev/ttyS1
stty 19200 -F /dev/ttyS1

스크립트와 로그를 작성하는 데 이 정도면 충분할까요? 무엇을 달성하고 싶은지 잘 모르겠습니다.

좀 더 대화형으로 사용하려면 기본 설정 방법은 minicom지금까지 언급한 모든 작업을 수행하는 프로그램을 사용하는 것임을 기억하세요. (익숙한 Windows의 HyperTerminal과 유사합니다.)

screen중간 솔루션은 직렬 장치에서 실행될 수 있는 터미널 프로그램을 사용하는 것입니다.

screen /dev/ttyS1

man screen man minicom man stty더 많은 정보를 알고 싶다면

답변2

두 개의 터미널을 열기만 하면 됩니다. 첫 번째 터미널에서는 다음 cat과 같은 장치에서 모든 것을 얻을 수 있습니다.

cat /dev/ttyS0

다른 터미널에서는 다음과 같이 임의의 16진수 문자와 텍스트를 터미널로 보낼 수 있습니다.

echo -e "\x7E\x03\xD0\xAF und normaler Text" > /dev/ttyS0

echo -e명령을 사용하면 백슬래시 이스케이프를 해석할 수 있습니다.

물론 (i) 직렬 설정(속도, 단어 길이, 흐름 제어 등)이 올바른지, (ii) 직렬 장치(다른 쪽 끝)가 차단되지 않는지 확인해야 합니다.

답변3

직렬 장치와 통신하는 프로그램:

picocom
minicom
socat

또는 쉘에서 다음을 수행할 수 있습니다.

stty -speed 19200 < /dev/ttyS0 # sets the speed of the port
exec 99<>/dev/ttyS0 (or /dev/ttyUSB0...etc)
printf "AT\r" >&99
read answer <&99  # this reads just a CR
read answer <&99  # this reads the answer OK
exec 99>&-

답변4

다음과 같이 동시에 장치를 읽고 쓸 수 있습니다.

cat /dev/cu.usbmodem411 & cat > /dev/cu.usbmodem411

catstdin귀하의 메시지는 첫 번째 메시지가 cat응답을 전달 하는 두 번째 메시지에서 전송되어 stdout터미널을 채팅방으로 전환합니다.

완료하고 ctrl-c다시 실행합니다.fgctrl-c

관련 정보