Bonjour à tous/toutes,
Je viens vers car j'ai un petit problème d'optimisation avec mon script Tkinter. Je vous explique un peu mon projet pour que vous compreniez la situation.
J'ai débuté la réalisation d'un terrarium automatisé à l'aide d'un raspberry Pi. Pour le moment, le raspberry gère dans ce terrarium, un thermostat (qui fonctionne en PWM pour contrôler le chauffage), une lampe led pour l'éclairage, un serveur (Nginx), la gestion d'une page web qui se met à jour régulièrement (pour afficher les paramètres du terrarium) et l'affichage d'un petit script tkinter sur un petit écran tactile (photo en bas de sujet).Comme vous pouvez le constater, le raspberry ne chôme pas. Surtout qu'étant débutant en programmation, je dois probablement faire pas mal d'erreur dans tous mes scripts qui alourdisse encore pas mal le système.
Voici comment il fonctionne, j'ouvre une fenêtre qui affiche les paramètres (photo en bas de sujet), ensuite, la fenêtre reste affichée quelques secondes (30) enfin la fenêtre s'autodétruit et se recharge. Ce que j'aimerais c'est que la fenêtre actualise les données,mais sans s'autodétruire et se recharger. J'ai cherché pas mal de temps et je pensais avoir trouvé quelque chose (fenêtre.update()). Le problème c'est qu'il actualisait bien les données mais à chaque fois dans une nouvelle fenêtre. Et au bout de quelques secondes, déjà une dizaine de pages, autant dire que ce n'est pas l'idéal.
Hélas, avec mon code actuel, je vois sur le raspberry la charge du cpu qui grimpe en flèche à chaque fois que la fenêtre est détruite et se relance. J'ai peur qu'avec l'accumulation des scripts mon raspberry ne plante à cause d'une surcharge. Je vous mets mon code en bas de page.
Merci à tous/toutes de m'avoir lu(e) jusqu'au bout (j'espère ne pas avoir fais trop de fautes d'orthographe où de grammaire).
P.S: Je tiens à préciser que je ne vous demande évidemment pas de refaire mon code, mais de me donner des petits conseils pour alléger le code.
Voici la photo :
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
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59 #!/usr/bin/env python # -*- coding: utf-8 -*- from tkinter import * import RPi.GPIO as GPIO import time GPIO.setwarnings(False) GPIO.setmode(GPIO.BOARD) pin_eclairage=18 GPIO.setup(pin_eclairage, GPIO.OUT) sensmaintemp = "/sys/bus/w1/devices/28-0000063f5603/w1_slave" # sonde du point chaud. senscoldtemp = "/sys/bus/w1/devices/28-00000650e147/w1_slave" # sonde point froid. def currtemp(): # Fonction pour aller lire la 1er sonde de température (masquer pour une meilleur visibilité) def currtempcold(): # Fonction pour aller lire la 2ème sonde de température (masquer pour une meilleur visibilité) def main (): fenetre = Tk() fenetre.geometry("320x240+0+0") fenetre.resizable(width=False,height=False) temp_froid= currtempcold() temp_chaud=currtemp() def etat_eclairage(): if GPIO.input(pin_eclairage) == 1 : return ("on") else: return ("off") eclairage = etat_eclairage() l = LabelFrame(fenetre, text="Paramètres du terrarium :") l.pack(fill="both", expand="yes") label1 = Label(l, text="Température point chaud :") label1.grid(row=1,column=1) label2 = Label(l, text="Température point froid :") label2.grid(row=2,column=1) label3 = Label(l, text="État de l'éclairage :") label3.grid(row=3,column=1) label = Label(l, text="État du chauffage :") label.grid(row=4,column=1) label = Label(l, text= temp_chaud) label.grid(row=1,column=2) label = Label(l, text=temp_froid) label.grid(row=2,column=2) label = Label(l, text=eclairage) label.grid(row=3,column=2) label = Label(l, text=etat_chauffage) label.grid(row=4,column=2) fenetre.update() time.sleep(30) fenetre.destroy() while (True): try: main() except KeyboardInterrupt: pass
Partager