Как исправить UnicodeDecodeError при использовании Serial.println
Я использую Arduino Uno R3 для отправки инструкций на последовательный монитор в программе Python с Serial.println. Но когда я отправляю определенную строку, я получаю UnicodeDecodeError
.
Строка в коде Arduino, вызывающая эту ошибку:
Serial.println("Press '1,2,3,4,5' to run motor at 10%, 20%, 30%, 40%, 50% for 2 seconds");
Мой код Python для чтения последовательных данных:
def get_serial_data(self):
while 1:
try:
serial_data = self.serial_connection.readline().decode('Ascii')
filtered_serial_data = serial_data.strip('\r\n')
self.serial_monitor.insert(END, filtered_serial_data)
except TypeError:
pass
и вызывается из потока:
thread1 = threading.Thread(target=self.get_serial_data)
thread1.daemon = True
thread1.start()
Но я получаю следующую ошибку:
UnicodeDecodeError: 'ascii' codec can't decode byte 0x85 in position 36: ordinal not in range(128)
Может ли кто-нибудь помочь, почему это происходит или как это исправить, я видел сообщение stackoverflow, в котором нужно попробовать, за исключением блока, чтобы заставить его игнорировать эту строку, но я хочу его распечатать и хочу понять, почему я получите эту ошибку.
@stanley, 👍0
Обсуждение1 ответ
Лучший ответ:
Я решил проблему. Это была проблема с памятью, а не с декодированием. Поскольку динамическая память была в основном израсходована, это повлияло на кодирование данных. Уменьшение объема памяти, используемой моим кодом, решило проблему.
Я также обнаружил, что Serial.println("некоторый текст")
использует много динамической памяти. Таким образом, мне помогло уменьшение количества кодируемого текста, а также перенос текста в F()
, вот так:
Serial.println(F("some text"))
При этом строка хранится во флэш-памяти, а не в оперативной памяти. Вот полезная ссылка на функцию F:
https://arduinogetstarted.com/faq/what-is-serial.println-f
- Последовательная связь Arduino с Python: отправка массива
- Сброс последовательного порта Arduino в последовательном мониторе и Python
- Последовательная связь между python и arduino
- Почему нужно использовать latin-1 вместо utf-8 при использовании python с arduino?
- серийные данные портятся
- Как игнорировать значения мусора при последовательной связи между Arduino и Python
- В чем разница, когда ардуино был отключен от сети, и когда последовательный порт был закрыт?
- Отладка различного поведения последовательного приема/отправки между Uno и Mega
Как новичку в сообществе Arduino, было бы полезно знать, почему за этот и мой ответ проголосовали отрицательно. Это была реальная проблема, на решение которой мне потребовалось некоторое время, и она не была очевидна из документации. Без каких-либо причин для отрицательных голосов это сообщество выглядит недружелюбным., @stanley