Page 2 sur 2

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

Posté : lun. 15 août 2016 11:00
par Gilles
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

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

Posté : jeu. 18 août 2016 10:04
par Gilles
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

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

Posté : jeu. 18 août 2016 20:31
par Manfraid
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
	

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

Posté : sam. 20 août 2016 16:55
par Gilles
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