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 16, la clé API Jeedom que vous trouverez dans « configuration » – « configuration générale » – « Clef API »
- ligne 28 et ligne 182, l’@IP de votre box Jeedom
- ligne 31, l’@IP de l’Arduino (pour le mettre en IP fixe)
- ligne 34, 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.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%20la%20cl%C3%A9%20API%20de%20Jeedom%20pour%20le%20’virtuel’%0AString%20APIKEYJEEDOM%20%3D%20%22blablablablablabla%22%3B%20%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%20cr%C3%A9%C3%A9%20l’objet%20client%20pour%20la%20connexion%20au%20serveur%0AEthernetClient%20client%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%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%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%20if(t_old%20!%3D%20t)%0A%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%2F%2F%20POUR%20DEBUG%0A%20%20%20%20%20%20%20%20%2F%2F%20unsigned%20long%20DebutEnvoi%20%3D%20millis()%3B%0A%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%2F%2F%20lance%20la%20fonction%20pour%20envoyer%20en%20GET%20les%20infos%0A%20%20%20%20%20%20%20%20EnvoiTrame(388%2Ct)%3B%0A%20%20%20%20%20%20%20%20t_old%20%3D%20t%20%3B%0A%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%2F*%20POUR%20DEBUG%0A%20%20%20%20%20%20%20%20unsigned%20long%20FinEnvoi%20%3D%20millis()%3B%0A%20%20%20%20%20%20%20%20Serial.print(F(%22Debut%20envoi%20%3A%20%22))%3B%0A%20%20%20%20%20%20%20%20Serial.print(DebutEnvoi)%3B%0A%20%20%20%20%20%20%20%20Serial.print(F(%22%20-%20Fin%20envoi%20%3A%20%22))%3B%0A%20%20%20%20%20%20%20%20Serial.print(FinEnvoi)%3B%0A%20%20%20%20%20%20%20%20Serial.print(F(%22%20-%20Duree%20totale%20%3A%20%22))%3B%0A%20%20%20%20%20%20%20%20int%20DureeEnvoi%20%3D%20FinEnvoi%20-%20DebutEnvoi%3B%0A%20%20%20%20%20%20%20%20Serial.println(DureeEnvoi)%3B*%2F%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%0A%20%20%20%20%20%20if(h_old%20%3E%20(h%2B2)%20%7C%7C%20h_old%20%3C%20(h-2)%20)%0A%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20EnvoiTrame(390%2Ch)%3B%0A%20%20%20%20%20%20%20%20h_old%20%3D%20h%20%3B%0A%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20if(NombreErreurReseau_old%20!%3D%20NombreErreurReseau)%0A%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%2F%2F%20Pour%20le%20DEBUG%2C%20j’envoi%20dans%20un%20virtuel%20le%20nombre%20d%20erreur%20r%C3%A9seau%20survenue%0A%20%20%20%20%20%20%20%20EnvoiTrame(396%2CNombreErreurReseau)%3B%0A%20%20%20%20%20%20%20%20NombreErreurReseau_old%20%3D%20NombreErreurReseau%3B%0A%20%20%20%20%20%20%7D%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%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%20d’envoyer%20en%20HTTP%2C%20une%20commande%20type%20GET%20au%20serveur%0A%2F%2F%20Premier%20param%C3%A9tre%20correspond%20%C3%A0%20l’ID%20du%20virtuel%20dans%20Jeedom%20(un%20ID%20par%20valeur%20%C3%A0%20r%C3%A9cup%C3%A9rer)%0A%2F%2F%20Deuxi%C3%A8me%20param%C3%A8tre%20correspond%20%C3%A0%20la%20valeur%20%C3%A0%20envoyer%20pour%20cet%20ID%0Avoid%20EnvoiTrame(int%20ID%2Cint%20ValeurAEnvoyer)%0A%7B%0A%20%20%2F%2F%20On%20connecte%20le%20client%20au%20serveur%0A%20%20int%20StatutConnexion%20%3D%20client.connect(IPjeedom%2C%2080)%3B%0A%0A%20%20%2F%2F%20Si%20le%20client%20est%20bien%20connect%C3%A9%20au%20serveur%0A%20%20if%20(StatutConnexion)%20%7B%0A%20%20%20%20%2F%2F%20POUR%20DEBUG%0A%20%20%20%20%2F%2FSerial.print(%22Connexion%20OK%20%7C%7C%20%22)%3B%0A%20%20%0A%20%20%20%20client.print(F(%22GET%20%2Fcore%2Fapi%2FjeeApi.php%3Fapikey%3D%22))%3B%0A%20%20%20%20client.print(APIKEYJEEDOM)%3B%0A%20%20%20%20client.print(F(%22%26type%3Dvirtual%26id%3D%22))%3B%0A%20%20%20%20client.print(ID)%3B%0A%20%20%20%20client.print(F(%22%26value%3D%22))%3B%0A%20%20%20%20client.print(ValeurAEnvoyer)%3B%0A%20%20%20%20client.println(F(%22%20HTTP%2F1.1%22))%3B%0A%20%20%20%0A%20%20%20%20client.println(F(%22Host%3A%20192.168.45.250%22))%3B%0A%20%20%20%20client.println(F(%22Connection%3A%20close%22))%3B%0A%20%20%20%20client.println()%3B%0A%20%20%7D%0A%20%20%2F%2F%20Sinon%20(le%20client%20n’est%20pas%20connect%C3%A9%20au%20serveur)%0A%20%20else%20%0A%20%20%7B%0A%20%20%20%20NombreErreurReseau%2B%2B%3B%0A%20%20%20%20%2F%2FPOUR%20DEBUG%0A%20%20%20%20%2F*Serial.print(F(%22**%20Connection%20failed-code%20erreur%20%3A%20%20%22))%3B%0A%20%20%20%20Serial.print(StatutConnexion)%3B%0A%20%20%20%20Serial.print(F(%22%20-%20ID%2FValeur%20%3D%20%22))%3B%0A%20%20%20%20Serial.print(ID)%3B%0A%20%20%20%20Serial.print(F(%22%2F%22))%3B%0A%20%20%20%20Serial.println(ValeurAEnvoyer)%3B*%2F%0A%20%20%7D%0A%0A%20%20client.flush()%3B%0A%20%20%0A%20%20%2F%2F%20Petite%20tempo%20pour%20que%20l’envoi%20et%20la%20r%C3%A9ception%20de%20la%20r%C3%A9ponse%20se%20fasse%0A%20%20delay%20(250)%3B%0A%0A%20%20%2F%2F%20Pour%20DEBUG%0A%20%20%2F*%0A%20%20int%20CompteurCodeHTTP%20%3D%200%3B%20%2F%2F%20Pour%20compter%20les%2015%20premiers%20caract%C3%A8res%20de%20la%20r%C3%A9ponse%20du%20serveur%0A%0A%20%20%2F%2F%20S’il%20y%20a%20une%20r%C3%A9ponse%20du%20serveur%0A%20%20%2F%2F%20client.available()%20%3D%20Retourne%20le%20nb%20de%20bit%20disponible%20pour%20les%20lire%0A%20%20while%20(client.available())%20%0A%20%20%7B%0A%20%20%20%20char%20c%20%3D%20client.read()%3B%0A%20%20%20%20%2F%2F%20Affiche%20la%20premi%C3%A8re%20ligne%20de%20ce%20que%20retourne%20le%20serveur%20(code%20HTTP)%0A%20%20%20%20if%20(CompteurCodeHTTP%20!%3D%2015)%0A%20%20%20%20%7B%0A%20%20%20%20%20%20Serial.print(c)%3B%0A%20%20%20%20%20%20CompteurCodeHTTP%2B%2B%3B%0A%20%20%20%20%7D%0A%20%20%7D%0A%20%20Serial.println()%3B%0A%20%20*%2F%0A%20%20%20%0A%20%20%2F%2F%20Si%20le%20client%20est%20d%C3%A9connect%C3%A9%0A%20%20if%20(!client.connected())%20%7B%0A%20%20%20%20%2F%2F%20POUR%20DEBUG%0A%20%20%20%20%2F%2FSerial.println(%22Deconnexion%20OK%22)%3B%0A%20%20%20%20%2F%2FSerial.println()%3B%0A%20%20%7D%0A%20%20else%0A%20%20%7B%0A%20%20%20%20%20%20%2F%2F%20POUR%20DEBUG%0A%20%20%20%20%20%20%2F%2F%20Serial.println(F(%22Deconnexion%20%3A%20le%20client%20etait%20encore%20connecte%22))%3B%20%2F%2F%20C’est%20normal%20si%20on%20ne%20lit%20pas%20la%20r%C3%A9ponse%20du%20client%0A%20%20%20%20%20%20NombreProblemeDeconnexion%2B%2B%3B%0A%20%20%7D%0A%20%20%2F%2F%20On%20arr%C3%AAte%20le%20client%20avant%20de%20sortir%20(m%C3%AAme%20s’il%20est%20encore%20connect%C3%A9)%0A%20%20client.stop()%3B%0A%7D » message= »Code pour ServeurWeb Arduino : GET » highlight= » » provider= »manual »/]