{Problème} Synchroniser valeurs de l'arduino avec la date du raspberry

Bonjour à tous,

Je tente de me faire une petite station météo.
J'ai un arduino avec un dht22, dont je lis les valeurs de température et d'humidité, et que j'enregistre dans un fichier grace à mon raspberry pi qui lit les valeurs de readln de l'arduino grace à un petit code en python :

#!/bin/env python

import serial
import datetime
import time


ser = serial.Serial(
   port='/dev/ttyACM0',
   baudrate = 9600,
   parity=serial.PARITY_NONE,
   stopbits=serial.STOPBITS_ONE,
   bytesize=serial.EIGHTBITS,
   timeout=1
     )
file_data = open('/home/pi/arduino/temp.txt', 'w+')
ser.flushInput()
time.sleep(4)
x=ser.readline()
file_data.write(x)

Dans le fichier temp.txt j'obtiens constamment les deux dernières valeurs de H et de T.

Puis à l'aide de cron je démarre un autre script, qui toutes les minutes, attribut dans un nouveau fichier la date et les deux valeurs de temp.txt

echo 'date +\%Y\%m\%d\%H\%M\%S,' && cat /home/pi/arduino/temp.txt

et mon cron :

* * * * * /usr/bin/python /home/pi/arduino/retrievedata.py >> /home/pi/arduino/out.txt 2>&1
* * * * * /home/pi/arduino/shtemp.sh >>/home/pi/arduino/temp.csv
* * * * * sudo cp /home/pi/arduino/temp.csv /var/www/html/

Le soucis étant que j'obtiens quelque chose comme ça :

20160715065502,56.80,22.50^M
20160715065602,5656.80,22.50^M
20160715065701,56.90,22.50^M
20160715065801,56.80,22.50^M
20160715065901,20160715070002,57.30,22.60^M
20160715070102,57.20,22.60^M
20160715070201,57.20,22.70^M

Avec pour première colonne la date, puis l'humidité, puis la température. Et la c'est vraiment moche.
Parfois j'ai deux dates qui se suivent (ce qui veut dire que l'arduino n'a pas envoyé les valeurs dans le fichier temp.txt, ou parfois deux valeurs qui se suivent, comme le 5656.80 d'humidité...
Comment pourrais-je rendre l'ensemble plus harmonieux, et surtout plus synchrone ?

Merci à vous tous pour vos réponses ! :slight_smile:

Vous devriez passer à la Dernière version de pySerial

.flushInput() est remplacé par reset_input_buffer() qui est bcp plus explicite... Comme vous videz tout ce qui vous a été envoyé avant de dormir 4 secondes et de lire une ligne, faut pas ensuite vous plaindre de rater des communications...

-->donc ne pas dormir (sleep), ne pas virer du contenu en provenance de l'arduino arbitrairement, analyser ce qui arrive quand ça arrive et sauvegarder dans votre fichier.

Notez aussi que

echo 'date +\%Y\%m\%d\%H\%M\%S,' && cat /home/pi/arduino/temp.txt

Sera de plus en plus lent plus vous aurez des data dans votre fichier tel point sans doute qu'au bout d'un moment vous raterez des données car le buffer série sera peut être saturé.

Plus simple d'ajouter en fin de fichier sans doute.