Programmer le pcDuino : Pyduino : Réseau : Simple serveur TCP / Http affichant la mesure des 6 broches analogiques dans un tableau.Par X. HINAULT - Juillet 2013 Ce que l'on va faire ici
Cet exemple, bien que très basique dans sa mise en forme, montre avec quelle facilité il est possible de créer son serveur HTML "maison" avec Pyduino : 1. créer sa page HTML dans un éditeur HTML, 2. copier/coller à l'identique la page HTML dans le code pyduino à l'endroit prévu pour çà, 3. intégrer les fonctions Pyduino utiles aux endroits voulus, 4. votre serveur est prêt : vous pouvez le lancer !! Les "plus" de l'utilisation du réseau avec Pyduino :
Pré-requis
Activité préparatoire
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <META HTTP-EQUIV="Refresh" CONTENT="2"> <title>Titre</title> </head> <body> <div style="text-align: center">*** Serveur de mesures analogiques ***</div> <br /> <br /> <table width="50%" align="center" valign="middle" > <tr bgcolor="#FFBB00"> <td>Voie 0</td> <td>Voie 1</td> <td>Voie 2</td> <td>Voie 3</td> <td>Voie 4</td> <td>Voie 5</td> <td>Unité</td> </tr> <tr bgcolor="#FFFF00"> <td>###</td> <td>###</td> <td>###</td> <td>###</td> <td>###</td> <td>###</td> <td>brut</td> </tr> <tr bgcolor="#FEF9A0"> <td>###</td> <td>###</td> <td>###</td> <td>###</td> <td>###</td> <td>###</td> <td> mV </td> </tr> </table> </body> </html>
Schéma fonctionnel
Le réseau utilisé
Matériel nécessaireSystème
E/S
![]()
![]()
![]() Instructions de montage
Le montage à réaliserLe fichier *.pyCopier/coller ce code dans l'éditeur Geany : #!/usr/bin/python # -*- coding: utf-8 -*- # exemple pyDuino - par X. HINAULT - www.mon-club-elec.fr # Juillet 2013 - Tous droits réservés - GPLv3 # voir : https://github.com/sensor56/pyDuino # Serveur TCP / Http / HTML affichant la mesure des 6 voies analogiques from pyduino import * # importe les fonctions Arduino pour Python # entete declarative ipLocale=Ethernet.localIP() # auto - utilise l'ip de l'interface eth0 du systeme #ipLocale='192.168.1.25' # manuel - attention : utiliser la meme IP qu'une interface reseau du systeme # pour connaitre les interfaces reseau sur le systeme : utiliser la commande $ ifconfig print ipLocale # affiche l'adresse IP port=8080 # attention port doit etre au dessus de 1024 sinon permission refusee par securite - 8080 pour http serverHTTP=EthernetServer(ipLocale, port) # crée un objet serveur utilisant le port 8080 = port HTTP > 1024 #--- setup --- def setup(): global serverHTTP, ipLocale, port #serverHTTP.begin(10) # initialise le serveur - fixe nombre max connexion voulu serverHTTP.begin() # initialise le serveur - nombre max connexion par defaut = 5 print ("Serveur TCP actif avec ip : " + ipLocale + " sur port : " + str(port) ) #--- fin setup # -- loop -- def loop(): global serverHTTP print ("Attente nouvelle connexion entrante...") clientDistant, ipDistante = serverHTTP.clientAvailable() # attend client entrant # code bloque ici tant que pas client ! Si present, on recupere d'un coup objet client ET son ip print "Client distant connecte avec ip :"+str(ipDistante) # affiche IP du client #--- requete client --- requete=serverHTTP.readDataFrom(clientDistant) # lit les donnees en provenance client d'un coup print requete # affiche requete recue #--- reponse serveur --- reponse=( # ( ... ) pour permettre multiligne.. httpResponse() # entete http OK 200 automatique fournie par la librairie Pyduino # contenu page - ici date / heure du serveur et mesure nalogique A2 + pageHTML() # voir la fonction separee - pour clarte du code +"\n") # fin reponse serverHTTP.writeDataTo(clientDistant, reponse) # envoie donnees vers client d'un coup print "Reponse envoyee au client distant : " #print (bytes(reponse)) print (reponse) # affiche la reponse envoyee #serverHTTP.close() # remarque : le socket = serveur doit rester ouvert # quand on quitte l'application: la connexion TCP reste active un peu donc erreur si re-execution trop rapide du code # on peut utiliser un port voisin dans ce cas... delay(10) # entre 2 loop() # -- fin loop -- #--- fonction fournissant la page HTML --- def pageHTML(): pageHTML=( # debut page HTML """ <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title>Mon Serveur HTML</title> </head> <body> <div style="text-align: center">*** Serveur de mesures analogiques ***</div> <br /> <br /> <table width="75%" align="center" valign="middle" > <tr align="center" bgcolor="#FFBB00"> <td>Voie 0</td> <td>Voie 1</td> <td>Voie 2</td> <td>Voie 3</td> <td>Voie 4</td> <td>Voie 5</td> <td>Unité</td> </tr> <tr align="center" bgcolor="#FFFF00"> <td>""" + str(analogRead(A0))+ """</td> <td>""" + str(analogRead(A1))+ """</td> <td>""" + str(analogRead(A2))+ """</td> <td>""" + str(analogRead(A3))+ """</td> <td>""" + str(analogRead(A4))+ """</td> <td>""" + str(analogRead(A5))+ """</td> <td> brut </td> </tr> <tr align="center" bgcolor="#FEF9A0"> <td>""" + str(analogReadmV(A0))+ """</td> <td>""" + str(analogReadmV(A1))+ """</td> <td>""" + str(analogReadmV(A2))+ """</td> <td>""" + str(analogReadmV(A3))+ """</td> <td>""" + str(analogReadmV(A4))+ """</td> <td>""" + str(analogReadmV(A5))+ """</td> <td> mV </td> </tr> </table> </body> </html> """ ) # fin page HTML return pageHTML # la fonction renvoie la page HTML #--- obligatoire pour lancement du code -- if __name__=="__main__": # pour rendre le code executable setup() # appelle la fonction setup while not noLoop: loop() # appelle fonction loop sans fin Ce code est également disponible ici : https://raw.github.com/sensor56/pyduino-exemples/master/Ethernet/EthernetServerAnalogReadx6.py Utilisation
![]() ![]()
Discussion technique
<META HTTP-EQUIV="Refresh" CONTENT="30"> |