У меня есть вопрос о моем коде. Речь идет о связи между Arduino и малина с последовательной связи и формате Json.Получите сообщения json в малиновом коде Python, отправленные Arduino
Вот мой питон скрипт для Малина:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import serial
import time
import simplejson as json
ser = serial.Serial('/dev/ttyACM0',9600)
buffer = ""
while True:
try:
buffer = ser.readline()
print buffer
data = json.loads(buffer)
print data["three"]
three = data["three"]
print three
#rcv = dummy.split()
#print(rcv)
buffer = ""
print " "
except json.JSONDecodeError:
print "Error : try to parse an incomplete message"
Вот мой Arduino код:
int one=1;
int two=2;
int three = 3;
int four = 4;
void setup() {
Serial.begin(9600);
}
void loop() {
Serial.println("'{\"one\":\"" + String(one) +
"\", \"two\":\"" + String(two) +
"\", \"three\":\"" + String(three) +
"\", \"four\":\"" + String(four) +
"\"}'");
}
В коде питона, buffer
возвращается:
'{ "один": "1", "два": "2", "три": "3", "четыре": "4"}'
В теории three
возвращается:
я проверить его в питон консоли, и она работает (без последовательной связи):
buffer = '{"one":"1", "two":"2", "three":"3", "four":"4"}'
data = json.loads(buffer)
three=data["three"]
print three 3
и это возвращение как и ожидалось:
Но в реальном коде времени, я не могу получить значение three
и json.loads(buffer)
возникает ошибка все время:
Ошибка: попытайтесь разобрать неполное сообщение
'{"one": "1", "two": "2", "three": "3", " четыре ":" 4" } '
Ошибка: пытаться разобрать неполное сообщение
' { "один": "1", "два": "2", "три": "3", «четыре»: «4»} '
В этом случае мой код не работает. Цель состоит в том, чтобы получить все значения, посылаемые Arduino в разных переменных в python.
спасибо.
Попробуйте напечатать фактические ошибки и 'buffer' при возникновении ошибки:' кроме json.JSONDecodeError, как например: печать ех; print buffer' Я подозреваю, что вам нужно будет ввести некоторые «зависания» (т.е. 'sleep'), чтобы убедиться, что код Arduino записывает все до того, как код Python пытается его прочитать. – DeepSpace
Возвращает> Ожидающее значение: строка 1 столбец 1 (char 0) Ошибка: попытайтесь разобрать неполное сообщение > '{"one": "1", "two": "2", "three": " 3 "," four ":" 4 "} 'Буфер, как правило, правильный, и печать буфера работает. – Arnould
Я хочу, чтобы Arduino запускался при запуске программы Python. Таким образом, программа python откроет последовательный порт в какой-то случайный момент времени, возможно, в середине предложения, которое отправляется в малину. Таким образом, ошибки могут возникать при анализе незавершенных строк JSON. –