fonctionnement eratique du port GPIO avec PYQT5

Vous avez réalisé ou vous voulez réaliser un truc impensable avec votre Raspberry Pi ? Cet endroit est pour vous...

Modérateur : Francois

Répondre
JBaill
Messages : 24
Enregistré le : jeu. 14 juil. 2016 10:36

fonctionnement eratique du port GPIO avec PYQT5

Message par JBaill » jeu. 5 janv. 2023 13:45

bonjour,
Je développe une application de contrôle commande qui comprend des mesures de température avec des sondes 18B20
une partie chronomètre et enfin une séquence d' entrée sortie sur le GPIO
j'ai utilisé qt5designer pour faire un bel écran graphique avec des QLcdnumber pour les températures et le chrono
et 2 qPusbutton pour la commande de séquence.
le chrono et les mesure de température se font par deux Threads un qui tourne en permanence et rafraichi les valeurs


la séquence est très simple le premier bouton est activé par click sur le premier bouton je monte la ligne 15 a 1 et j’attends un retour sur l'entrée 27 pour éteindre la ligne 15
la ligne 15 descent et le bouton est invalidé et le second bouton est activé
clik sur le second bouton provoque séquence suivante monte la ligne 18 puis la ligne 23 100ms après les maintiens à 1 pendant 500 ms et et tout s’éteint le bouton est invalidé et le chrono se déclenche
pendant un certain temps programmable (decompte affiché par un lcd number) puis la séquence se réinitialise et active de nouveau le premier bouton .

le dysfonctionnement que je constate c'est qu'a la deuxième séquence les lignes 18 et 23 se rallume 3 fois (donc 3 fois la séquence)
puis 6fois de suite puis 12 fois et l'&affichage du chrono démarre a une valeur différente puisqu'il s'est déclenché a la première série ..
je suis surement une buse en python mais j'avoue ne pas comprendre bien sur cette séquence programmé en python sans qt fonctionne parfaitement (avec des déclenchement sur des entrée GPIO)
le module Rpi GPIO as t il un bug avec PyQT5
je sais qu'il existe un nouveau module de gestion du GPIO qui se nome RPIO je vais essayé avec ..
Quelqu'un a t il eu déjà ce genre de problème??
J'ai crée d'autre application avec des contrôles simultané et des Threands (thermostat par exemple) mais je n'ai jamais eu de tel dysfonctionnement

j'ai reprogrammé de plein de façon differente (avec des Threads pour les sequences des sous programmes) mais j'ai toujours le même résultat



je suis en buster sur un raspberry pi B +

merci de vos lumières

cordialement

Jacques Baillargeat

piper
Raspinaute
Messages : 645
Enregistré le : sam. 5 juin 2021 18:57

Re: fonctionnement eratique du port GPIO avec PYQT5

Message par piper » ven. 6 janv. 2023 15:14

Bonjour, je n'ai jamais utilisé PyQT5.
Depuis la "mise au placard" de wiringpi, je suis passé à RPIGPIO pour Python
Son utilisation ne m'a pas posé de problème , tu pourrais essayer sauf si cela t'impose de tout réécrire

Par contre, depuis 30 ans je suis un fan de Pascal, Free Pascal, Delphi que je continue d'utiliser régulièrement.

Pourquoi je te parles de ça ? Parce que la dernière version de Lazarus (C'est un "visual Free Pascal Object") , qui est multi OS (Windows, Linux, Mac) exploite Qt5
Et il se trouve que depuis cette version de Lazarus en Qt5, j'ai rencontré un problème qui ressemble au tien.

J'explique :
Donc j'avais un code, il y a un server TCP en Thread, s'il reçoit une commande particulière, il lance un timer dans une autre thread et au bout du décompte, un évènement se produit..
Avec l'ancienne version de Lazarus, tout fonctionnait très bien (depuis des années)
En compilant avec la nouvelle version (sous Qt5) : l'évènement du timer ne se déclenche plus ou de manière erratique si le démarrage du décompte du temps est démarré dans le "onexecute" du thread du server TCP. J'ai eu beau forcé la synchronisation des évènements : rien n'y a fait. Mais si je sors le démarrage du décompte du Thread TCP, ça fonctionne !
J'ai été obligé de développer mon propre objet TTimer à moi pour que mon code puisse fonctionner avec cette nouvelle version avec démarrage du décompte dans le Thread du serveur TCP.

Cette petite plaisanterie m'a pris 3 jours de recherche avant que je me décide à faire autrement pour résoudre moi-même le problème.
Alors est-ce lié à Qt5 ?
Ou est-ce que le bug est dans l'objet de mon thread TCP server ? je ne sais pas exactement.
Mais ce que je sais c'est que avec Lazarus des anciennes versions ça fonctionnait.
3 Pi4 : Emby / Samba , Librelec, Android TV
3 Pi3 : Hifiberry /OSMC, Games station, Samba / VPN / HotSpot Wifi
2 Pi2 : RFID, radio reveil (PiReveil)
1 Pi0 : traker GPS et acquisitions
1 Pi0 2W : tests divers
5 Arduinos dont 4 nanos et 1 Mega
1 ESP32

JBaill
Messages : 24
Enregistré le : jeu. 14 juil. 2016 10:36

Re: fonctionnement eratique du port GPIO avec PYQT5

Message par JBaill » ven. 6 janv. 2023 19:00

bonjour,
Tout d 'abord merci de ta réponse.
Cette plaisanterie m'occupe depuis plusieurs mois .... mais j'ai tout mon temps,
j'ai vu que RPIO est un nouveau gestionnaire de GPIO en python...

qt5 designer c est vraiment facile a utiliser et j'ai fait plein d'appli qui fonctionne très bien avec de beau écrans fabriqués en 10 minutes max mais le problème que je rencontre la est vraiment curieux .
J'ai fait par exemple une commande de pompe à chaleur avec deux groupes à gérer en régulation avec des séquences de démarrage d’arrêt d'inversion bref quelque chose de bien plus compliqué que cette appli en plus avec un pi zero sans wifi (c est peut être cela qui coince) et je n'ai jamais rencontré ce genre de problèmes . c'est uniquement dans ce cas ....
ce n'est pas le timer ni les threads car le problème est antérieur avec une version de départ très simple
ca sent le conflit entre le gpio et un autre module j'ai déjà eu des histoires comme cela en d'autre temps (avec des DEC PDP11 en assembleur + Fortran sur des commandes en DMA ....
comme je suis en buster je vais essayer avec la dernière version d'os .
et surtout RPIO que je n'arrive pas a installer en python3 ..,..??(du moins avec buster ) qui visiblement gère les DMA et les interruptions...
belle soirée et encore merci de tes conseils je vais mettre les mains dans le cambouis...
je ne manquerai pas de diffuser la solution (si il y a )

piper
Raspinaute
Messages : 645
Enregistré le : sam. 5 juin 2021 18:57

Re: fonctionnement eratique du port GPIO avec PYQT5

Message par piper » ven. 6 janv. 2023 23:35

Tu utilises encore buster.
Moi aussi j'étais du genre a ne pas me préoccuper des changements de version d'OS ,là : je déchante gravce de cette erreur

J'ai un peu partout des projets en prod H24 depuis 5,7 , 10 ans.
Avec une porte d'entrée ssh sécurisée pour d'éventuelles mises à jour.
Et ... pas de mise à jour à faire : tout fonctionne.
Et puis un jour, il faut rendre ces bébés compatibles avec une autre périphériques.
Donc tu simules l'installation chez toi et tu adaptes le code.
Tout est ok ? super, tu peux livrer.

Et là, c'est le drame :
Tu as un Pi qui est sous Wheezy en python2.7 et python 3.2, à 800km de chez toi.
Ton code nouveau code n'est compatible que pour python3, il faut installer des modules :
Ah pip3 n'est pas installé, tu veux l'installer : pas possible , les dépots ne sont plus accessible pour mettre à jour wheezy.
Tu trouve la bonne url pour les dépôts du jurassique ....cool, tu installes pip3, ça marche.
Tu veux installer les modules manquant : marche pas, il paraît qu'en python3.2, ce n'était pas SSL et maintenant il le faut.
OK, tu changes ça, ah, mais ta verion de open ssl n'est pas compatible avec les nouveaux certificats ...
Ah, mais la version de openssl qu'il te faudrait n'est pas sur les dépôts de wheezy.....
etc... etc... etc....
Par dessus le marché, sur wheezy, il n'y a pas systemd, tes scripts d'installations tout beaux ne sont pas exploitables : ils sont basés sur systemd
Et outre les très gros changements de syntaxes entre python 2.x et 3.x, il y en a aussi et pas des moindres entre 3.2 et 3.3 et entre 3.6 et 3.7
Et chez les clients, tu n'as que des nanards pas mis à jour depuis au moins 5 ans : forcément, tout fonctionnait parfaitement.

Bref, tu te demandes si tu tentes, à la grâce de dieu, un upgrade complet de l'OS à distance (attention danger, le truc est supposé fonctionner H24, si dans 1h c'est planté, aïe)
En plus la carte SD a 10 ans et tu te dis, bon dieu, si là elle plante....
Voilà où j'en suis à ne pas faire de mise à jour d'OS.


Donc maintenant, je mets mes OS à jour au fur et à mesure.
Quelle saloperie Debian, Sur Fedora dont une nouvelle version de l'OS est mise en ligne 2 fois par an !! on peut toujours s'en sortir même avec une vielle version de l'OS.
3 Pi4 : Emby / Samba , Librelec, Android TV
3 Pi3 : Hifiberry /OSMC, Games station, Samba / VPN / HotSpot Wifi
2 Pi2 : RFID, radio reveil (PiReveil)
1 Pi0 : traker GPS et acquisitions
1 Pi0 2W : tests divers
5 Arduinos dont 4 nanos et 1 Mega
1 ESP32

JBaill
Messages : 24
Enregistré le : jeu. 14 juil. 2016 10:36

Re: fonctionnement eratique du port GPIO avec PYQT5

Message par JBaill » lun. 9 janv. 2023 13:32

Bonjour,

Et bien même avec la dernières version d'os rien de nouveau ... mais j'ai déjà une piste le QPushbutton .

Comme mon programme se reboucle le pushbutton conserve le nombre de click et re-execute autant de fois la procédure
j'ai crée une appli très simple avec un seul bouton en utilisant le même morceau de programme pour la commande du GPIO
et je retrouve le même problème .... j ai essayé plusieurs type de rebouclage même avec __init__
le phénomene se reproduit ...
RPIO ne fonctionne pas avec les raspberry 3
et je ne n'ai pas trouvé de commande qui réinitialise les QPushbuttons (du moins le nombre de click )
donc mis a part relancer le programme pas de solution ....
faut que je m' écrive un pushbutton spécifique ou que je revienne des commandes par le GPIO c est à dire par bouton poussoir
flûte....
bon au travail!!!

JBaill
Messages : 24
Enregistré le : jeu. 14 juil. 2016 10:36

Re: fonctionnement eratique du port GPIO avec PYQT5

Message par JBaill » mer. 11 janv. 2023 15:50

Bonjour,

Bon et bien j'ai la solution.....peu élégante mais fonctionnelle

j empêche une seconde boucle (et aussi les autres avec un drapeau (une variable booléenne) remis à zéro a la fin de la procédure
mais cela ne me dit pas pourquoi il y a plusieurs boucles dont le nombre augmente à chaque nouvelle itération
.... ni pourquoi cela ne concerne que la seconde partie de la procédure ....
bref mystere de Rpi-GPIO avec QT designer
j'avais pourtant l'impression d'avoir déjà essayé cet ruse en Buster
mais avec la whezzy peut être est-ce différent .....

enfin merci a celui qui a pris la peine de me répondre
je vous parlerai bientôt d'un calculateur d'injection et allumage pour une moto de course a base de raspberry PICO

bonne continuation à toutes et tous

Jacques Baillargeat

piper
Raspinaute
Messages : 645
Enregistré le : sam. 5 juin 2021 18:57

Re: fonctionnement eratique du port GPIO avec PYQT5

Message par piper » mer. 11 janv. 2023 18:41

Cela me fait penser au brouillement des évènements , phénomène contre lequel, dans les années 1990, on était mis en garde sur le langage Paradox (oui, Paradox n'a pas été qu'une base de données relationnelle SQL mais aussi un langage de programmation d'application.... ça date). Bref, le traitement d'un évènement pouvait le redéclencher ce qui déclenche une sorte de boucle sans fin.
A ne pas confondre avec le bouillonnement des évènements en javascript, qui lui est utile, il sert à faire remonter les évènements vers le haut de l'arborescence.
3 Pi4 : Emby / Samba , Librelec, Android TV
3 Pi3 : Hifiberry /OSMC, Games station, Samba / VPN / HotSpot Wifi
2 Pi2 : RFID, radio reveil (PiReveil)
1 Pi0 : traker GPS et acquisitions
1 Pi0 2W : tests divers
5 Arduinos dont 4 nanos et 1 Mega
1 ESP32

Répondre

Retourner vers « Utilisateurs avancés »