답변:
USB 직렬 변환기의 속성은 호스팅 시스템의 하드웨어와 는 관련 이 없지만 USB 직렬 칩 자체와 호스팅 시스템의 소프트웨어 스택과는 관련이 없습니다.
파이는 재고 Linux USB 직렬 드라이버를 사용해야합니다.
따라서 hupcl
Arduino 사이트 및 다른 곳에서 문서화 된 일반적인 Linux 방법을 통해 DTR의 포트 열기 / 닫기 연결을 활성화 / 비활성화 할 수 있습니다 .
stty -F /dev/ttyUSB0 -hupcl
또는 / dev / ttyUSB0을 실제로 USB 직렬 포트에 해당하는 장치 파일로 바꾸십시오 (예 : 첫 번째 Uno 연결은 / dev / ttyACM0 일 수 있음)
PI 자체의 고유 직렬 포트와 관련하여 DTR의 이러한 동작은 궁극적으로 소프트웨어 제어하에 있습니다. 다른 주장을하는 사람은 포트에 대한 지식이있는 하드웨어가 아니라 Linux 드라이버라는 사실을 무시하고 있습니다 열거 나 닫았습니다. 실제 포트 하드웨어는 직렬 장치를 여는 것과 동의어가 아닌 것으로 읽거나 쓰거나 재구성 중임을 알 수 있습니다.
@ChrisStrattons poststty -F /dev/ttyUSB0
는 끊기를 방지하기 위해 사용하는 방법을 설명합니다 . 다음은 파이썬에서 수행하는 스 니펫입니다.
import termios
path = '/dev/ttyACM0'
# Disable reset after hangup
with open(path) as f:
attrs = termios.tcgetattr(f)
attrs[2] = attrs[2] & ~termios.HUPCL
termios.tcsetattr(f, termios.TCSAFLUSH, attrs)
ser = serial.Serial(path, 9600)
# etc.
USB 케이블을 다시 꽂을 때 정확한 숫자가 표시 될 수 있으므로 globbing을 통해 경로를 감지합니다.
try:
path = glob.glob('/dev/ttyACM*')[0]
except IndexError:
# retry, error out, etc.
pass
termios
이상은 말 os.system("stty -F /dev/ttyUSB0 -hupcl")
? 또한 btw, 호스트 시스템의 전원을 켠 후 처음 연결할 때 Arduino가 재설정되는 것을 막을 수는 없습니다. 후속 연결시 재설정되지 않습니다. 아무것도 아닌 것보다 낫습니다. 그러나 DTR 전환을 막는 방법을 알아낼 수 있기를 바랍니다.
termios
는 포크 / 실행 (호출)을 외부 프로그램 ( stty
)에 저장합니다. DTR에 대해 어떻게해야할지 모르겠지만 방금이 "기능"을 수락하고 Arduino와 Pi의 응용 프로그램이 동기화되었는지 여부를 감지하는 몇 가지 논리 (쓰기 / 읽기를 통한 사용자 지정 핸드 셰이크)를 추가했다고 생각합니다.
당신은 120Ω의 저항 사이 (또는 조합이 120Ω의를 만들기 위해) 추가 할 수 있습니다 RESET
및 5V
이 완전히 재설정 방지 할 수 있습니다. 다른 솔루션이 보드에서 저항이나 커패시터를 제거해야하므로 업로드가 복잡해지기 때문에 이는 가장 침습적입니다. 프로그래밍중인 경우 저항을 유지하지 마십시오. 제거하십시오.
Leonardo 보드 DTR
는 트리거 되더라도 재설정되지 않지만 때때로 Raspberry에 대한 연결이 느슨해 져서 물리적으로 재설정해야하므로 원격으로 재설정해야 할 때 문제가 시작됩니다.
PySerial을 사용할 수 있습니다. 다음은 Python 코드에 대한 예입니다.
port =serial.Serial(
"/dev/ttyUSB0",
baudrate=57600,
parity=serial.PARITY_NONE,
stopbits=serial.STOPBITS_ONE,
bytesize=serial.EIGHTBITS,
dsrdtr = False
)
stty -F /dev/ttyUSB0 -cdtrdsr
보고합니다 invalid argument: -cdtrdsr
.