내 PC와 마이크로 컨트롤러 (MC)간에 통신을 시도하고 있습니다. 내 마이크로 컨트롤러는 getchar()
을 사용하여 4 문자를 읽거나 문자 '\0'
, '\'
또는 '\r'
으로 바뀔 때까지 읽습니다.마이크로 컨트롤러에 쓸 Pyserial 문자열 - 바이트 인코딩
하이퍼 터미널로 통신이 완벽하게 작동합니다. 그러나, 내 python 스크립트 '\0'
, '\'
, 또는 '\r'
보낼 때 입력 된 문자열을 인코딩하고 하나의 특수 문자로 연결하는 것 같습니다.
command = input("Enter Command: ")
port.write(bytes(command + '\n', 'UTF-8'))
그래서 명령 x
를 입력 한 경우는 'x'
및 '\n'
를 전송해야하며, MC는 더 많은 문자 때문에 새로운 라인의 읽기를 기다리는 중지해야합니다. 그러나 x
만 입력하면 MC는 4 자 이상 읽을 수 있습니다.
문자열을 특수 문자와 올바르게 바이트로 변환하려면 어떻게해야합니까? 감사.
엠씨 코드 :
map(ord,command+'\n')
또는 bytearray(command+'\n',"UTF-8")
경우 :
가buffer[ii] = getchar();
while(buffer[ii] != '\0' && buffer[ii] != '\n' && buffer[ii] != '\r' && ii < 4 - 1)
{
buffer[++ii] = getchar();
}
감사합니다. 그래서 한 번에 1 바이트를 보내야했지만 10 밀리 초의 지연도 추가해야했습니다. 하이퍼 터미널이 한 번에 한 바이트 씩 보내는 동안 파이썬은 한 번에 전체 메시지를 보냅니다. getchar()은 첫 번째 char을 보았고 나머지 데이터는 pyserial로 손실되었습니다. 위의 for 루프 코드에 대한 한 가지 작은 변경 사항은 b가 먼저 바이트로 변환되어야한다는 것입니다. – roverred