터미널에서 USB 포트로 직렬 데이터를 보내시겠습니까?

터미널에서 USB 포트로 직렬 데이터를 보내시겠습니까?

내 USB 포트(Linux 기반 OS)에 Arduino가 연결되어 있으며 /dev/ttyACM0읽을 직렬 데이터를 수신하고 수신되는 대로 처리하고 있습니다. 내가 해야 할 일은 이 포트로 데이터를 보내는 것뿐입니다. minicom 이 프로그램을 다음 명령과 함께 사용했습니다 .

minicom --device=/dev/ttyACM0 --baudrate=9600

완벽하게 작동합니다. 문제는 minicom대화형 환경에서 실행되고 있습니다. 비대화형으로 정보를 보내는 쉘 스크립트를 작성하고 싶습니다.

minicom --device=/dev/ttyACM0 --baudrate=9600  "message"

echo내가 이해한 바에 따르면 Unix의 모든 것은 파일입니다. 심지어 USB 포트도 마찬가지입니다. 그래서 장치 파일에 직접 바이트를 쓸 수 있는지 궁금합니다 .

echo "message" >/dev/ttyACM0

하지만 이것은작동 안함. 나는 이것이 전송 속도 불일치와 관련이 있을 수 있다는 것을 알고 있습니다. 다음 명령을 실행했습니다.

$ stty -F /dev/ttyACM0
speed 9600 baud; line = 0;
min = 0; time = 0;
-brkint -icrnl -imaxbel
-opost -onlcr
-isig -icanon -iexten -echo -echoe -echok -echoctl -echoke

그런데 전송속도는 9600 입니다. 위의 명령으로 작동하게 하는 방법이 있나요?

답변1

이 스레드는 1년이 넘었기 때문에 귀하의 질문에 대한 답변을 얻었는지 모르겠습니다.

하지만 자체 쉘이 있고 tty와 사용자 간의 상호 작용을 자동화할 수 있는 스크립팅 언어가 아닌 이상 스크립트를 사용하지 않아도 될 것 같습니다.

    #!/usr/bin/expect -f
    set timeout -1
    spawn ./que.sh
    expect "Enter your name\r"
    send -- "I am Nikhil\r"
    expect "Enter your age\r"
    send -- "24\r"
    expect "Enter your salary\r"
    send -- "100k\r"
    expect eof

첫 번째 줄은 예상 명령 경로(#!/usr/bin/expect)를 정의합니다. 코드의 두 번째 줄에서는 시간 초과를 비활성화합니다.

그런 다음 generate 명령을 사용하여 스크립트를 시작합니다. 스폰을 사용하여 원하는 프로그램이나 다른 대화형 스크립트를 실행할 수 있습니다.

스폰 명령은 쉘, FTP, 텔넷, SSH, SCP 등과 같은 스크립트나 프로그램을 시작하는 데 사용됩니다.

나머지 줄은 쉘 스크립트와 상호 작용하는 Expect 스크립트입니다.

마지막 줄은 파일의 끝으로, 상호작용의 끝을 의미합니다.

이제 스크립트를 저장하고 다른 쉘 스크립트처럼 파일을 실행 가능하게 만듭니다.

man expect사용법은 셸에서 입력하여 설명하며, 다음 페이지에서 자세히 설명합니다.

https://www.geeksforgeeks.org/expect-command-in-linux-with-examples/

내가 도울 수 있기를 바랍니다.

관련 정보