이전에는 Linux 및 Windows 환경에서 직렬 통신을 위해 C++ 및 Python을 사용해 왔습니다. Linux에서는 직렬 통신을 위해 picocom, minicom, Cutecom과 같은 프로그램도 사용했는데 이제는 외부 프로그램을 설치하지 않고도 간단한 Linux 명령을 사용하여 직렬 포트를 읽고 쓰고 싶습니다. Raspberry Pi에서 이 방법을 사용하여 Arduino 보드와 통신하겠습니다. 아래 예에서는 stty를 사용하여 직렬 포트 옵션을 설정하고 echo 및 cat 명령을 사용하여 직렬 포트에서 데이터를 보내고 읽지만 결국 출력이 표시되지 않습니다. 사이트에 이와 관련된 게시물이 있지만 나에게는 아무 효과가 없는 것 같습니다. Cutecom을 사용하여 Arduino와 통신할 수 있지만 다음 명령을 사용하면 아무런 응답이 표시되지 않습니다.
리눅스(우분투):
$ stty -F /dev/ttyUSB0 9600 cs8 -cstopb -parenb
$ echo "1" > /dev/ttyUSB0 //send data
$ cat /dev/ttyUSB0
참고용 Arduino Mega 코드:
#include <Arduino.h>
void setup() {
Serial.begin(115200);
}
void loop() {
if(Serial.available() > 0){
Serial.println("[123,55,7777]");
}
}
여기서는 1을 보내고 Arduino로부터 응답을 받습니다.
이것은 간단해야 합니다. Arduino에 1 또는 임의의 문자를 보내면 명령줄에 [123,55,7777]이 반환되어야 합니다. 어떤 종류의 도움과 지도에도 감사드립니다.
다음은 시도한 코드이지만 데이터가 반환되지 않았습니다.
stty -F /dev/ttyUSB0 115200 cs8 -cstopb -parenb #CONFIGURE SERIAL PORT
exec 3</dev/ttyUSB0 #REDIRECT SERIAL OUTPUT TO FD 3
cat <&3 > /tmp/ttyDump.dat & #REDIRECT SERIAL OUTPUT TO FILE
PID=$! #SAVE PID TO KILL CAT
echo -e -n "\x01" > /dev/ttyUSB0 #SEND COMMAND HEX 0x01 TO SERIAL PORT
sleep 0.2s #WAIT FOR RESPONSE
kill $PID #KILL CAT PROCESS
wait $PID 2>/dev/null #SUPRESS "Terminated" output
exec 3<&- #FREE FD 3
cat /tmp/ttyDump.dat #DUMP CAPTURED DATA
감사해요
답변1
일반적인 문제는 장치가 꺼지면 일부 기본 구성으로 재설정되어 변경 사항이 손실된다는 것입니다. 열린 파일 설명자를 보유하면 이러한 상황을 피할 수 있습니다.
이와 같은 것 (테스트되지 않음)
#!/bin/bash
# Keep the ttyUSB0 device open on fd 3
exec 3<>/dev/ttyUSB0
stty -F /dev/ttyUSB0 9600 cs8 -cstopb -parenb
echo "1" >&3 # send data
cat <&3 # read the data