Go Down

Topic: script python pour connexion série arduino (Read 2109 times) previous topic - next topic

softon

salut a tous je suis en train de développer un script en python afin de récupérer les données de mon arduino et les envoyer vers uyn fichier txt pour cela j'ai commencer par écrire ceci : 

import serial #librairie serie
import time #librairie gestion du temps

# création de l'objet type serial (port usb)
port = Serial ('COM3',9600)

#ouverture de la liasion série
port.open()

#vérifie que le port est ouvert
if not (port.isopen()) :
    print ('erreur d\'ouverture du port !')
    exit(1)

else:
   
    while(port.inWaiting() !=0):
       
        line = port.readline()
        data = line.split("-")
        data2 = line.split(";")

        i = 1
        for i in range (1, 8) :
        voie(i)  = data [i-1]
        tension = data2

        courant = data2 [1]
        puissance = data2 [2]


j'ai l'impression de faire pas mal d'erreur et suis un peu perdu dans ce code quelqu'un pourrait-il m'aider ?

infobarquee

bonjour,
code entre balise code </>
ou est l'instruction pour écrire dans le fichier?
AUCUNE AIDE PAR MP

softon

oups désolé pour l'oublie de
Code: [Select]
en plus mon programme n'est pas complet je te renvoie ce dernier :  le but étant : g farbiquer 8 ampèremètres pour lesquelles je récupère la valeur de mes courants sur un arduino et je cherche à faire un script python pour récupérer mes données  :

Code: [Select]
import serial #librairie serie
import time #librairie gestion du temps

# création de l'objet type serial (port usb)
port = serial.Serial('COM1',9600)

#ouverture de la liasion série
port.open()

#vérifie que le port est ouvert
if not (port.isopen()) :
    print ('erreur d\'ouverture du port !')
    exit(1)

else:
   
    while(port.inWaiting() !=0):
       
        line = port.readline()
        data = line.split("-")
        data2 = line.split(";")

        #i = 1
        #for i in range (1, 8) :
            #voie = data [i-1]
        tension = data2 [0]
        courant = data2 [1]
        puissance = data2 [2]

    fichier = open("Reportdata.txt", "w")
    fichier.write("%s, %s, %s" % (tension, courant, puissance)) 

infobarquee

et donc le soucis se trouve ou?
que fait ton code sur l'arduino?
AUCUNE AIDE PAR MP

softon

alors pour commencer mon programme ne compile pas quand je le lance j'ai un probleme avec l'ouverture du port j'utilise la fonction "port.open()" pour cela mais on me dit à chaque fois que je lance que le port est déjà ouvert donc je ne comprend pas trop.

Mon code arduino me permet de récupérer des courants mesurer par différents appareils que j'ai pu créer et calibrer je vaux donc créer un script python me permettant d'envoyer mes données dans un fichier txt qui me permettra ensuite de les envoiyer dans un tableau excel.

infobarquee

alors pour commencer mon programme ne compile pas quand je le lance j'ai un probleme avec l'ouverture du port j'utilise la fonction "port.open()" pour cela mais on me dit à chaque fois que je lance que le port est déjà ouvert donc je ne comprend pas trop.

Mon code arduino me permet de récupérer des courants mesurer par différents appareils que j'ai pu créer et calibrer je vaux donc créer un script python me permettant d'envoyer mes données dans un fichier txt qui me permettra ensuite de les envoiyer dans un tableau excel.
ca, j'avais compris.
mais fais tu un serial print de tes données.
d'ou la demande de ton code
oui, il faut virer port.open()
AUCUNE AIDE PAR MP

softon

ah pardon excuse moi je n'avais pas compris pour repondre a tes questions oui je fai un serial.print de mes données.

j'utilise cette fonction pour lire mes données


<float custom_data(float Tension, float Courant, float Puissance)

{
  Serial.print(Tension, 3);
  Serial.print(";");
  Serial.print(Courant, 3);
  Serial.print(";");
  Serial.println(Puissance, 3);
}/>

hpatrick

#7
Apr 15, 2019, 01:06 pm Last Edit: Apr 15, 2019, 10:51 pm by hpatrick
Bonjour pour mon projet de cette année je dois concevoir une interface graphique  avec python possédant plusieurs fenêtres. Pour naviguer entre ces fenêtres je veux utilisé un détecteur de geste connecté à arduino qui me renvoi gauche ou droite en fonction de la direction de main de l'utilisateur.
 
 j'ai déjà réussi à connecté python et arduino et j'arrive à récupérer les valeurs du détecteur sur python mon problème est que je ne sais pas comment dire à ma fenêtre python que lorsqu'elle reçoit gauche elle renvoie la fenêtre précédente, droite la fenêtre suivante.


  pour l'instant python le fait mais avec des clic. Mon code pour afficher l'interface graphique est le suivant

Code: [Select]


import tkinter as tk

from PIL import ImageTk, Image

LARGE_FONT = ("verdana",12)

class SeaofBTCapp(tk.Tk):
    def __init__(self,*arg,**kwargs):
       
        tk.Tk.__init__(self,*arg,**kwargs)
        container = tk.Frame(self)
       
        container.pack(side="top", fill="both", expand = True)
        container.grid_columnconfigure(0, weight = 1)
       
        self.frames = {}
       
        for F in(StartPage, PageOne):
           
            frame = F(container, self)
            self.frames[F] = frame
       
            frame.grid(row=0, column=0, sticky="nsew")
       
        self.show_frame(StartPage)
   
    def show_frame(self,cont):
       
        frame = self.frames[cont]
        frame.tkraise()
       


class StartPage(tk.Frame):
   
    def __init__(self, parent, controller):
        tk.Frame.__init__(self,parent)
        label = tk.Label(self, text="Start Page", font = LARGE_FONT)
        label.pack(pady=10,padx=10)
       
        button = tk.Button(self , text="Visite p1",
                            command = lambda:controller.show_frame(PageOne))
        button.pack()
       
class PageOne(tk.Frame):
    def __init__(self,parent,controller):
        tk.Frame.__init__(self, parent)
        label = tk.Label(self,text ="Page one" ,font =LARGE_FONT)
        label.pack(pady=10,padx=10)
       
        button1=tk.Button(self, text="Back to home",
                          command=lambda: controller.show_frame(StartPage))
        button1.pack()
       
app = SeaofBTCapp()
app.mainloop()



    Et le code me permettant de récupérer les valeurs d'Arduino est le suivant
Code: [Select]

     import serial
"""ouverture de la liaison série"""
try:
    arduino = serial.Serial('COM12',timeout =1)
except:
    print("error port")
   
"""initialisation des variables"""
valeur=""
compt=0


"""réception des données"""
while compt<4:
    valeur=str(arduino.readline())
    valeur=valeur[2:]
    valeur=valeur[:-5]
    print(valeur)
    compt+=1


   
 merci d'avance. 

fdufnews

Bonjour,
merci de lire les consignes sur la page d'accueil du forum français
et de mettre ton code entre balises pour qu'il s'affiche correctement

hpatrick


hbachetti

Comme tu peux le voir, l'application tk se termine par :
Code: [Select]

app.mainloop()


Cela veut dire qu'elle ne te rendra pas la main tant que tu ne fermeras pas la fenêtre.

Indice : sans multi-threading, pas d'issue.

Un exemple ici : https://stackoverflow.com/questions/16938647/python-code-for-serial-data-to-print-on-window
Linux is like a wigwam: no Windows, no Gates, and an Apache inside ...

Go Up