Bonjour à tous,
J'avoue qu'ici je suis bien bien bloqué !
J'ai une raspberry pi, executant un script en python, et censé faire l'interface entre une arduino et un serveur (je précise que l'interface pi->arduino est implémenté et fonctionnel).
J'essaie à présent de faire l'interface entre mon serveur et la pi...
J'initialise donc mon serveur (sur la raspberry pi) :
puis je lance un nouveau thread dans lequel j'appelle la méthode "serve_forever"
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 def init_serveur(): PORT = 8080 Handler = SimpleHTTPServer.SimpleHTTPRequestHandler #Handler = Handler_perso httpd = SocketServer.TCPServer(("", PORT), MyHandler) print "serving at port", PORT return httpd
(mon main)
(ma classe thread)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 t_serveur=thread_serveur(httpd) t_serveur.daemon=True t_serveur.start()
jusqu'ici tout va bien ! la boucle sur mon main continue à tourner, et le serveur est bien lancé dans mon thread "t_serveur"
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 class thread_serveur(Thread): def __init__(self, httpd): Thread.__init__(self) self.httpd=httpd def run(self): """Code à exécuter pendant l'exécution du thread.""" print("ok") #self.queue_serveur.put("data reçu du serveur") try: self.httpd.serve_forever() except (KeyboardInterrupt): print("fermeture du serveur") httpd.server_close()
c'est ici que les choses se corsent...
pour tester, je ping donc ma Raspberry depuis un navigateur ("mon adresse ip:8080") et ça fonctionne : je peux acceder à cette adresse, et sur la console de ma rapsberry, on m'affiche qu'une requête get a été envoyé au serveur de la Rpi=> nickel
j'aimerais à présent (dans un premier temps) instancier une variable dés qu'une requête GET (ou POST) est effectué, et pouvoir utiliser cette variable dans mon main, et c'est là que je bloque...
D'après ce que j'ai compris, pour pouvoir gérer cet événement, il faut que j'override la méthode DO_GET de ma classe "MyHandler" (quelque chose du style : )
mais je n'ai aucune idée comment récuper ma variable "flag_GET" ailleurs dans mon script (et particulièrement comment la récuperer dans mon main où je vais devoir l'utiliser.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 class MyHandler(BaseHTTPServer.BaseHTTPRequestHandler): def do_GET(s): self.flag_GET=True
La première étape selon moi et de réussir à la récupérer ailleurs dans mon thread t_serveur : étant donné que je n'appelle jamais la méthode DO_GET mais que celle-ci s'appelle "automatiquement" via "serve_forever" je n'ai aucune idée de comment la récuperer ailleurs
Puis je devrais la récuperer depuis mon t_serveur jusqu'à mon main pour cela, j'ai cru comprendre que je devrais utiliser une Queue, c'est encore très abstrait pour moi, mais pour cette étape ça devrait aller...
Merci d'avance pour votre aide
Partager