Plusieurs “Boutons Poussoirs”
Modérateurs : Francois, Manfraid
-
- Raspinaute
- Messages : 1089
- Enregistré le : lun. 15 août 2016 21:38
Re: Plusieurs “Boutons Poussoirs”
essais d'envois des sources dans un zip ....
CA MARCHE !!!! , t'as même pas besoin de tout recopier
CA MARCHE !!!! , t'as même pas besoin de tout recopier
Le premier ennemi de la connaissance n’est pas l’ignorance, c’est l’illusion de la connaissance (S. Hawking).
Re: Plusieurs “Boutons Poussoirs”
Yeah, ça fonctionne, merci l'ami.
Par contre, niveau ressources (cpu) c'est vraiment gourmand, mais c'est peut-être normal ?
Par contre, niveau ressources (cpu) c'est vraiment gourmand, mais c'est peut-être normal ?
-
- Raspinaute
- Messages : 1089
- Enregistré le : lun. 15 août 2016 21:38
Re: Plusieurs “Boutons Poussoirs”
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 )
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: Le top (sur un PI Zéro): Le Zip du nouveau serveur !!!!!!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
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 )
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: Le top (sur un PI Zéro): Le Zip du nouveau serveur !!!!!!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).
Re: Plusieurs “Boutons Poussoirs”
Merci, je suis impressionné, tu baragouine plutôt bien, vraiment balèze
Hyper compact, méga fluide, et superbement compréhensible; ça fonctionne à merveille ...
Voici les résultats :
Première version (serveur)
Première version (serveur + client)
Version 2
J'ai rajouté 4 boites supplémentaires grâce au p5 pinout
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
Hyper compact, méga fluide, et superbement compréhensible; ça fonctionne à merveille ...
Voici les résultats :
Première version (serveur)
Première version (serveur + client)
Version 2
J'ai rajouté 4 boites supplémentaires grâce au p5 pinout
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
-
- Raspinaute
- Messages : 1089
- Enregistré le : lun. 15 août 2016 21:38
Re: Plusieurs “Boutons Poussoirs”
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 ).
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 )
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
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 ).
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 )
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).
Re: Plusieurs “Boutons Poussoirs”
Désolé, j'ai pas mal de soucis avec internet
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 :
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
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
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
-
- Raspinaute
- Messages : 1089
- Enregistré le : lun. 15 août 2016 21:38
Re: Plusieurs “Boutons Poussoirs”
Pas de piège. Sur les PI B rev1, la GPIO27 n'existe pas. C'est la GPIO21 qui est sur la pin 13.Poster a écrit : C'est un piège ? La GPIO27 existe sur le pi, PIN13.
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).
Re: Plusieurs “Boutons Poussoirs”
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
Est-ce correct ?
Est-ce réalisable ?
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)
Est-ce correct ?
Est-ce réalisable ?
-
- Raspinaute
- Messages : 1089
- Enregistré le : lun. 15 août 2016 21:38
Re: Plusieurs “Boutons Poussoirs”
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 ), 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 ?
Je n'ais pas fait l'analyse de cablage de tes circuits (ca pique trop les yeux les bandes dessinées fritzing ), 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).