mercredi 26 novembre 2014

Reconnexion automatique du port série entre arduino et python avec pyserial

Si jamais une connexion est ouverte entre l'arduino et un programme python utilisant pyserial et que je débranche le câble, je n'arrive jamais à me reconnecter ensuite à moins de rouvrir la console arduino.

J'ai cherché une alternative en ligne de commande à l'ouverture d'arduino.
J'ai d'abord trouvé la commande screen, qui permet d'écouter ce qui arrive sur le port série (entre autres) :

screen /dev/ttyACM0 57600.cs8

La commande suivante permet ensuite de fermer cette session
Ctrl + A + k

Une autre solution plus simple et de tapper la commande

stty -F /dev/ttyACM0 57600 cs8 cread clocal

J'ai finalement inclus cette commande dans mon script python, pas très beau et cross-platform, mais ça marche :
os.system("stty -F /dev/ttyACM0 57600 cs8 cread clocal")

J'ai le même problème de déconnection reconnection avec le joystick. Pygame qui utilise SDL 1.2 ne fait pas ça de base. Mais quelqu'un dit avoir trouvé une solution, mais sans l'expliquer... Rageant.


J'ai finalement trouvé la bonne alchimie, en faisant une reconnexion automatique si aucun mouvement du joystick n'a été envoyé dans les deux dernières secondes.
Le code python correspondant est .
Le code arduino est .

3 commentaires:

  1. Salut,

    J'avais le même problème que toi et j'ai trouvé la solution ici

    Il faut ouvrir le port avec un baudrate à 0, le fermer puis l'ouvrir à nouveau avec le bon baudrate.

    Tu n'auras plus de problème de reconnexion après avoir retiré le câble.

    Cordialement,

    Rémi

    RépondreSupprimer
    Réponses
    1. Merci beaucoup pour ton conseil Rémi! Je vais tenter la manip.

      Supprimer
    2. Pour info ça marche bien. Je l'ai implémenté directement comme ça

      ser = serial.Serial(device, baudrate=0)
      ser.close()
      ser = serial.Serial(device, baudrate=baudrate)

      Supprimer