Получение данных из arduino с помощью python
Я пытаюсь прочитать данные потенциального измерителя из Arduino, используя python, с помощью программы на Arduino следующим образом :
#include <cvzone.h>
SerialData serialData;
int sendVals[2];
void setup() {
serialData.begin(9600);
}
void loop() {
int potVal = analogRead(A0);
sendVals[0]= potVal;
serialData.Send(sendVals);
}
программа на стороне arduino работает нормально
и программа на python следующим образом
from cvzone.SerialModule import SerialObject
arduino = SerialObject("COM7")
while True:
data = arduino.getData()
print(data[0])
но я получаю ошибку :(
Traceback (последний последний вызов): data = arduino.getData() Файл "C:...\site-packages\cvzone\SerialModule.py", строка 68, в getData data = data.decode("utf-8") UnicodeDecodeError: кодек 'utf-8' не может декодировать байт 0xf7 в позиции 0: недопустимый начальный байт
как ее решить?
2 ответа
Лучший ответ:
Я бы вставил вызов .getData()
в блок try и обработал это конкретное исключение с
помощью UnicodeDecodeError
. Всегда может быть ошибка передачи, особенно при запуске скрипта.
Однако я бы сделал это по-другому:
void loop() {
Serial.println(analogRead(A0));
}
...а на стороне python используйте serial.readline()
из pyserial.
Но я не знаю cvzone, и у вас может быть причина использовать это вместо обычно используемого pyserial.
большое вам спасибо, это действительно помогло мне :), @M. Al lail Qadrillah
Похоже, что может возникнуть проблема с реализацией getData()
в SerialModule.py
.
Из строки 62
def getData(self):
"""
:param numOfVals: number of vals to retrieve
:return: list of data received
"""
data = self.ser.readline()
data = data.decode("utf-8")
data = data.split('#')
dataList = []
[dataList.append(d) for d in data]
return dataList[:-1]
Блок кода, содержащий readLine()
, вероятно, должен находиться в блоке try...except
, например:
def getData(self):
"""
:param numOfVals: number of vals to retrieve
:return: list of data received
"""
try:
data = self.ser.readline()
data = data.decode("utf-8")
data = data.split('#')
dataList = []
[dataList.append(d) for d in data]
return dataList[:-1]
except Exception as e:
print(e)
self.ser.close
На Github возникла проблема: SerialModule.py — readLine() должен находиться в пределах блока try. #49
- Распаковка бинарных данных Arduino на скетче Python
- Отправка значений с плавающей запятой из Python в Arduino с использованием последовательной связи
- Arduino, python, pyfirmata, стандарт компании
- 5V pin out, 8 контактов и поддержка micropython/circuitpython: существует ли такая плата?
- Скрипт Python не может подключиться к последовательному порту
- Отладка различного поведения последовательного приема/отправки между Uno и Mega
- Как связать процессор компьютера с Arduino на плате?
- Можете ли вы использовать python для управления RGB-матрицей с помощью Arduino Mega?
новое USB - соединение сбрасывает Mega, и он проводит некоторое время в загрузчике в ожидании загрузки., @Juraj
Возможно, добавить некоторую задержку на Arduino после инициализации serialData в
startup ()
, прежде чем он начнет отправлять данные вloop()
., @Dave X