Plusieurs “Boutons Poussoirs”

Python est le langage de prédilection du Raspberry Pi

Modérateurs : Francois, Manfraid

Bud Spencer
Raspinaute
Messages : 1089
Enregistré le : lun. 15 août 2016 21:38

Re: Plusieurs “Boutons Poussoirs”

Message par Bud Spencer » mer. 31 août 2016 23:22

essais d'envois des sources dans un zip :? ....
postbud.zip
(1.23 Kio) Téléchargé 253 fois
CA MARCHE !!!! , t'as même pas besoin de tout recopier :lol:
Le premier ennemi de la connaissance n’est pas l’ignorance, c’est l’illusion de la connaissance (S. Hawking).

Poster
Messages : 9
Enregistré le : lun. 29 août 2016 03:59

Re: Plusieurs “Boutons Poussoirs”

Message par Poster » lun. 5 sept. 2016 17:57

Yeah, ça fonctionne, merci l'ami.
Par contre, niveau ressources (cpu) c'est vraiment gourmand, mais c'est peut-être normal ?

Bud Spencer
Raspinaute
Messages : 1089
Enregistré le : lun. 15 août 2016 21:38

Re: Plusieurs “Boutons Poussoirs”

Message par Bud Spencer » lun. 5 sept. 2016 23:15

Gourmand en ressource ? il doit y avoir un problème, parce que chez moi c'était insignifiant sur un pi3 avec 4 gpio en lecture. Dans le doute, j'ai fais le test sur un Pi Zéro (j'ai pas de PI B) avec 15 GPIO et ca tourne a moins 3% CPU et pas plus en %MEM. Après, ce qui peut consommer, ce sont tes subprocess suivant leurs quantités simultanés et ce qu'ils font, mais ca c'est indépendant du script.

Bon maintenant que tu as je pense compris le principe et que tu m'as obligé à modifier le code pour passer de 4 à 15 GPIO, j'en ai profité pour optimiser un peut tout ca. La je suis carrément passer en mode Picsou coté économie de ressource mais aussi en code(hé ouais ... fallait bien que je fasse tenir 3 fois plus de GPIO sur la même image :mrgreen: )

Ce qui change :
-Les listes BTx n'on plus que 2 valeurs integer, ce qui fait l'économie d'une string inutile pour chacune ( btx[n° gpio,variable de comptage])

-Comme le n° de gpio est devenu un integer dans les bt_, les GPIO.setup des inputs sont sur une seule ligne en balayant le contenu de bts. Ca evite une ligne par entrée. De plus, il ni à plus besoin de stocker l'état du bouton, cela permet de conditionner directement par la simple lecture de la gpio dans la boucle for du timer. Ces 2 changements, en plus de réduire le code et le nombre d'instruction, permettent de modifier les GPIO utilisées en entrée (en quantité et identité) juste en modifiant l'initialisation des listes bt_ et bts sans rien toucher d'autre dans le code. Je dis ca au cas ou tu voudrais pouvoir initialiser tes entrées depuis un fichier de config (database,json ou autre chose)...

-Le block 'try/except RuntimeError' a disparu dans la fonction du timer. En fait avec l'ancien programme, quand on quittait, la liste bts était vidé par le ramasse miette, ce qui provoquait une erreur dans l'exécution du thread timer et c'est cette erreur gérée qui empêchait le timer d'être réinitialisé. Désormais, le signal vide juste la liste bts ce qui met fin au processus en empêchant la réinitialisation du timer. C'est plus propre et on gagne en rapidité avec une simple condition au profit d'un bloc try qui excitait management à chaque tours.

Le code postserver2:
postmaster2.gif
postmaster2.gif (29.41 Kio) Vu 6784 fois
Le top (sur un PI Zéro):
post2top.gif
post2top.gif (31.92 Kio) Vu 6784 fois
Le Zip du nouveau serveur
postserver2.zip
(846 Octets) Téléchargé 200 fois
!!!!!!ATENTION!!!!!!
Si tu veux l'utiliser, contrôle quand même que les n° de GPIO en entrée soit bien celles qui te concerne.

************EDIT****************
A La relecture, j'ai vu que j'avais oublié le 'bt4' dans la liste bts. Pense à le rajouter, sinon il va te manquer une boite aux lettre ;)
Le premier ennemi de la connaissance n’est pas l’ignorance, c’est l’illusion de la connaissance (S. Hawking).

Poster
Messages : 9
Enregistré le : lun. 29 août 2016 03:59

Re: Plusieurs “Boutons Poussoirs”

Message par Poster » mar. 6 sept. 2016 23:18

Merci, je suis impressionné, tu baragouine plutôt bien, vraiment balèze :D
Hyper compact, méga fluide, et superbement compréhensible; ça fonctionne à merveille ...

Voici les résultats :

Première version (serveur)
Image
Première version (serveur + client)
Image
Version 2
Image

J'ai rajouté 4 boites supplémentaires grâce au p5 pinout
Image

Et maintenant, étrangement, le GPIO 4 (pin 7) fonctionne, alors qu'ils (j'ai essayé sur les 2 raspi 1b que je possède) provoquaient une erreur avec les précédents scripts ???
Je peux donc gérer 20 boites, ce qui me laisse une bonne marge.

Merci beaucoup pour ton aide indispensable et ton précieux temps ;)

Bud Spencer
Raspinaute
Messages : 1089
Enregistré le : lun. 15 août 2016 21:38

Re: Plusieurs “Boutons Poussoirs”

Message par Bud Spencer » mer. 7 sept. 2016 21:43

Bien, si ca te convient, c'est parfait ;)
Ce qui te posait problème avec la V1 c'est que j'avais mis la GPIO27 ... qui n'existe pas sur le pi1 (tu aurais dut le voir ca :shock: ).

Ce code est malgré tout très simpliste et avait surtout pour but de proposer une méthode, mais tu pourrais aller beaucoup plus loin. Voila quelques suggestions (facile) que je t'invite à expérimenter :

Déjà gérer les petites erreurs. Genre plutôt que de planter le programme si une GPIO n'existe pas ou est mal renseignée tu pourrais poursuivre l'exécution mais en affichant un message du genre 'La boite de la GPIO n° xx n'a pas été initialisée'. Faire aussi un contrôle que la GPIO utilisé pour la led n'est pas aussi dans la liste des entrées pour une boite.

Placer ta config (GPIO entrées,GPIO Led, Delais du Timer) dans un fichier de config pour pouvoir faire des modifs sans retoucher le code. Avec un fichier json, c'est juste 3 ou 4 lignes de code à rajouter et au moins autant à supprimer.

Un peu plus dur : Limiter le nombre de subprocess simultanés en créant une file d'attente. Puis aussi, quand tu quittes le programme, tu pourrais décompter et afficher le nombre de subprocess encore actifs et ne fermer la fenêtre que quand il ont tous terminé (ca servirait peut être pas a grands chose concrètement mais ca ferait vachement plus pro :lol: )

Maintenant, une suggestion plus 'hard'. Plutot que d'utiliser toutes les gpio disponibles, tu pourrais aussi faire une petite interface avec un ou plusieur expander (genre MCP23s17 ou MCP23017). Avec seulement quelques fils (5,6, 7 ...) entre ton PI et ton interface tu pourrais aller de 16 à .... plus d'une centaine de boite.

En ce qui me concerne, si je devais réaliser ce genre de truc, je pense que pour quelques octets de plus je m'offrirais la visu temps réelle sur mon smartphone et pourquoi pas un rapport quotidien par email de l'activité de toutes les boites, mais ca, c'est une autre histoire ;)
Le premier ennemi de la connaissance n’est pas l’ignorance, c’est l’illusion de la connaissance (S. Hawking).

Poster
Messages : 9
Enregistré le : lun. 29 août 2016 03:59

Re: Plusieurs “Boutons Poussoirs”

Message par Poster » mar. 20 sept. 2016 23:44

Désolé, j'ai pas mal de soucis avec internet :cry:

C'est un piège ? La GPIO27 existe sur le pi, PIN13.

Merci pour tes idées, je vais intégrer un système de logs dans les fichiers bash (facile) et pourquoi pas, en faire un compte rendu journalier.
Une fois en place, le système devra fonctionner au poil et à moins d'avoir un rapport d'erreur par mail ou ... , l'écran servira à autre chose.
Une fois en place, seule les adresses mail des destinataires pourront être amené à modifications, ce qui serra assez facile :

Code : Tout sélectionner

#!/bin/sh

SITE=/home/pi/AMail/.SITE
LOCATAIRE=/home/pi/AMail/Locataires/01.txt

EXPEDITEUR=$(sed -n '3p' "$SITE" | cut -f2 -d"=")
DESTINATAIRE=$(sed -n '3p' "$LOCATAIRE" | cut -f2 -d"=")

PROTOCOLE=$(sed -n '5p' "$SITE" | cut -f2 -d"=")
MOT2PASSE=$(sed -n '7p' "$SITE" | cut -f2 -d"=")

SUJET=$(sed -n '11p' "$SITE" | cut -f2 -d"=")

CONTENU=$(sed -n '7p' "$LOCATAIRE" | cut -f2 -d"=")
MESSAGE=$(sed -n '13p' "$LOCATAIRE" | cut -f2 -d"=")

FICHIER=/home/pi/AMail/SITE.png

sendEmail -o tls=yes -f "$EXPEDITEUR" -t "$DESTINATAIRE" -s "$PROTOCOLE" -xu "$EXPEDITEUR" -xp "$MOT2PASSE" -u "$SUJET" -m "$CONTENU" "$MESSAGE" -a "$FICHIER"

exit
Les locataires auront même droit à des message personnalisés ;)

Description du projet :

Un Raspberry Pi en mode "Kiosk" (kiosque) affichant une page web (auto-hébergé) donnant des informations sur le site industriel en question. De l'autre côté, (actuellement) 20 interrupteurs représentant les 20 boites "prioritaires" (les 20 entreprises recevant le plus de courriers, colis ...) . Le système ne sera jamais éteint, mais il redémarrera 2 fois par jour car la ram sature (et le swap aussi) quand la machine tourne plus de 6 heures.
Le top serrai de pouvoir gérer 48 boites (correspondant aux entreprises pressentes sur le site), j'ai regardé le MCP23s17 et MCP23017, et c'est pas la difficulté qui m'effraie, mais j'ai découvert le "16 matrix keypad" 6 pins + VCC et GND. Donc 3 matrix ferraient l'affaire pour un coût moindre (1,50€ pièce).

Qu'en penses tu ?
Merci encore :D

Bud Spencer
Raspinaute
Messages : 1089
Enregistré le : lun. 15 août 2016 21:38

Re: Plusieurs “Boutons Poussoirs”

Message par Bud Spencer » mer. 21 sept. 2016 20:14

Poster a écrit : C'est un piège ? La GPIO27 existe sur le pi, PIN13.
Pas de piège. Sur les PI B rev1, la GPIO27 n'existe pas. C'est la GPIO21 qui est sur la pin 13.

Au départ, quand tu parlais de 'bouton', je pensait que c'était à titre d'expérimentation et que ces 'boutons' seraient finalement remplacés par un système de commande numérique. Je ne suis pas sur que vouloir piloter ca avec de simples boutons soumis à une durée de contact qui doit être de +- 1/10 de seconde ce soit une bonne idée, ou alors, il faut avoir une sacré dextérité pour respecter le délais. Pour un pilotage manuel, tu pourrais avoir un bouton (ou un par mode) pour sélectionner le type d'envois et un appuis (sans contrôle de durée) sur le n° de boite pour valider le bon mode sur la bonne boite. Dans ce cas d'usage, une ou plusieurs matrices de boutons c'est très bien, mais il faut adapter le code qui ne sera plus valable.

Vu que la commande est censée être 'humaine', ca change complètement le raisonnement que j'aurais eu si j'avais du faire pour moi. Je n'aurais pas utilisé de gpio pour ca, mais simplement une simple application GUI locale ou déportée (ou both) , tactile ou mouseclick (ou both). Le nombre de boites possibles serait devenu infini (toutes proportion gardées) et rien a faire coté hardware.
Le premier ennemi de la connaissance n’est pas l’ignorance, c’est l’illusion de la connaissance (S. Hawking).

Poster
Messages : 9
Enregistré le : lun. 29 août 2016 03:59

Re: Plusieurs “Boutons Poussoirs”

Message par Poster » jeu. 22 sept. 2016 20:07

C'est la révision 2 ;-) (c'est ma faute, je ne connaissais pas les différences entre les révisions).

Cette fois, merci pour ton inspiration.

Je préfère utiliser un système de boutons IHM (interactions HUMAIN (c'est une femme qui l'utilisera) machine) plutôt qu'un contrôle déporté, simplement car l'interface sera dans la même pièce que les boites aux lettres et qu'il n'y a aucune raison d'installer un ordinateur (sous Linux bien entendu) dans cette pièce. Pourquoi dans la même pièce, logique.

J'ai cherché si je pouvais utiliser le double écrans, hdmi pour le kiosk et tactile pour le contrôle des boites, mais ça n'a pas l'air possible !?

Et donc ... mcp23017 & mcp23s17

Code : Tout sélectionner

MCP23017 (2, 3 pin 3, 5)
GND (pin 6)
VCC 5v (pin 4)

#IHM gestion du courrier
Interrupteur à glissière 3 positions (14, 15, 18 pin 8, 10, 12)
GND (pin 14)
LED (4 pin 7) = lettre
LED (17 pin 11) = colis
LED (27 pin 13) = special
GND (pin 9)

#IHM visiteurs, locataires permettant de changer la page affiché sur l'écran Kiosk (welcome, plan du site, annonces, événements)
Bouton poussoir (22 pin 15)
LED (28 pin 28)
Bouton poussoir (23 pin 16)
LED (29 pin 29)
Bouton poussoir (24 pin 18)
LED (30 pin 30)
Bouton poussoir (25 pin 22)
LED (31 pin 31)
GND (p5)
GND (pin 20)
VCC 5v - 3.3v (p5)
VCC 3.3v (pin 17)

MCP23S17 (8, 9, 10, 11 pin 24, 21, 19, 23)

#REBOOT (5 secondes) - SHUTDOWN (10 secondes)
Boutton poussoir (7 pin 26)
GND (pin 25)
Image

Est-ce correct ?
Est-ce réalisable ?

Bud Spencer
Raspinaute
Messages : 1089
Enregistré le : lun. 15 août 2016 21:38

Re: Plusieurs “Boutons Poussoirs”

Message par Bud Spencer » ven. 30 sept. 2016 22:13

réalisable, forcement ca l'est. Est ce la bonne méthode ?...
Je n'ais pas fait l'analyse de cablage de tes circuits (ca pique trop les yeux les bandes dessinées fritzing :mrgreen: ), mais une chose m'interpelle. Pourquoi utiliser un 23s17 et un 23017 ?
2 de l'un ou de l'autre serait plus pratique. Le 23s17 utilise une connexion SPI et le 23017 utilise de l'I2C. Ce serait donc beaucoup plus simple de n'utiliser qu'un seul type de liaison. De mémoire cet expander a 2 bit adressable, tu peux donc en utiliser 4 sur la même liaison ce qui te permet d'augmenter le nombre de boite et surtout de te passer de toutes les autres gpio. 4 x16, ca fait déjà 64 i/o avec seulement 4 ou 5 fils raccordés au PÏ, donc ca laisse de la marge pour quelques boutons autre que les boites à lettre et quelques led, non ?
Le premier ennemi de la connaissance n’est pas l’ignorance, c’est l’illusion de la connaissance (S. Hawking).

Répondre

Retourner vers « Python »