У меня есть небольшая проблема с получением данных с помощью pySerial: он часто не читает полные данные или слишком много. Иногда, а иногда и чаще, появляются дополнительные символы или некоторые символы/части данных с пометками отсутствуют. Кажется, ПК и эмиттер данных не синхронизированы правильно.PySerial не принимает данные правильно
В данном примере я использую Arduino, посылая «Hello World» к последовательному порту ПК (ОС Ubuntu 14,04), со следующим простым кодом:
void setup(){
Serial.begin(9600);
Serial.print("Programme initiated\n");
}
я использую следующий python3 код для получения данных:
import serial
import time
arduino = serial.Serial(port, baudrate=9600, timeout=2)
print(arduino.isOpen)
print(arduino)
time.sleep(1)
while True:
print(arduino.readline())
Это в значительной степени простой учебник пример, и вот что я получаю (кроме правильного материала):
b'PrProgramme initiated\n'
или
b'PProgramme initiated\n'
или
b'ProgProgramme initiated\n'
или
b'ogramme initiated\n'
я перешел на более сложные проблемы в моем коде, но я все еще не решил эту проблему. При отправке сообщения в цикле из arduino (стандартного кода hello world) часто требуется время для стабилизации (в то время как оно снова показывает только средний фрагмент данных), и после этого работает довольно стабильно, но даже тогда он иногда разбивает отдельные строки.
Я столкнулся с теми же трудностями при общении с мультиметровым устройством. Там он часто не считывает первые символы или не смешивается с предыдущими данными.
Неужели кто-нибудь сталкивался с этой проблемой раньше? Я думаю, что речь идет о синхронизации, но я не знаю, как ее решить. И то, что меня озадачивает, состоит в том, что я действительно использовал только материал учебника, и он, похоже, не работает должным образом. Или это проблема конфигурации моего ПК?
Спасибо за объяснение. Есть ли, в общем, способ очистить буфер до начала связи (так сказать, чтобы решить пункт 3)? – kire
попробуйте с arduino.flushInput() сразу после открытия – Lesto