Serveur Web Python simple pour afficher le statut des GPIO

Python est le langage de prédilection du Raspberry Pi

Modérateurs : Francois, Manfraid

Gilles
Messages : 11
Enregistré le : mar. 9 août 2016 11:16

Re: Serveur Web Python simple pour afficher le statut des GPIO

Message par Gilles » lun. 15 août 2016 11:00

hmmm.
une dernière question. Ma compréhension est que Ajax s'execute dans le navigateur. Donc, pour avoir des données "fraiches", il va appeler une fonction sur le serveur qui en retour va lui envoyer les données actualisées.
Dans la commande suivante,
function poll(){
$.ajax({
url: "upd",
data: {'lastupdate': lastupdate },

le paramètre "url" est sensé contenir une url ou un path d'un script. Le mot "upd" n'apparait nulle part ailleurs si ce n'est dans le server web python dans la commande :
root.putChild('upd', self.updateHandler)
ce qui me laisse plus que perplexe :)
Il semble que cette commande associe "upd" à une fonction "self.updatehandler" qui est une classe. Intéressant mais cela se complique .... C'est pourquoi, j'aurais bien aimé un sample.
Attendons les retours de vacances ...
Gilles

Gilles
Messages : 11
Enregistré le : mar. 9 août 2016 11:16

Re: Serveur Web Python simple pour afficher le statut des GPIO

Message par Gilles » jeu. 18 août 2016 10:04

Bon, j'ai progressé. En faisant un mixte de plusieurs sites et training, cela marche. j'affiche en permanence(maj toutes les secondes) le statut du port GPIO 23 grâce à Ajax. J'aimerais maintenant afficher le status de plusieurs ports. Si j'ai bien compris, je peux utiliser un fichier json pour contenir les numéros de ports.

Quelle serait la meilleure façon de programmer cela? faire une boucle de lecture et appeler la fonction ajax(cheque) plusieurs fois? ou boucler dans la fonction ajax cheque? A ce moment là, je ne sais pas comment faire plusieurs "return xxx"
Pour ceux que cela intéresse, voir ci dessous les fichiers index.html(+ajax) et server.py
---------------------------- index.html ---------------------------------------
<html>
<head>
<script src="http://code.jquery.com/jquery-1.5.2.min.js"></script>
</head>
<body>
<div id = "content">
</div>
<script type="text/javascript">
$(function(){
cheque();
});
function cheque(){
var jContent = $( "#content" );
$.ajax({type: "GET",
url: "test",
dataType : 'html',
success: function( strData ){;
jContent.html( strData );
setTimeout('cheque()', 1000);
}
});
};
</script>
</body>
</html>
------------------------ server.py ---------------------------------------------
#!/usr/bin/env python
# coding: utf-8
from twisted.web import server, resource, http, static
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)
GPIO.setup(23, GPIO.OUT)

class TestHandler(resource.Resource):
isLeaf = True

def __init__(self):
resource.Resource.__init__(self)
def render_GET(self, request):
func = GPIO.input(23)
if (func == 0):
return "GPIO 23 is LOW !!"
else:
return "GPIO 23 is HIGH !!"

if __name__ == "__main__":
import sys
from twisted.internet import reactor
testHandler = TestHandler()
root = static.File('/home/pi/web3')
root.putChild('test', testHandler)
reactor.listenTCP(8082, server.Site(root))
reactor.run()
-------------------------------------------------------------------------------------
Merci de vos réponses
Gilles

Avatar du membre
Manfraid
Modérateur
Messages : 1402
Enregistré le : ven. 3 oct. 2014 14:50
Contact :

Re: Serveur Web Python simple pour afficher le statut des GPIO

Message par Manfraid » jeu. 18 août 2016 20:31

Salut,


désolé mais je ne connait pas twisted

mais par contre pour ta fonction pour lire tes GPIO tu peu faire du genre

Code : Tout sélectionner

class TestHandler(resource.Resource):
	isLeaf = True

	def __init__(self):
		resource.Resource.__init__(self)
	
	def render_GET(self, request):
		ret = "<ul>"
		func = GPIO.input(23)
		if (func == 0):
			ret += "<li>GPIO 23 is LOW !!</li>"
		else:
			ret+= "<li>GPIO 23 is HIGH !!</li>"
		func = GPIO.input(24)
		if (func == 0):
			ret += "<li>GPIO 24 is LOW !!</li>"
		else:
			ret+= "<li>GPIO 24 is HIGH !!</li>"
		return ret
	
NAS : DIY OS Debian: DD250Go + 3x2To + 6To
Raspberry pi : 2B OS : Raspbian
Se tromper est humain, Vraiment foutre la merde nécessite le mot de passe de root.

Gilles
Messages : 11
Enregistré le : mar. 9 août 2016 11:16

Re: Serveur Web Python simple pour afficher le statut des GPIO

Message par Gilles » sam. 20 août 2016 16:55

Salut Manfraid,

merci pour l'idée. J'ai créé un fichier contenant les numéros de port. Avec une boucle de lecture en Python, je lis les statuts et je les concatène comme dans ton exemple.
Super, ça marche.
Ma prochaine étape est, sur la même page d'ajouter un bouton pour chaque port qui permettrait de changer le statut du même port.
J'ouvrirai un autre post si besoin our ne pas trop mélanger les questions.
Merci
Gilles

Répondre

Retourner vers « Python »