Мое предложение - использовать формат данных, который пригоден для будущего, поэтому давайте используем простой JSON.
Его стандартизированная, фитон имеет встроенную поддержку, и на Arfuino мы можем кодировать вручную без огромных библиотек
Так что здесь два готовых к использованию фрагмента для вашей кратковременной необходимости. Не стесняйтесь приспосабливаться к вашим желаниям и читать комментарии в коде, чтобы узнать больше об используемых функциях
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import serial
import time
import json
ser = serial.Serial('/dev/ttyACM0',9600)
buffer = ""
while True:
try:
buffer = ser.readline()
print buffer
data = json.loads(buffer)
print data["temperature"]
temperature = data["temperature"]
print temperature
print data["motion "]
motion = data["motion "]
print motion
print data["noise"]
noise = data["noise"]
print noise
buffer = ""
print " "
except json.JSONDecodeError:
print "Error : try to parse an incomplete message"
Со стороны Arduino мы используем глобальный массив символов для построения нашего JSON
char jsonData[256] = {'\0'}; /* Defined globally choose size large enough */
char numBuffer[16] = {'\0'}; /* Defined globally used for convering numbers to string */
// here we build the JSON
strcpy (jsonData, "{\"temperature\":\"" );
// If its an int use this command
// itoa(temperature, numBuffer, 10); // convert int DATA from sensors etc.
// For float we use this command
// dtostrf(floatvar, StringLengthIncDecimalPoint, numVarsAfterDecimal, charbuf);
dtostrf(temperature, 3, 2, numBuffer); // -> xx.xx
strcat(jsonData, numBuffer);
strcat (jsonData, "\",\"motion\":\"" );
itoa(motion, numBuffer, 10); // convert int DATA from sensors etc.
strcat(jsonData, numBuffer);
strcat (jsonData, "\",\"noise\":\"" );
itoa(noise, numBuffer, 10); // convert int DATA from sensors etc.
strcat(jsonData, numBuffer);
strcat (jsonData, "\"}");
// The JSON data looks like: {"temperature":"21.50","motion":"113","noise":"321"}
Serial.println(jsonData);
Не забудьте установить одинаковую последовательную скорость на обеих машинах (в ПО) и инициирование с одной стороны, чтобы обеспечить полную передачу JSON