Accès aux ports GPIO "pérenne" ?
Modérateur : Francois
Accès aux ports GPIO "pérenne" ?
Bonjour à tous,
Depuis longtemps branché sur Framboise314, je m'intéresse aussi au forum. J'ai appris beaucoup de choses, même si d'autres sont encore nébuleuses. En particulier la notion de droits et autorisations.
Je profite de ce message pour dire un très grand merci à François et à toutes les bonnes volontés pour l'apport inestimable que vous nous offrez. Le beau côté du WEB porté bien haut !
Je rencontre un souci à propos de l'accès aux ports GPIO. je vais essayer de faire rapide et efficace.
Je teste de petites solutions "en touriste" pour comprendre, davantage que pour une utilisation définitive (à vrai dire, commander des lampes ou du chauffage à distance ne m'apporterait pas grand-chose dans mon petit appartement
J'ai monté une petite solution sur RPi 3 basée sur le schéma suivant :
• Une interface WEB avec des images de lampes (éteintes au départ), sous lesquelles se trouvent des boutons (ON/OFF).
• Le clic sur un de ces boutons lance un script JS/AJAX qui permet de changer l'image (une lampe allumée ou éteinte suivant le cas) et d'envoyer une requête CGI vers un script CGI écrit en C, qui met les ports GPIO à 0 ou 1.
• Les ports GPIO sont reliés à de simples DELs qui simulent l'éclairage réel.
C'est assez simple mais très formateur (le CGI ne s'impose pas par rapport à d'autres solutions comme PHP mais c'est pour raisons pédagogiques, là n'est pas la question).
J'utilise la bibliothèque WiringPi en C sur Rpi 3B (Buster).
L'ensemble fonctionne bien, mais je ne comprends pas certains aspects (ou du moins j'ai besoin d'un peu d'aide pour comprendre et aller plus loin, je compte sur vous !) :
• J'ai donné les droits aux services Apache et associé l'utilisateur pi (moi) à www-data. Cela me permet d'accéder sans soucis aux dossiers www et cgi-bin. OK. Mais quid de l'accès aux ports GPIO ? J'ai fait pareil, ça fonctionne, j'ai donné les droits sur les fichiers dev/mem et dev/gpiomem pour pouvoir y accéder à ces ports (j'ai galéré avant de comprendre pourquoi l'accès était interdit à mon script CGI). Problème : dès que je redémarre le Rpi, il faut que je redonne ces droits sur la lecture/écriture des ports GPIO. Pourquoi ne sont-ils pas "mémorisés" ? Est-ce propre aux ports GPIO (parce que pas de souci avec les dossiers cgi-bin et www) ? Y-a-t-il une solution (j'ai pensé à automatiser ceci au démarrage de l'ordinateur, est-ce faisable ? est-ce une méthode souhaitable ?) Sinon, y a-t-il une autre démarche préférable pour "autoriser" durablement l'accès aux GPIO ?
• Au redémarrage, les ports GPIO reviennent à "IN" au lieu de "OUT". Est-ce possible de mémoriser et restaurer les paramètres à chaque redémarrage ? j'imagine que oui, mais je ne sais quelle démarche suivre. Ou bien une autre technique est-elle plus adaptée ?
Je vous remercie d'accorder un peu de temps à la lecture et à l'aide éventuelle que vous pourrez m'apporter !
Bonne journée à tous !
Depuis longtemps branché sur Framboise314, je m'intéresse aussi au forum. J'ai appris beaucoup de choses, même si d'autres sont encore nébuleuses. En particulier la notion de droits et autorisations.
Je profite de ce message pour dire un très grand merci à François et à toutes les bonnes volontés pour l'apport inestimable que vous nous offrez. Le beau côté du WEB porté bien haut !
Je rencontre un souci à propos de l'accès aux ports GPIO. je vais essayer de faire rapide et efficace.
Je teste de petites solutions "en touriste" pour comprendre, davantage que pour une utilisation définitive (à vrai dire, commander des lampes ou du chauffage à distance ne m'apporterait pas grand-chose dans mon petit appartement
J'ai monté une petite solution sur RPi 3 basée sur le schéma suivant :
• Une interface WEB avec des images de lampes (éteintes au départ), sous lesquelles se trouvent des boutons (ON/OFF).
• Le clic sur un de ces boutons lance un script JS/AJAX qui permet de changer l'image (une lampe allumée ou éteinte suivant le cas) et d'envoyer une requête CGI vers un script CGI écrit en C, qui met les ports GPIO à 0 ou 1.
• Les ports GPIO sont reliés à de simples DELs qui simulent l'éclairage réel.
C'est assez simple mais très formateur (le CGI ne s'impose pas par rapport à d'autres solutions comme PHP mais c'est pour raisons pédagogiques, là n'est pas la question).
J'utilise la bibliothèque WiringPi en C sur Rpi 3B (Buster).
L'ensemble fonctionne bien, mais je ne comprends pas certains aspects (ou du moins j'ai besoin d'un peu d'aide pour comprendre et aller plus loin, je compte sur vous !) :
• J'ai donné les droits aux services Apache et associé l'utilisateur pi (moi) à www-data. Cela me permet d'accéder sans soucis aux dossiers www et cgi-bin. OK. Mais quid de l'accès aux ports GPIO ? J'ai fait pareil, ça fonctionne, j'ai donné les droits sur les fichiers dev/mem et dev/gpiomem pour pouvoir y accéder à ces ports (j'ai galéré avant de comprendre pourquoi l'accès était interdit à mon script CGI). Problème : dès que je redémarre le Rpi, il faut que je redonne ces droits sur la lecture/écriture des ports GPIO. Pourquoi ne sont-ils pas "mémorisés" ? Est-ce propre aux ports GPIO (parce que pas de souci avec les dossiers cgi-bin et www) ? Y-a-t-il une solution (j'ai pensé à automatiser ceci au démarrage de l'ordinateur, est-ce faisable ? est-ce une méthode souhaitable ?) Sinon, y a-t-il une autre démarche préférable pour "autoriser" durablement l'accès aux GPIO ?
• Au redémarrage, les ports GPIO reviennent à "IN" au lieu de "OUT". Est-ce possible de mémoriser et restaurer les paramètres à chaque redémarrage ? j'imagine que oui, mais je ne sais quelle démarche suivre. Ou bien une autre technique est-elle plus adaptée ?
Je vous remercie d'accorder un peu de temps à la lecture et à l'aide éventuelle que vous pourrez m'apporter !
Bonne journée à tous !
-
- Raspinaute
- Messages : 1589
- Enregistré le : dim. 10 mai 2015 18:44
- Localisation : Dans la campagne à côté d'Annecy
- Contact :
Re: Accès aux ports GPIO "pérenne" ?
C'est normal : ne sont pas des fichiers normaux mais de pseudo fichiers créés et gérés par le kernel. Tu devais pouvoir gérer ca en créant des règles udev (je te laisse chercher).smog a écrit : ↑mar. 24 nov. 2020 08:26• J'ai donné les droits aux services Apache et associé l'utilisateur pi (moi) à www-data. Cela me permet d'accéder sans soucis aux dossiers www et cgi-bin. OK. Mais quid de l'accès aux ports GPIO ? J'ai fait pareil, ça fonctionne, j'ai donné les droits sur les fichiers dev/mem et dev/gpiomem pour pouvoir y accéder à ces ports [...] Problème : dès que je redémarre le Rpi, il faut que je redonne ces droits sur la lecture/écriture des ports GPIO. Pourquoi ne sont-ils pas "mémorisés" ?
Par contre, c'est crade car ca donne accès a la mémoire (et donc a tous) à tout ce qui passe par ton serveur web.
La solution la plus simple serait de faire un CGI qui ferait un sudo vers un utilisateur qu'a les droits d'utiliser ces fichiers (non, pas root !).
C'est aussi normal pour éviter de griller tes GPIO au démarrage.
C'est a ton programme de les initialiser correctement lors du démarrage.
A+
- BananaPI : Gentoo, disque SATA de 2 To
- Domotique : 1-wire, TéléInfo, Tablette passée sous Gentoo, ESP8266
- Multimedia par DNLA
- Et pleins d'idées ... et bien sûr, pas assez de temps.
-
- Raspinaute
- Messages : 1089
- Enregistré le : lun. 15 août 2016 21:38
Re: Accès aux ports GPIO "pérenne" ?
Des requête Ajax qui call des cgi pour piloter les gpios …. Techniquement, c’est le pire choix que tu pouvais faire pour ce genre de chose, aussi bien en terme d'efficacité que de pérennité et en plus avec WiringPi qui est obsolète et surtout dépréciée.
Jette un coup d’œil la et là. Tu vas voire à quel point les méthodes que tu utilises sont obsolètes et limitées. Il y a aujourd’hui de quoi développer des applications simples et très efficaces qui savent embarquer elles même leur propre service de publication web et qui sont en mesure de dialoguer bilatéralement et en temps réel entre elles et des client http quel qu’ils soient.
Pour l’état et la configuration des i/o, si tu veux les retrouver au démarrage, tu n’as pas d’autres choix que de les enregistrer à chaque changement (fichier, eeprom …) et de les initialiser au redémarrage.
Jette un coup d’œil la et là. Tu vas voire à quel point les méthodes que tu utilises sont obsolètes et limitées. Il y a aujourd’hui de quoi développer des applications simples et très efficaces qui savent embarquer elles même leur propre service de publication web et qui sont en mesure de dialoguer bilatéralement et en temps réel entre elles et des client http quel qu’ils soient.
Pour l’état et la configuration des i/o, si tu veux les retrouver au démarrage, tu n’as pas d’autres choix que de les enregistrer à chaque changement (fichier, eeprom …) et de les initialiser au redémarrage.
Le premier ennemi de la connaissance n’est pas l’ignorance, c’est l’illusion de la connaissance (S. Hawking).
-
- Raspinaute
- Messages : 970
- Enregistré le : dim. 28 déc. 2014 15:28
- Localisation : Le long de la côte, au dessus du pays des bigoudennes, aïe
Re: Accès aux ports GPIO "pérenne" ?
Bonjour,
https://www.raspberrypi.org/documentati ... xt/gpio.md
Oui c'est possible. Pour tout changement de configuration hardware, un seul fichier :Au redémarrage, les ports GPIO reviennent à "IN" au lieu de "OUT". Est-ce possible de mémoriser et restaurer les paramètres à chaque redémarrage ? j'imagine que oui, mais je ne sais quelle démarche suivre. Ou bien une autre technique est-elle plus adaptée ?
https://www.raspberrypi.org/documentati ... xt/gpio.md
[Pour bien commencer] Pour les nouveaux acquéreurs de Raspberry Pi (index de liens utiles)
Awesome Raspberry Pi
Awesome Raspberry Pi
Re: Accès aux ports GPIO "pérenne" ?
Beaucoup de boulot ces jours pour répondre en détail, mais très rapidement, un immense merci.
Je vais regarder tout ça. Ça me rassure sur les idées que j'avais, et me fait très plaisir de voir que je peux compter sur votre aide. C'est super sympa et très encourageant !
@BudSpencer : oui, j'imagine bien, et te remercie infiniment pour ces mines d'informations que je vais décortiquer. En fait, ma solution est inadaptée (je m'en doutais bien) mais elle me permet de mettre en œuvre AJAX et CGI sur un projet concret pour voir un peu comment ça marche, plus que pour une optimisation. Mais tes liens sont un cadeau de Noël !
Juste un truc : en C/C++ je n'avais trouvé que WiringPi pour piloter les GPIO (en fait les autres langages sont très bien, mais je souhaitais capitaliser des trucs travaillés en C). Il y en a d'autres ? Je trouve plein de bibliothèques pour Python, mais une seule pour le C...
Je vais regarder tout ça. Ça me rassure sur les idées que j'avais, et me fait très plaisir de voir que je peux compter sur votre aide. C'est super sympa et très encourageant !
@BudSpencer : oui, j'imagine bien, et te remercie infiniment pour ces mines d'informations que je vais décortiquer. En fait, ma solution est inadaptée (je m'en doutais bien) mais elle me permet de mettre en œuvre AJAX et CGI sur un projet concret pour voir un peu comment ça marche, plus que pour une optimisation. Mais tes liens sont un cadeau de Noël !
Juste un truc : en C/C++ je n'avais trouvé que WiringPi pour piloter les GPIO (en fait les autres langages sont très bien, mais je souhaitais capitaliser des trucs travaillés en C). Il y en a d'autres ? Je trouve plein de bibliothèques pour Python, mais une seule pour le C...
Re: Accès aux ports GPIO "pérenne" ?
[quote=dyox post_id=36299 time=1606305719 user_id=781]
Bonjour,
[quote]Au redémarrage, les ports GPIO reviennent à "IN" au lieu de "OUT". Est-ce possible de mémoriser et restaurer les paramètres à chaque redémarrage ? j'imagine que oui, mais je ne sais quelle démarche suivre. Ou bien une autre technique est-elle plus adaptée ?[/quote]
Oui c'est possible. Pour tout changement de configuration hardware, un seul fichier :
https://www.raspberrypi.org/documentati ... xt/gpio.md
[/quote]
Ah oui, une autre grande marche passée grâce à toi ! Merci merci !!!
PS : les BBcodes sont activés d'après les propriétés de mon compte, mais ça ne semble pas marcher... Il me dit ci-contre qu'ils sont désactivés...
Bonjour,
[quote]Au redémarrage, les ports GPIO reviennent à "IN" au lieu de "OUT". Est-ce possible de mémoriser et restaurer les paramètres à chaque redémarrage ? j'imagine que oui, mais je ne sais quelle démarche suivre. Ou bien une autre technique est-elle plus adaptée ?[/quote]
Oui c'est possible. Pour tout changement de configuration hardware, un seul fichier :
https://www.raspberrypi.org/documentati ... xt/gpio.md
[/quote]
Ah oui, une autre grande marche passée grâce à toi ! Merci merci !!!
PS : les BBcodes sont activés d'après les propriétés de mon compte, mais ça ne semble pas marcher... Il me dit ci-contre qu'ils sont désactivés...
-
- Raspinaute
- Messages : 970
- Enregistré le : dim. 28 déc. 2014 15:28
- Localisation : Le long de la côte, au dessus du pays des bigoudennes, aïe
Re: Accès aux ports GPIO "pérenne" ?
Pour les BBcodes, il faut montrer pattes blanches, soit 5 messages ; plus que 2
[Pour bien commencer] Pour les nouveaux acquéreurs de Raspberry Pi (index de liens utiles)
Awesome Raspberry Pi
Awesome Raspberry Pi
Re: Accès aux ports GPIO "pérenne" ?
[quote=dyox post_id=36302 time=1606317555 user_id=781]
Pour les BBcodes, il faut montrer pattes blanches, soit 5 messages ; plus que 2
[/quote]
Plus qu'un !
Pour les BBcodes, il faut montrer pattes blanches, soit 5 messages ; plus que 2
[/quote]
Plus qu'un !
-
- Raspinaute
- Messages : 1089
- Enregistré le : lun. 15 août 2016 21:38
Re: Accès aux ports GPIO "pérenne" ?
Rassure-toi, si tu veux faire du web, tu auras toujours l’occasion d’utiliser des requête ajax notamment pour récupérer des données sur des serveurs qui ne fournissent pas de socket web ou de grpc et pour ce qui est du c, c++, ça sert toujours aussi, mais la combinaison des 2 c’est un peu has-been surtout quand on a d’autre choix possibles (ce qui n’est pas toujours le cas). Pour WiringPI je n’ai jamais été trop fan. Trop de problèmes de versioning et (comme l’avait précisé son hauteur) pas vraiment faite pour être wrapée. De toutes façon, elle est deprecated, donc a oublier pour tous nouveau projet. Si tu cherches une lib pour du bas niveau, je te recommande vivement la bcm2835 qui est à mon sens la meilleure de toutes. Sinon depuis les kernel 4.8, tu peux directement utiliser libgpiod qui a l’avantage d’être standard.smog a écrit : ↑mer. 25 nov. 2020 16:07Juste un truc : en C/C++ je n'avais trouvé que WiringPi pour piloter les GPIO (en fait les autres langages sont très bien, mais je souhaitais capitaliser des trucs travaillés en C). Il y en a d'autres ? Je trouve plein de bibliothèques pour Python, mais une seule pour le C...
Le premier ennemi de la connaissance n’est pas l’ignorance, c’est l’illusion de la connaissance (S. Hawking).
-
- Raspinaute
- Messages : 1589
- Enregistré le : dim. 10 mai 2015 18:44
- Localisation : Dans la campagne à côté d'Annecy
- Contact :
Re: Accès aux ports GPIO "pérenne" ?
Pourquoi une librairie ? Tu peux utiliser aussi le kernel, soit par /sys/class (déprécié) ou encore par /dev/gpiochip* qui le remplace.smog a écrit : ↑mer. 25 nov. 2020 16:07Juste un truc : en C/C++ je n'avais trouvé que WiringPi pour piloter les GPIO (en fait les autres langages sont très bien, mais je souhaitais capitaliser des trucs travaillés en C). Il y en a d'autres ? Je trouve plein de bibliothèques pour Python, mais une seule pour le C...
Et ca, ca marche quelques soit le langage et la machine.
- BananaPI : Gentoo, disque SATA de 2 To
- Domotique : 1-wire, TéléInfo, Tablette passée sous Gentoo, ESP8266
- Multimedia par DNLA
- Et pleins d'idées ... et bien sûr, pas assez de temps.