script python pour connexion série arduino

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 [0]
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 ?

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

oups désolé pour l'oublie de `` 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 :

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))

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

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.

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.

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()

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);
}/>

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

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

     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.

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

okay désolé je n'avais pas regardé :slight_smile:

Comme tu peux le voir, l'application tk se termine par :

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 : tkinter - python code for serial data to print on window. - Stack Overflow