내 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/
내가 도울 수 있기를 바랍니다.