IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Bibliothèques tierces Python Discussion :

Ré-démarrer un programme Arduino avec la bibliothèque pyserial de python


Sujet :

Bibliothèques tierces Python

  1. #1
    Membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Février 2019
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Février 2019
    Messages : 67
    Points : 42
    Points
    42
    Par défaut Ré-démarrer un programme Arduino avec la bibliothèque pyserial de python
    Bonjour,

    Avec une carte Arduino, je réalise un programme très simple : compter de un en un.....

    Je souhaite récupérer les 50 premières valeurs (donc les nombres de 1 à 50) avec Python 3.7 en utilisant la bibliothèque pyserial, les données étant exportées ensuite dans un fichier texte.

    J'utilise le code suivant et le résultat est correct.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    import serial
     
    try:
        arduino=serial.Serial("COM5", 9600)
    except:
        print("Vérifier le port série")
     
    file = open("Mesures.txt", "w+")
     
    compteur=0
     
    while compteur<51:   
     
         valeurs=str(arduino.readline())
         valeurs_propres1=valeurs[2:]
         valeurs_propres2=valeurs_propres1[:-5]
     
         print(valeurs_propres2)
         file.write(valeurs_propres2)
         file.write("\n")
         compteur=compteur+1
     
     
    file.close()
    Mon problème:

    Si je relance le programme à partir de l'IDE de Python une deuxième fois,....étant donné que le programme ne s'est pas arrêté dans Arduino, j'ai une suite de 50 autres valeurs, mais pas de 1 à 50.
    Le bouton "reset" de la carte Arduino, ne fonctionne pas lorsque le port série est utilisé par l'IDE python.....

    Donc, je voulais savoir:
    Existe-t-il une instruction en Python qui permette de se déconnecter du port série, pour que la touche "reset" de la carte Arduino fonctionne de nouveau ?
    Sinon, quel conseil avez-vous à me donner pour résoudre ce problème et réinitialiser le programme ?
    Pour le moment, je suis obligé de quitter l'IDE de Python, et le ré-ouvrir pour relancer le programme, ce qui n'est pas une solution commode. Merci.

    Cordialement,

  2. #2
    Modérateur

    Avatar de Vincent PETIT
    Homme Profil pro
    Consultant en Systèmes Embarqués
    Inscrit en
    Avril 2002
    Messages
    3 187
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Consultant en Systèmes Embarqués
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 187
    Points : 11 568
    Points
    11 568
    Par défaut
    Salut,
    Citation Envoyé par Olivier20000 Voir le message
    Le bouton "reset" de la carte Arduino, ne fonctionne pas lorsque le port série est utilisé par l'IDE python.....
    C'est quelle carte Arduino ?
    La science ne nous apprend rien : c'est l'expérience qui nous apprend quelque chose.
    Richard Feynman

  3. #3
    Membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Février 2019
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Février 2019
    Messages : 67
    Points : 42
    Points
    42
    Par défaut Carte Arduino
    Il s'agit d'une carte Arduino Mega2560 R3, Elegoo

  4. #4
    Modérateur

    Avatar de Vincent PETIT
    Homme Profil pro
    Consultant en Systèmes Embarqués
    Inscrit en
    Avril 2002
    Messages
    3 187
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Consultant en Systèmes Embarqués
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 187
    Points : 11 568
    Points
    11 568
    Par défaut
    D'après les schémas que j'ai trouvé, le bouton RESET agit directement sur la broche RESET du micro, le port série ne peut pas le bloquer. Pour faire un essai tu peux maintenir le bouton enfoncé et en toute logique le programme Python devrait être perdu (pas de réponse du micro)

    Dans le schéma ci dessous on reconnait tout en bas à gauche, rond vert, l'interrupteur qui agit directement sur le reset du micro. On trouve dans l'autre rond vert, l'anti-rebond hardware composé d'une résistance de 10k et d'une capa de 22pF. Pour info la diode D3 est mal câblée voir juste après. Dans le rond bleu le condo de 1µF sert a transformer un niveau haut de DTR en impulsion sur le RESET et a transformer un niveau bas de DTR en impulsion négative qui peut devenir dangereuse pour le microcontrôleur. Tu as peut être vu beaucoup de gens avoir des problèmes de RESET dès qu'ils veulent causer avec le Arduino depuis un programme en Python, hé bien c'est à cet endroit que ça se passe. Si on revient dans le rond de l'anti-rebond, la diode D3 aurait du être placé en parallèle du condo de 22pF pour couper la tête de cette impulsion négative.

    Nom : Capture003.PNG
Affichages : 707
Taille : 147,2 Ko


    Le schéma en plus grand https://static-resources.imageservic...ata-schema.png

    Tu as la main sur le programme Arduino ? Je crains qu'il ne va falloir faire un programme Python ou Arduino bien plus élaboré.
    La science ne nous apprend rien : c'est l'expérience qui nous apprend quelque chose.
    Richard Feynman

  5. #5
    Membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Février 2019
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Février 2019
    Messages : 67
    Points : 42
    Points
    42
    Par défaut Merci !
    Merci pour votre réponse très détaillée.
    Oui, j'ai la main sur le programme Arduino, mais pour pouvoir le modifier je dois d'abord fermer l'IDE Python....
    Sinon, j'ai droit au message "port busy" lorsque j'essaie de téléverser un nouveau code de l'IDE Arduino vers la carte...
    Si je n'ai pas d'autres solution, tant pis.....je ferme et j'ouvre de niveau l'IDE Python mais c'est vraiment pas pratique.

    Cordialement,

  6. #6
    Membre expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 873
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 873
    Points : 3 717
    Points
    3 717
    Par défaut
    Salut,

    Tout comme tu ouvres et fermes ton fichier "Mesures.txt" tu peux ouvrir et fermer ta connexion au port série...

    D'ailleurs fermer puis ré-ouvrir le port série peut être un moyen de redémarrer/réinitialiser "automatiquement" l'Arduino (de faire un reset "automatique" de l'Arduino)... Je ne sais pas si il existe un meilleur moyen...

  7. #7
    Membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Février 2019
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Février 2019
    Messages : 67
    Points : 42
    Points
    42
    Par défaut Ca a l'air de fonctionner....
    Bonjour,

    en suivant votre idée, j'ai rajouté la ligne :

    à la fin du code.

    J'ai obtenu le résultat que je souhaitais..... je peux désormais exécuter autant de fois que je veux le programme à partir de l'IDE Python....le programme est réininitialisé. Même pas besoin de "reset".
    Je peux également modifier le code arduino et le basculer vers la carte sans fermer l'IDE Python.

    Super ! Le problème semble résolu....

    Merci beaucoup.
    A chaque redémarrage

  8. #8
    Membre expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 873
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 873
    Points : 3 717
    Points
    3 717
    Par défaut
    Citation Envoyé par Olivier20000 Voir le message
    en suivant votre idée, j'ai rajouté la ligne :

    arduino.close()

    à la fin du code.
    Oui c'est bien ce qu'il faut faire... Comme pour le fichier "Mesures.txt"...

    Citation Envoyé par Olivier20000 Voir le message
    le programme est réininitialisé. Même pas besoin de "reset".
    Pas besoin de reset "manuel" en effet... Cela se fait "automatiquement" comme déjà dit...

Discussions similaires

  1. [Python 2.X] Utiliser SSLv3 avec la bibliothèque ssl en python 2.7
    Par mademm dans le forum Déploiement/Installation
    Réponses: 3
    Dernier message: 02/05/2018, 14h00
  2. programmer arduino avec simulink
    Par youssefhoky dans le forum Simulink
    Réponses: 0
    Dernier message: 01/04/2015, 20h38
  3. comment démarrer un programme.win32 avec python
    Par mr maggoo dans le forum Bibliothèques tierces
    Réponses: 4
    Dernier message: 19/12/2006, 10h49
  4. [Virtual Pascal] Programmation Win32 avec la bibliothèque OWL
    Par Alcatîz dans le forum Autres IDE
    Réponses: 0
    Dernier message: 13/01/2006, 22h26

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo