Code pour ServeurWeb Arduino : XML

Cette article est une annexe de l’article « Faire communiquer Jeedom et un Arduino en DIY« 

Vous trouverez ci-dessous le sketch pour l’Arduino. Il faudra personnaliser les lignes suivantes :

  • ligne 25, l’@IP de votre box Jeedom
  • ligne 28, l’@IP de l’Arduino (pour le mettre en IP fixe)
  • ligne 31, l’@IP de votre BOX

A noter que les 30 premières secondes, la sonde n’est pas interrogée donc ne renverra pas de résultat (algo à améliorer).

Voici le code :

[pastacode lang= »c » manual= »%23include%20%3CSPI.h%3E%0A%23include%20%3CEthernet2.h%3E%0A%0A%23include%20%22dht22.h%22%0A%0A%23include%20%22TM1637_modif.h%22%0A%2F%2F%7B0%2C1%2C2%2C3%2C4%2C5%2C6%2C7%2C8%2C9%2C10%2C11%2C12%2C13%2C14%2C15%7D%3B%0A%2F%2F0~9%2CA%2Cb%2CC%2Cd%2CE%2CF%0A%0A%23define%20DHT11PIN%202%20%20%20%20%20%2F%2F%20PIN%20pour%20la%20sonde%20DHT11%0A%0A%23define%20CLK%203%20%2F%2F%20Pins%20pour%20l’afficheur%20TM1637%0A%23define%20DIO%204%0A%0A%2F%2F%20On%20cr%C3%A9%C3%A9%20l’objet%20pour%20la%20sonde%20DHT11%0ADHT%20dht(DHT11PIN%2C%20DHT11)%3B%0A%0A%2F%2F%20On%20cr%C3%A9%C3%A9%20l’objet%20pour%20l’afficheur%204%20digit%0ATM1637%20tm1637(CLK%2CDIO)%3B%0A%0A%2F%2F%20L’adresse%20MAC%20pour%20le%20shield%0Abyte%20mac%5B%5D%20%3D%20%7B%200xAE%2C%200xAD%2C%200xAE%2C%200xAE%2C%200xAE%2C%200xAD%20%7D%3B%0A%0A%2F%2F%20IP%20de%20la%20box%20Jeedom%0AIPAddress%20IPjeedom(192%2C168%2C45%2C250)%3B%0A%0A%2F%2F%20IP%20de%20cet%20arduino%20(ip%20fixe)%0AIPAddress%20IParduino(192%2C%20168%2C%2045%2C%2088)%3B%0A%0A%2F%2F%20IP%20de%20la%20freebox%20(va%20servir%20pour%20%3A%20dns%2C%20passerelle)%0AIPAddress%20IPfreebox(192%2C168%2C45%2C254)%3B%0A%0A%2F%2F%20On%20initialise%20la%20librairie%20server%0AEthernetServer%20server(80)%3B%0A%0A%2F%2F%20Variables%20pour%20comparer%20l’ancienne%20valeur%20des%20sondes%20%C3%A0%20la%20nouvelle%0Aint%20t_old%20%3D%200%3B%0Aint%20h_old%20%3D%200%3B%0A%0A%2F%2F%20POUR%20DEBUG%0A%2F%2F%20Variable%20pour%20compter%20le%20nombre%20de%20connexion%20%C3%A9chou%C3%A9e%20de%20client.connect%0Aint%20NombreErreurReseau%20%3D%200%20%3B%0Aint%20NombreErreurReseau_old%20%3D%20-1%3B%0Aint%20NombreProblemeDeconnexion%20%3D%200%20%3B%0A%0A%2F%2F%20Variable%20de%20Tempo%20pour%20d%C3%A9clenchement%20de%20lecture%0Aunsigned%20long%20previousMillis%20%3D%200%3B%0A%0A%2F%2F%20Pour%20faire%20clignoter%20les%20deux%20point%20du%204digit%20(permet%20de%20voir%20si%20le%20code%20n’est%20pas%20plant%C3%A9)%0Aboolean%20StatutDoublePoint%3D0%3B%0A%0Avoid%20setup()%20%7B%0A%20%20%2F%2F%20On%20initialise%20la%20sonde%20DHT11%0A%20%20dht.begin()%3B%0A%0A%20%20%2F%2F%20On%20initialise%20l’afficheur%20%C3%A0%204%20digit%0A%20%20tm1637.init()%3B%0A%20%20tm1637.set(BRIGHT_TYPICAL)%3B%20%0A%20%20%0A%20%20%2F%2F%20On%20ouvre%20le%20port%20s%C3%A9rie%20pour%20DEBUG%0A%20%20Serial.begin(9600)%3B%0A%0A%20%20%2F%2F%20On%20initialise%20le%20shield%20avec%20IP%20fixe%0A%20%20Ethernet.begin(mac%2C%20IParduino%20%2C%20IPfreebox%20%2C%20IPfreebox)%3B%0A%20%20%0A%20%20%2F%2F%20On%20attend%20que%20le%20shield%20s’initialise%0A%20%20delay(500)%3B%0A%0A%20%20server.begin()%3B%0A%20%20Serial.print(F(%22Le%20serveur%20est%20disponible%20ici%20%3A%20%22))%3B%0A%20%20Serial.println(Ethernet.localIP())%3B%0A%20%0A%20%20Serial.println(F(%22***%20Fin%20de%20la%20configuration%20***%22))%3B%0A%7D%0A%20%0Avoid%20loop()%0A%7B%0A%20%20%20%20unsigned%20long%20currentMillis%20%3D%20millis()%3B%0A%20%20%20%20%0A%20%20%20%20int%20h%20%3D%20dht.readHumidity()%3B%0A%20%20%20%20int%20t%20%3D%20dht.readTemperature()%3B%0A%20%20%20%20%20%20%0A%20%20%20%20%2F%2F%20S’il%20s’est%20%C3%A9coul%C3%A9%2030%20secondes%2C%0A%20%20%20%20if%20(%20currentMillis%20-%20previousMillis%20%3E%3D%2030000%20)%20%0A%20%20%20%20%7B%0A%20%20%20%20%20%20previousMillis%20%3D%20currentMillis%3B%0A%20%20%20%0A%20%20%20%20%20%20int%20h%20%3D%20dht.readHumidity()%3B%0A%20%20%20%20%20%20int%20t%20%3D%20dht.readTemperature()%3B%0A%0A%20%20%20%20%20%20Serial.print(F(%22T11%20%22))%3B%0A%20%20%20%20%20%20Serial.print(t)%3B%0A%20%20%20%20%20%20Serial.print(F(%22C%20-%20H11%20%22))%3B%0A%20%20%20%20%20%20Serial.print(h)%3B%0A%20%20%20%20%20%20Serial.print(F(%22%25%22))%3B%0A%20%20%20%20%20%20Serial.print(F(%22C%20%7C%7C%20Millis%20%3A%20%22))%3B%0A%20%20%20%20%20%20Serial.print(millis()%2F1000)%3B%0A%20%20%20%20%20%20Serial.print(F(%22%20%7C%7C%20NbPbDeco%20%3A%20%22))%3B%0A%20%20%20%20%20%20Serial.print(NombreProblemeDeconnexion)%3B%0A%20%20%20%20%20%20Serial.print(F(%22%20%7C%7C%20NbErReseau%20%3A%20%22))%3B%0A%20%20%20%20%20%20Serial.println(NombreErreurReseau)%3B%0A%20%20%0A%20%20%20%20%20%20%2F%2F%20Lance%20la%20fonction%20pour%20afficher%20la%20temp%C3%A9rature%20sur%20l’afficheur%204%20digit%0A%20%20%20%20%20%20Affiche4Digit(t%2Ch)%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20%2F%2F%20On%20%C3%A9coute%20pour%20voir%20si%20un%20client%20(Jeedom)%20se%20connecte%20au%20serveur%20(Arduino)%0A%20%20%20%20LireTrame(t%2Ch)%3B%0A%7D%0A%0Avoid%20Affiche4Digit(int%20temp%2C%20int%20hum)%0A%7B%0A%20%20%20%20int%20digitoneT%20%3D%20temp%20%2F%2010%3B%20%2F%2F%20on%20r%C3%A9cup%C3%A8re%20le%20premier%20des%20deux%20chiffres%0A%20%20%20%20int%20digittwoT%20%3D%20temp%20%25%2010%3B%20%2F%2F%20on%20r%C3%A9cup%C3%A8re%20le%20second%20des%20deux%20chiffres%0A%20%0A%20%20%20%20%2F%2F%20Si%20les%20deux%20points%20ne%20sont%20pas%20pr%C3%A9sent%2C%20on%20les%20mets.%20Sinon%20on%20les%20enl%C3%A8ve%0A%20%20%20%20%2F%2F%20Permet%20de%20v%C3%A9rifier%20si%20le%20sketch%20est%20plant%C3%A9%20%3A%20chgmt%20d’%C3%A9tat%20toutes%20les%2030%20sec%0A%20%20%20%20if(StatutDoublePoint%3D%3D0)%0A%20%20%20%20%7B%0A%20%20%20%20%20%20tm1637.point(1)%3B%20%20%0A%20%20%20%20%20%20StatutDoublePoint%3D1%3B%0A%20%20%20%20%7D%0A%20%20%20%20else%0A%20%20%20%20%7B%0A%20%20%20%20%20%20tm1637.point(0)%3B%20%20%0A%20%20%20%20%20%20StatutDoublePoint%3D0%3B%0A%20%20%20%20%7D%0A%20%20%20%20%0A%20%20%20%20tm1637.clearDisplay()%3B%20%2F%2F%20On%20enl%C3%A8ve%20ce%20qui%20est%20affich%C3%A9%0A%20%20%20%20tm1637.display(0%2CdigitoneT)%3B%20%2F%2F%20on%20affiche%20le%20premier%20chiffre%20%C3%A0%20la%20position%201%20(0)%0A%20%20%20%20tm1637.display(1%2CdigittwoT)%3B%20%2F%2F%20on%20affiche%20le%20premier%20chiffre%20%C3%A0%20la%20position%202%20(1)%0A%20%20%20%20tm1637.display(3%2C12)%3B%20%20%2F%2F%20on%20affiche%20un%20%22C%22%20(12)%20en%20position%204%20(3)%0A%7D%0A%0A%2F%2F%20Fonction%20permettant%20de%20lire%20les%20requ%C3%AAtes%20HTTP%20d’un%20client%0A%2F%2F%20et%20de%20renvoyer%20un%20fichier%20XML%20au%20client%0A%2F%2F%20Premier%20param%C3%A9tre%20correspond%20%C3%A0%20la%20temp%C3%A9rature%20de%20la%20sonde%0A%2F%2F%20Deuxi%C3%A8me%20param%C3%A8tre%20correspond%20%C3%A0%20l’humidit%C3%A9%20de%20la%20sonde%0A%2F%2F%20Ce%20choix%20de%20passer%20les%20donn%C3%A9es%20en%20argument%20de%20la%20fonction%20n’est%20pas%20tr%C3%A8s%20judicieux%20%C3%A0%20terme%20mais%20c’%C3%A9tait%20pour%20le%20test.%0Avoid%20LireTrame(int%20temp11Lu%2C%20int%20hum11Lu)%0A%7B%0A%20%20EthernetClient%20clientIncoming%20%3D%20server.available()%3B%0A%20%20if%20(clientIncoming)%20%0A%20%20%7B%0A%20%20%20%20Serial.println(%22new%20client%22)%3B%0A%20%20%20%20boolean%20currentLineIsBlank%20%3D%20true%3B%0A%20%20%20%20while%20(clientIncoming.connected())%20%0A%20%20%20%20%7B%0A%20%20%20%20%20%20if%20(clientIncoming.available())%20%7B%0A%20%20%20%20%20%20%20%20char%20c%20%3D%20clientIncoming.read()%3B%0A%20%20%20%20%20%20%20%20Serial.write(c)%3B%0A%20%20%20%20%20%20%20%20if%20(c%20%3D%3D%20’%5Cn’%20%26%26%20currentLineIsBlank)%20%7B%0A%20%20%20%20%20%20%20%20%20%20clientIncoming.println(%22HTTP%2F1.1%20200%20OK%22)%3B%0A%20%20%20%20%20%20%20%20%20%20clientIncoming.println(%22Content-Type%3A%20text%2Fxml%22)%3B%0A%20%20%20%20%20%20%20%20%20%20clientIncoming.println(%22Connection%3A%20close%22)%3B%0A%20%20%20%20%20%20%20%20%20%20clientIncoming.println()%3B%0A%20%20%20%20%20%20%20%20%20%20clientIncoming.println(%22%3Croot%3E%22)%3B%0A%20%20%20%20%20%20%20%20%20%20clientIncoming.println(%22%3Ctemp11%3E%22)%3B%0A%20%20%20%20%20%20%20%20%20%20clientIncoming.println(temp11Lu)%3B%0A%20%20%20%20%20%20%20%20%20%20clientIncoming.println(%22%3C%2Ftemp11%3E%22)%3B%0A%20%20%20%20%20%20%20%20%20%20clientIncoming.println(%22%3Chumidite11%3E%22)%3B%0A%20%20%20%20%20%20%20%20%20%20clientIncoming.println(hum11Lu)%3B%0A%20%20%20%20%20%20%20%20%20%20clientIncoming.println(%22%3C%2Fhumidite11%3E%22)%3B%0A%20%20%20%20%20%20%20%20%20%20clientIncoming.println(%22%3C%2Froot%3E%22)%3B%0A%20%20%20%20%20%20%20%20%20%20break%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20if%20(c%20%3D%3D%20’%5Cn’)%20%7B%0A%20%20%20%20%20%20%20%20%20%20currentLineIsBlank%20%3D%20true%3B%0A%20%20%20%20%20%20%20%20%7D%20else%20if%20(c%20!%3D%20’%5Cr’)%20%7B%0A%20%20%20%20%20%20%20%20%20%20currentLineIsBlank%20%3D%20false%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%20%20%20%20%2F%2F%20On%20laisse%20le%20temps%20au%20serveur%20de%20recevoir%20les%20donn%C3%A9es%0A%20%20%20%20delay(50)%3B%0A%20%20%20%20%2F%2F%20On%20ferme%20la%20connexion%0A%20%20%20%20clientIncoming.stop()%3B%0A%20%20%20%20Serial.println(%22client%20disconnected%22)%3B%0A%20%20%7D%0A%7D » message= »Code pour ServeurWeb Arduino : XML » highlight= » » provider= »manual »/]

Si vous souhaitez partager cet article...Share on facebook
Facebook
Share on google
Google
Share on twitter
Twitter