Exécuter des scripts Python via l'interface Web

15

J'ai vu beaucoup de projets qui prétendent contrôler les broches GPIO, mais je veux quelque chose d'un peu différent, par exemple, pour pouvoir faire clignoter une LED.

Existe-t-il un système sur lequel, via une interface Web, je peux cliquer et exécuter un script python, par exemple "blink.py" sur ma framboise.

J.Zil
la source

Réponses:

12

Vous pouvez y arriver de différentes manières en utilisant CGI ou un autre script côté serveur. Un problème sera les autorisations d'accès aux broches GPIO. Il ne semble pas y avoir de solution propre . Actuellement, il peut être plus facile de montrer les fichiers gpio à l'utilisateur qui exécute le serveur Web, d' appeler un programme (suid) qui peut accéder aux broches ou d'avoir un démon distinct avec accès aux broches auxquelles vous pouvez envoyer des messages (signal, pipe / socket, autre ipc ...).

Pour « l' exécution d' un script python via une interface web », vous voudrez peut - être regarder web.py . C'est un petit module très soigné qui vous permet d'écrire un "service web" autonome sur un seul fichier qui pourrait faire n'importe quoi. Très pratique pour ce genre de chose IME. Ne nécessite effectivement aucune configuration ni logiciel spécial (à part l'installation Python courante et web.py lui-même). Il suffit d'écrire des gestionnaires d'URL en python, éventuellement avec des modèles html et d'exécuter. Pointez un client (navigateur, autre script, wget ..) sur le bon port et cela fonctionne. :)

Edit: Un nouveau projet repéré, serpint semble permettre de faire bouger gpio depuis une socket ou éventuellement une fausse interface de périphérique char.

XTL
la source
4
flacon semble similaire à web.py. Il y a aussi Django qui semble avoir plus de fonctionnalités - probablement exagéré pour ce projet.
Frepa
euh, pour l'accès GPIO, il suffit d'ajouter l'utilisateur au groupe gpio. Ou démarrez le serveur en tant que root, ce que la plupart des gens font de toute façon pour le port 80. Les exemples de flacons peuvent appeler des scripts ou utiliser le temps pour ajouter un sommeil entre les basculements. La caractéristique principale est {{}} dans les modèles dont je pense que l'OP n'a pas eu besoin.
mckenzm
Merci pour la mise à jour. Pour le "erm", cependant, cette réponse date de 2012, lorsque les GPIO étaient notoirement root uniquement. Je vois qu'il y a maintenant un groupe gpio, ce qui est un progrès fantastique et une façon plus correcte d'accéder au matériel.
XTL
2

Si vous débutez avec le développement web, jetez un œil à Bouteille . La bouteille est plus simple que le flacon dans le sens où il s'agit d'un framework web complet dans un seul fichier. En revanche, Flask vise à réutiliser le code sonore de différentes bibliothèques et pourrait donc être plus solide, mais aussi plus complexe.

Voici le Hello World with Bottle:

from bottle import route, run, template

@route('/hello/:name')
def index(name='World'):
    return template('<b>Hello {{name}}</b>!', name=name)

run(host='localhost', port=8080)

Exécutez-le avec:

python HelloBottle.py

Et ouvrez dans un navigateur: http://localhost:8080/hello/world


Pour rendre votre site Web accessible à partir d'autres ordinateurs, définissez hostsur 0.0.0.0dans la runméthode. La dernière ligne du Hello World ci-dessus devrait alors se lire:

run(host='0.0.0.0', port=8080)

Vous devriez maintenant pouvoir accéder à votre site Web via l'adresse IP du Pi, comme ceci: http://192.168.0.123:8080/hello/world

Voir la documentation de la bouteille sur le déploiement pour plus de détails.

Bengt
la source
Sur mon Raspberry Pi, si j'exécute, curl http://localhost:8080/hello/worldje reçois les résultats attendus. Cependant, je veux pouvoir y accéder sur mon ordinateur habituel via le réseau local. Après avoir utilisé ifconfigmon adresse IP, l'URL suivante sur mon ordinateur régulier ne peut pas établir une connexion: http://192.168.1.102:8080/hello/matthew. Je peux accéder à une autre page Web que j'ai créée à ` 192.168.1.102/home.php '. Auriez-vous une idée sur la façon dont je peux à ma page de bouteille?
Matthew Moisen
Votre home.php est implicitement accessible via le port 80 (http) essayez d'exécuter bouteille sur ce port et s'il réussit, assurez-vous qu'il n'y a pas de pare-feu entre ou sur votre bureau et le port de blocage pi 8080.
Bengt
Il s'avère que je devais changer mon IP en localhost ou 0.0.0.0
Matthew Moisen
1

Installez iPython Notebook.

rpi#> sudo apt-get install ipython-notebook ipython3-notebook

Exécutez-le ensuite:

rpi#> ipython notebook

Remarque: Vous pouvez également y accéder à partir d'un PC:
rpi #> notebook ipython --ip = 10.0.0.7
# ici 10.0.0.7 est mon IP RPi.
# depuis un autre ordinateur dans le navigateur que je tape:
http://10.0.0.7:8888

entrez la description de l'image ici

Vous verrez ceci:

entrez la description de l'image ici

Créez ensuite un nouveau bloc-notes et exécutez votre code là-bas:

entrez la description de l'image ici

Test de méthode:

entrez la description de l'image ici

Bibliographie:

http://ipython.org/
http://jupyter.org/
https://www.raspberrypi.org/documentation/usage/gpio-plus-and-raspi2/
http://maxembedded.com/2014/07/ using-raspberry-pi-gpio-using-python /

Youtube: https://www.youtube.com/watch?v=cJuF4IDMuLY

Très important:

La musique s'exécute sur RPi en arrière-plan dans le programme d'écran linux sur mps-youtube.

rpi#> sudo apt-get install python3-pip
rpi#> sudo pip3 install --upgrade mps-youtube  
rpi#> sudo pip3 install --upgrade https://github.com/mps-youtube/pafy/archive/develop.zip
rpi#> mpsyt # to start it
    # configure mpsyt to show video, player.
    mpsyt#> set show_video True
    mpsyt#> set player omxplayer
    mpsyt#> set search_music False
    mpsyt#> . lindsey stirling
    mpsyt#> 2 # to play song from a list.

Bonne chance!

Vitalie Ghelbert
la source
Votre question pourrait être améliorée ... Pourquoi installer le bloc-notes Python? Qu'est-ce que cela fait exactement? Il devrait certainement commenter les problèmes de sécurité potentiels (tels que le laisser ouvert à Internet).
Jacobm001
@ Jacobm001, pas aujourd'hui, pas maintenant. Si nécessaire, suivez la bibliographie en bas.
Vitalie Ghelbert
0

Voici un tutoriel sur la façon dont cela peut être réalisé: https://roderickvella.wordpress.com/2017/01/04/control-a-separate-running-script-from-a-web-server-python-rpi/

Joe
la source
1
Veuillez résumer le didacticiel dans votre réponse, au cas où le lien disparaîtrait un jour ou que le contenu change.
tlhIngan
Nous essayons une nouvelle politique en ce qui concerne les réponses de lien sans information uniquement ici. Si ce message n'est pas modifié pour contenir des informations qui peuvent constituer une réponse, même minime, il sera converti en Wiki communautaire en 48 heures pour simplifier sa correction par la communauté.
Steve Robillard