Activer 1 port GPIO via 1 page HTML

Bonjour,

 Je souhaite allumer 1 led sur 1 des ports du GPIO en cliquant sur une image grâce à la commande

«  »
J’ai créé 1 fichier html « portail.html » ainsi qu’un fichier python « portail3.py », lorsque j’exécute ce dernier sous Linux via IDLE, il fonctionne parfaitement, j’ai relié 3 led à mon port GPIO et je peux les allumer lorsque je fais appel à leurs fonctions (dont une s’appelle « ouverture() ».
J’essaie en vainc de lancer cette fonction qui se trouve donc dans un fichier python lorsque je clique sur une image qui elle se trouve dans un fichier HTML.
Qui pourrait me dire si cela est possible et quelle est la méthode la plus appropriée.
Mon objectif final est de pouvoir ouvrir mon portail via mon smartphone via le raspberry utilisé comme serveur web
Merci!
Nicolas

Je viens de m’apercevoir que m’a commande HTLM n’est pas indiquée certainement à causes des balises:
A HREF="…/portail3.py(ouverture(1))"><IMG SRC=« ouverture.jpeg » title=« Ouveture du Portail » border=« 3 » style=« border-color:#3a3a3a » width=« 50% »

Désolé
Nicolas

Ton problème n’est pas très compliqué, mais faire cela nécessite de faire TRES attention du point de vu de la sécurité.

Points pour avancer:

  • tu ne peux pas demander un fichier python directement dans ta page, tu va avoir le texte de ton fichier et il ne sera pas exécuter. Il faut que tu comprenne bien la partie Client (frontend) et la partie serveur (backend) d’une page web.
  • il te faut un service en backend. Une simple page html ne fait aucune action sur un serveur. Il faut donc que tu ai des bouton sur ta page qui font des action. Le PHP te permet d’exécuter des fichier comme par exemple la fonction exec. A ta place j’aurais plutôt fait un mini service web en Python (ex : Flask) comme ça tu n’as pas besoin d’exécuter des fichier extérieurs.
  • Je parlais de la sécu car les GPIO nécessitent d’avoir les droits root. Soit sur que tu ne puisse pas détourner les commandes de ta page pour exécuter n’importe quoi !

Az

Bonjour Azlux,

Merci pour ton aide!
J’ai déjà créé en Python 1 webserver en utilisant Tornado et je peux me connecter à distance sur mon raspberry. J’ai défini 1 adresse fixe pour mon Raspberry et ouvert 1 port specifique afin d’éviter que tout le monde puisse se connecter. J’ai créé 1 autre programme également en Python qui permet d’allumer / éteindre des led via le GPIO afin de simuler l’ouverture / fermeture de mon portail.v Là ou je sèche actuellement c’est comment faire en sorte que lorsque je clique sur 1 image de mon site web, ma fonction « ouverture_portail » située ds mon fichier « portail.py » s’exécute.
Dois je créer 1 fichier php, ou/et puis je le faire via le web server; si j ai bien compris ta réponse les 2 sont possibles?

Nicolas

Si tu sais faire un web serveur en python (wow, tornado est assez complexe pour débuter je trouve), il vaux mieux l’utiliser. Tu sera quitte de faire des appels de PHP vers Python.
Dans ta fonction qui répond à un une méthode spécifique (GET /start_gpio par exemple) fait simplement un import .portail.py puis appelle ta fonction qui allume tes GPIO.
Dans ta page d’accueil il ne te reste plus qu’a faire un bouton pour y accéder. et Voilà

Merci pour tes conseils Azlux!

Ce WE, j’ai un peu avancé; ds mon webserver Tornado, j’ai fait appel à une des fonctions de mon fichier portail.py et ça marche; lorsque je lance la fonction « ouverture_portail », la led du GPIO correspondante s’allume bien; voici les bouts de codes que j’ai rajouté:
import portail5 #nom du fichier python a faire appel sans l extension « py »
if name == « main »:
print(« Server running »)
print(« Press ctrl + c to close »)
portail5.ouverture(1)
application.listen(xxxx) #(xxxx) n° du port à utiliser
tornado.ioloop.IOLoop.instance().start()

bon pour l’instant dès que je lance mon webserver, mon portail s’ouvre…, mais ce n’est qu’un début; l’idée que j’ai pour poursuivre et de rajouter 1 condition avec 1 variable qui change d’état lorsque je demande d’ouvrir mon portail.
Ma page index (déjà créée) contient 3 images avec liens hypertextes dont 1 représentant mon portail, lorsque je clique sur cette dernière, une 2em page HTML s’ouvre et 3 autres images apparaissent; chacune d’entre elles correspond à 1 action que devra effectuer mon portail (ouverture, fermeture & ouverture piéton). Bon but final est de lancer une des 3 fonctions créées dans mon fichier portail.py en fonction de l’image qui est « cliquée ».
Via le HTML, impossible de réaliser cela; par csq, je me suis dit qu’il faut que je crée 1 page PHP pour faire le lien entre le clic suer l’im

désolé, mauvaise manip, j’ai cliqué sur « répondre »…je reprends:

Via le HTML, impossible de réaliser cela; par csq, je me suis dit qu’il faut que je crée 1 page PHP pour faire le lien entre le clic sur l’image et l’appel à la fonction correspondante située dans mon fichier portail.py mais pouvant être utilisée dans mon webserver (programmé également en python)
Je pense utiliser la méthode suivante: lorsque je clique sur 1 image du fichier php (que je n’ai pas encore créé mais qui remplace mon fichier « portail.html » déjà créé), 1 variable située ce fichier change d’état et cette variable est utilisée dans mon webserver (fichier python) pour lancer la fonction « ouverture portail ».
Est-ce une méthode qui peut fonctionner, existe t’il une méthode + appropriée?

Nicolas

ça peux être possible. Debian utilise pas mal cette méthode avec les lock (fichier vide qui fini par .lock) pour dire qu’une action est autorisé.
Mais je reste persuadé que tu t’embête pour rien. si tu as un serveur python qui marche, fait tout avec celui ci. Et si tu comprend pas bien les interactions possibles avec tornado, je te conseille grandement Flask. Car tout ce que tu me dit est largement possible avec python seulement.