Accueil > Matériel, Raspberry > Piloter les ports GPIO à partir d’un navigateur internet

Piloter les ports GPIO à partir d’un navigateur internet

Le but de cet article est de pouvoir piloter un port GPIO du Raspberry à partir d’un téléphone ou d’un iPad. Pour cela on va utiliser un module ‘web.py’. Ce module contient un serveur Web.

L’installation de ce module est la suivante :

1/ Télécharger le module en tapant l’adresse http://webpy.org/static/web.py-0.37.tar.gz

2/ Le décompresser en utilisant la commande tar –xzvf web.py-0.37.tar.gz

3/ Se positionner dans le répertoire et lancer la commande python setup.py install

Maintenant il va falloir créer une arborescence :

cd /
mkdir webpyserver
cd /webpyserver
mkdir templates
mkdir static

Le dossier webpyserver contiendra le fichier Python à exécuter; le dossier webpyserver/templates contiendra une page HTML et le dossier webpyserver/static contiendra une feuille de style au format CSS.

On va créer un programme en Python de nom gpio4.py qui permettra d’allumer ou d’éteindre une LED en utilisant le port GPIO4 du Raspberry. Ce fichier sera enregistré dans le dossier webpyserver, dont voici le contenu :

#!/usr/bin/env python
import web, wiringpi
from web import form

# definit GPIO4 en sortie
io = wiringpi.GPIO(wiringpi.GPIO.WPI_MODE_SYS)
io.pinMode(4,io.OUTPUT)

# definit la page de nom index pour le site web
urls = (‘/’, ‘index’)
dossier_web = web.template.render(‘templates’)

app = web.application(urls, globals())

# definit les boutons a afficher
ma_forme = form.Form(
form.Button("btn", id = "btnon", value = "on", html = "On", class_ = "bouton_on"),
form.Button("btn", id = "btnoff", value = "off", html = "Off", class_ = "bouton_off")
)

# definit l action a effectuer quand la page index est appele
class index:
    # utilise quand la page est demande
    def GET(self):
        forme = ma_forme()
        return dossier_web.index(forme, "Raspberry Pi control GPIO4")
   
    # utilise quand une forme web est soumise
    def POST(self):
        userdata = web.input()
        if userdata.btn == "on":
            io.digitalWrite(4,io.HIGH)
        if userdata.btn == "off":
            io.digitalWrite(4,io.LOW)
        # recharge la page web
        raise web.seeother(‘/’)

# programme
if __name__ == ‘__main__’:
    app.run()

 

Ensuite on crée un fichier de nom index.html qui sera enregistré dans le dossier templates dont voici le contenu :

$def with (form, title)
<!doctype html>
<html>
    <head>
        <title>$title</title>
    </head>
   
    <body>
        <br />
        <form class="form" method="post">
        $:form.render()
        </form>
    </body>
</html>

Maintenant il suffit de lancer la commande ‘python gpio4.py’ pour démarrer le serveur Web, puis à partir d’un navigateur de taper l’adresse IP du Raspberry en utilisant le port 8080; voilà le résultat à partir de mon iPad :

webpy

Bien sûr la présentation de la page d’accueil peut être améliorée en utilisant une feuille de style CSS.

Pour tester cela, j’ai utilisé l’article se trouvant dans le dernier numéro de MagPi.

Publicités
Catégories :Matériel, Raspberry Étiquettes : , , ,
  1. carpentier
    06/09/2013 à 09:36

    Bonjour, bravo pour vos explications très détaillées.
    Je vais à mon tour démarrer la programmation sur raspberry, étant novice, une question se pose a moi:
    Je souhaiterai pouvoir afficher du texte différent fonction des états des entrées GPIO .
    Pouvez vous me guider dans ce sens ?

    Salutations

  2. Tournoud
    10/10/2013 à 16:57

    Bonjour vos articles sont de qualités; je suis entrain de travailler avec WEBPY.

    J’ai réalisé un code réduit
    #!/usr/bin/env python
    # -*- coding: utf-8 -*-

    import web
    urls = {‘/’,’index’}
    app = web.application(urls,globals())
    class index:
    def GET(self):return « coucou »

    if __name__ == ‘__main__’: app.run()
    Le serveur démarre, mais si je visite cette URL. le raspberry me répond Not found à la place de coucou.

    Merci de m’aider MARC

    • 27/10/2013 à 10:32

      Bonjour
      Avez-vous créer un fichier de nom index.html dans le dossier template ?

  3. SySyS321
    13/02/2014 à 19:51

    bonjour,

    Tres bien votre tuto ! je ne suis pas un grand spécialiste de la programmation.

    J’ai un probleme de syntaxe dans le programme python :

    File « gpio.py », line 11
    urls = (‘/’, ‘index’)
    ^
    SyntaxError: invalid syntax

    Pouvez vous m’aider ?

    Merci

    • 28/03/2014 à 19:23

      Bonsoir il faudrait me faire parvenir le code complet

    • Altxi
      18/08/2015 à 10:02

      Bonjour,
      Tout d’abord merci pour ce tuto.
      Pour répondre à ta problématique, j’imagine que tu as fais un copier/coller du programme donné en exemple.
      J’ai eu la même erreur, j’ai du réécrire toutes les apostrophes.

  4. pupu
    07/05/2014 à 22:53

    Bonsoir, bravo c’est trés interressant, mais est ce que ca fonctionne avec une arduino ?

    • 12/05/2014 à 19:28

      Bonsoir on peut interfacer le raspberry avec l’arduino via port série, spi ou i2c et dans ce cas il serait possible de piloter l’arduino via le serveur web du raspberry

  1. No trackbacks yet.

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s

%d blogueurs aiment cette page :