파이썬 스크립트를 통해 내 Arduino Nano의 데이터를 지속적으로 읽으려고합니다. 하지만 대부분의 경우 readline은 예외를 throw하지 못하거나 숫자가 누락 된 것처럼 손상된 데이터를 반환하지 못합니다. 여기 Arduino에서 Python으로 연속적인 데이터 스트리밍 (readline 실패)
는 연결 부분 :아두 이노 코드 : 작동하기 때문에 send_rows_cols()
에서
void loop() {
// Send data only when you receive data:
if (Serial.available() > 0) {
// Check if it's the right signal.
if (Serial.read()=='S') {
// Send a string containing the rows and cols number.
send_rows_cols();
} // if(Serial.read()=='S')
else {
send_data();
} // END: else if(Serial.read()=='Y')
}// if(Serial.available() > 0)
}
, 나는, Serial.write
를 사용하고 있지만 send_data()
내가 데이터를 다시 보낼 Serial.println()
을 사용했다 .
파이썬 부분. 합법적 인 값이 반환 될 때까지 사용해야했던 말도 안되는 실행 방법이 있습니다.
import serial
import time
locations=['/dev/ttyUSB0','/dev/ttyUSB1','/dev/ttyUSB2','/dev/ttyUSB3',
'/dev/ttyS0','/dev/ttyS1','/dev/ttyS2','/dev/ttyS3']
for device in locations:
try:
print "Trying...",device
arduino = serial.Serial(device, 9600)
break
except:
print "Failed to connect on",device
rows_cols =''
try:
while True:
arduino.write('S')
rows_cols = str(arduino.readline())
print len(rows_cols)
print rows_cols
if (len(rows_cols)>3):
break
except:
print "Failed to send!"
최대 하나까지 또는 두 개의 readlines 후에 작동합니다. 저렴한 가격입니다. 나중에, 나는 심지어 미친 코드를 사용해야했다. Arthon Python에서 Arduino로 문자를 보내면 연결이 끊어지지 않을 것입니다. Arduino가 그 문자를 기다려야한다는 것을 알 수 있습니다. Arduino가 해당 문자를 수신하면 원하는 데이터 (쉼표로 구분 된 문자열)를 다시 전송합니다.
이 마지막 파이썬 부분은 예외 나 손상된 데이터가 없을 때까지 Arduino에서 'Y'char 및 readline을 전송하는 것입니다. 너무 많은 루프는 아무것도 없습니다.
내가 원하는 것은 항상 "핸드 셰이크"가없고 그 데이터가 항상 쓰레기가되지 않으면 서 내 Arduino에서 데이터를 연속적으로 얻는 방법입니다.
그런 방법이 있습니까? 시리얼에 대한 타임 아웃 옵션일까요?
더 높은 수준의 연결 관리를 원한다면 다음과 같은 라이브러리를 사용하는 것이 좋습니다. 꼬인. 연결이 끊어지면 자동으로 다시 연결하기 위해'ReconnectingClientFactory'를 사용하여 장치에 연결할 수 있습니다. 꼬인 사건은 사건에 의해 움직이기 때문에 "계속 살아야한다"는 말을 더 쉽게 받아 들일 수 있습니다. 시작하려면 여기를 참조하십시오. http://stackoverflow.com/questions/4715340/python-twisted-receive-command-from-tcp-write-to-serial-device-return-response – jozzas