Problème communication série USB entre Arduino et RPI3

Bonjour,

Je bloque depuis un moment sur un problème de communication sur le port série en USB entre mon arduino et le RPI3.
Je suppose que c'est un problème de débutant (que je suis) mais je n'arrive pas à comprendre malgré mes recherches.

Mon contexte est le suivant :
J'ai réalisé un petit montage avec une sonde de distance à ultra-son HC-SR04.

Le sketch coté Arduino récupère cette donnée et après conversion en centimètre l'envois sur le port série.
Je vous passe les détails mais en gros c'est :

void setup() {

blablabla ...

// Initialise port serie
Serial.begin( 1200 );
Serial.println( "Setup done" );
}

void loop() {

blablabla ...

// Calcul la distance d = t*v/2 (t en us ) et envois sur port serie
distance = mesure * vitesse_son / 20000 ; // conversion pour avoir des cm
int arrondi = int( distance );
Serial.print( "Distance=" );
Serial.println( arrondi, DEC );
delay( 1000 );
}

Coté Raspberry j'ai écris un script python tout bête :

#!/usr/bin/python

-- coding: utf-8 --

import sys
import time
import serial

print( "Debut" )
ser = serial.Serial( "/dev/ttyACM2", 1200, timeout = 1 )
time.sleep( 4 )

while True:
print( ser.readline() )
time.sleep(1)

Quand l'Arduino est connecté à mon PC et que je reçois les données sur le moniteur série de l'IDE tout s'affiche correctement.
Par contre quand je suis connecté sur le port USB du Raspberry j'ai toujours les soucis suivants :

  • Toutes les chaines de caractère que je reçois s'affichent avec un b devant. Par exemple :
    b'Distance=360\r\n'
    b'Distance=360\r\n'
    b'Distance=362\r\n'
    Que signifie ce b et pourquoi je ne l'ai pas sur le moniteur de l'IDE arduino ?

  • Le problème le plus important est celui là : Les données s'affichent un certain nombre de fois mais au bout d'un moment je ne reçois plus que des chaines vides :
    b''
    b''
    b''
    b''
    Cela se produit toujours entre 30 secondes et une minute. Donc environ 30 à 60 mesures.

  • Et derniere question : parfois le RPI ne reçois pas la chaine complète. Par exemple :
    b'istance=360\r\n'
    Il manque le "D" de Distance.

D'avance un grand merci à tous ceux qui pourront m'aider.

Campeaux

Petite précision :

  • L'arduino est connecté au raspberry via un HUB USB autoalimenté.
  • Dans les log de dmesg j'ai la ligne suivante plusieurs fois :
    cdc_acm 1-1.2.1:1.0: failed to set dtr/rts

bonjour,
normal je dirais que tu ais des chaines vides

time.sleep( 4 ) ===> toutes les 4 secondes
time.sleep(1)

delay( 1000 ); ==> toutes les secondes

donc ca bug à un moment donné

Merci pour ta réponse.
Le problème n'est pas que j'ai des chaines vides mais je n'ai plus QUE des chaines vides.
J'ai essayé de supprimer le sleep( 1 ) mais cela ne change rien.
Au bout d'un 40aine de réception qui semblent correctes mon programme python n'affiche plus que des chaines vides. Quand je le relance sans intervenir coté Arduino j'ai à nouveau quelques données puis plus rien ...

voilà ce que je mets comme info pour récupérer sous nunux des données

import serial
ser = serial.Serial('/dev/ttyACM0',9600)
# cette info est donnee par l'interface java arduino
print ser
while True:  #mettre autre condition, un compteur par exemple
    x = ser.readline()          # read one byte
    print "data", x
    with open("output.txt", "a") as fichier:
   	x = ser.readline()          # read one byte
        mycollapsedstring = ' '.join(x.split())
        #print mycollapsedstring.split(':')
	fichier.write(mycollapsedstring)
        print"ecriture ok"
fichier.close()
ser.close()

Merci infobarquee pour ta réponse.
Ton code correspond à ce que j'ai de mon coté.
Peux tu me dire si tu connecte l'Arduino directement sur un port USB du RPI ou si tu passes par un Hub USB ?

J'ai un peu avancé dans mon problème.
Déjà en connectant l'Arduino directement sur un des port USB du RPI : sans passer par mon HUB.
Ensuite en remplaçant un Serial.println( "texte" ) par Serial.print( "texte\n" )

Avez vous déjà rencontré des incompatibilités avec des HUB USB ? Y en a t'il qui soient compatibles et que vous pourriez me recommander ?

J'ai déjà utilisé tout un tas de hub USB à 2 balles trouvés en grandes surfaces et je n'ai jamais eu d'incompatibilité.
Par contre, ton problème pourrait être causé par une alimentation instable.
Les capteurs ultrason consomment pas mal de courant lors de l'émission ce qui pourrait être problèmatique. Il faut t'assurer que l'alimentation du hub délivre assez de courant. Et qu'elle ne s'écroule pas en charge.