해결책

해결책

직렬 장치의 데이터를 해석할 수 있는 bash 스크립트를 작성하려고 합니다. 나는 원시 방식으로 포트를 구성한 다음 /dev/ttyUSB0에 대해 간단한 cat을 실행하여 데이터를 볼 수 있었습니다. 제 질문은 자유롭게 조작할 수 있도록 장치에서 bash 변수로 전송한 한 줄의 데이터를 가져오는 방법입니다.

Python을 사용하기 전에 bash에서 사용하여 항상 모든 Linux 시스템에서 실행될 스크립트를 갖고 싶습니다.

내가 받은 데이터의 형식은 다음과 같습니다: STX<26 x 4Bit-Nibbles coded as ASCII Payload>ETX

이상적으로는 새 데이터 문자열을 얻을 때마다 새 페이로드(STX 및 ETX 없음)를 Bash 변수에 저장할 수 있습니다.

해결책

@icarus 답변의 도움으로 나는 매력처럼 작동하는 것을 만들었습니다. 먼저 STX 값으로 인터럽트를 생성하도록 직렬 포트를 구성합니다.

stty /dev/ttyUSB0 115200 내부 0x02

그런 다음 원하는 정보를 얻으려면 다음 루프를 사용합니다.

ETX=$'\003'
-d "$ETX" 라인을 동시에 읽습니다. echo $line < /dev/ttyUSB0;

도움을 주셔서 다시 한번 감사드립니다. 이 사이트에 대한 첫 경험이 정말 좋았습니다. 건배

답변1

검증되지 않은!

 #!/bin/bash
 ETX=$'\003'
 STX=$'\002'
 # Open /dev/ttyUSB0 open on FD9
 exec 9< /dev/ttyUSB0
 # do any stty stuff needed on fd9
 # e.g.
 # stty 9600 < /proc/self/fd/9 > /proc/self/fd/9
 # now loop, reading from the device,
 while IFS= read -rd "$ERX" -u 9 wibble
 do
    wibble=${wibble#"$STX"}
    printf 'Got %q\n' "$wibble"
    # Do something
 done

의 경우 bash데이터에 NUL 바이트가 포함되어 있으면 이 방법이 작동하지 않습니다. zsh이런 경우에는 이를 사용해야 합니다.

관련 정보