Accueil > GNU/LINUX & RASPBERRY PI > 2ème partie. Commande PIFACE DIGITAL via interface web [Raspberry PI + (...)

2ème partie. Commande PIFACE DIGITAL via interface web [Raspberry PI + lighttpd + fastcgi + python]

dimanche 6 décembre 2015, par thebault

Présentation

Dans l’article précédent, avec l’utilisation de CGI, j’avais des problèmes de décalage temporel entre les cliques sur la page web et l’action sur la carte PiFace. Dans cet article, je vais commander la carte PIFACE avec lighttpd + Fastcgi + python afin de réduire ce décalage au minimum.

Avec Fastcgi, le fonctionnement est différent : au lieu de lancer un script par action sur la page web (et relancer python à chaque fois), on va utiliser un seul programme python. Ainsi, ce programme fonctionne de la manière suivante :
- il est lancé au démarrage du serveur web lighttpd,
- il reçoit les "ordres" via la méthode GET (les ordres sont encapsulés dans l’URL. Exemple : http://adresse_ip_raspi/cgi-bin/programme.py?action=d provoquera l’action correspondante à "d")

Configuration du serveur lighttpd

installer le serveur web lighttpd (depuis un terminal) :

$ sudo apt-get install lighttpd

Ce dernier intègre le module fastcgi. Pour le configurer, il faut éditer le fichier /etc/lighttpd/lighttpd.conf. On va indiquer que l’on utilise le module mod_fastcgi et que le programme python est "programme.py".
Pour éditer ce fichier :

$ sudo nano /etc/lighttpd/lighttpd.conf

/etc/lighttpd/lighttpd.conf

server.modules = (
       "mod_access",
       "mod_alias",
       "mod_compress",
       "mod_redirect",
       "mod_fastcgi",
)

fastcgi.debug=1
fastcgi.server              = ( ".py" => (
                              "python-fcgi" =>(
                                "bin-path" =>  "/var/www/cgi-bin/programme.py",
                                "socket"   =>  "/tmp/python.socket",
                                )))

server.document-root        = "/var/www"
server.upload-dirs          = ( "/var/cache/lighttpd/uploads" )
server.errorlog             = "/var/log/lighttpd/error.log"
server.pid-file             = "/var/run/lighttpd.pid"
server.username             = "www-data"
server.groupname            = "www-data"

On ne va pas redémarrer le serveur web car il faut d’abord s’occuper du programme en python.

Le programme en python "programme.py"

On va utiliser les bibliothèques suivante :
- pifacedigitalio : pour commander la carte PiFace,
- WSGIServer : permet le dialogue entre python et fastcgi
- urlparse : pour récupérer les ordres de commande dans l’url.

Pour utiliser WSGIServer, il faut installer la bibliothèque flup :

$ sudo apt-get install python-flup

Pour éditer le programme :

sudo nano /var/www/cgi-bin/programme.py

/var/www/cgi-bin/programme.py :


  1. #!/usr/bin/python
  2.  
  3. import pifacedigitalio as p
  4. from flup.server.fcgi import WSGIServer
  5. import urlparse
  6.  
  7. # l'ensemble de notre programme se trouve dans la fonction app
  8. def app(environ,start_response):
  9. # reponse html, on n'affiche rien.
  10. start_response("204 No Content", [("Content-Type", "text/html")])
  11. # recupere les champs de requete html
  12. i = urlparse.parse_qs(environ["QUERY_STRING"])
  13. # flup attend une chaine de caractere en retour de la fonction.
  14. # On envoie donc un espace
  15. yield (' ')
  16.  
  17. if "action" in i: #si dans l'url (partie requete) il y a le champs "action"
  18. if i["action"][0] == "g": # commande sortie 1
  19. p.digital_write(0,0)
  20. p.digital_write(1,1)
  21.  
  22. elif i["action"][0] == "d": # commande sortie 0
  23. p.digital_write(0,1)
  24. p.digital_write(1,0)
  25.  
  26. elif i["action"][0] == "s": # reset
  27. p.digital_write(0,0)
  28. p.digital_write(1,0)
  29.  
  30. p.init()
  31.  
  32. # flup s'occupe de communiquer avec le serveur web et permet de lancer la
  33. # fonction "app" en transmettant l'url
  34. WSGIServer(app).run()

Télécharger


On va maintenant rendre ce programme exécutable puis lancer le serveur web :

$ chmod 755 /var/www/cgi-bin/programme.py

Tester le programme

Si cela n’a pas encore été fait, il faut que www-data appartienne aux groupes spi et gpio


$ sudo gpasswd -a www-data spi

$ sudo gpasswd -a www-data gpio

Pour tester ce programme, il suffit de saisir les url suivante dans le navigateur :
- http://adresse_ip_raspberry/cgi-bin/programme.py?action=g
- http://adresse_ip_raspberry/cgi-bin/programme.py?action=d
- http://adresse_ip_raspberry/cgi-bin/programme.py?action=s

La page index.html

JPEG - 44.9 ko

Pour l’éditer :

$ nano /var/www/index.html

/var/www/index.html


  1. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN">
  2. <title>WEB PIFACE</title>
  3. <script Language="Javascript">
  4.  
  5. function droite()
  6. {
  7. document.location="cgi-bin/programme.py?action=d";
  8. }
  9. function gauche()
  10. {
  11. document.location="cgi-bin/programme.py?action=g";
  12. }
  13. function stop()
  14. {
  15. document.location="cgi-bin/programme.py?action=s";
  16. }
  17.  
  18. </head>
  19.  
  20. <H1>CONTROLE DU PIFACE</H1>
  21. <img src="gauche.png" onmousedown="gauche()" onmouseup="stop()">
  22. <img src="droite.png" onmousedown="droite()" onmouseup="stop()">
  23. <br>
  24. </body>

Télécharger


JPEG - 44.9 ko
SPIP | | Plan du site | Suivre la vie du site RSS 2.0
Habillage visuel © digitalnature sous Licence GPL