Wemos : un microcontrôleur Arduino en wifi

Wemos D1 : un Arduino avec un Wifi intégré (ESP)

L’autre jour, je cherchais à faire fonctionner un ESP8266 et il s’avère que c’est un peu prise de tête au début, surtout pour un débutant comme moi.

Et puis dans la boutique à chinoiserie (voir en bas de page), je suis tombé sur un Arduino avec un ESP intégré. Il semble s’agir d’une copie d’un Wemos D1. Comme pour les Arduinos Uno, Mega, Nano and co, ces cartes ont été copiés et sont disponible à bas coût (à nos risques et périls).

Pour tester, j’ai donc adapté le scénario d’exemple « WifiClient » pour :

  • faire des relevés sur une sonde DHT11 (connectée au PIN4)
  • transmettre la valeur de la sonde à un ‘virtuel’ dans Jeedom

Scénario de test pour le Wemos D1 :

[pastacode lang= »c » manual= »%23include%20%3CESP8266WiFi.h%3E%0A%23include%20%22dht22.h%22%0A%0Aconst%20char*%20ssid%20%20%20%20%20%3D%20%22votre-reseau-wifi%22%3B%0Aconst%20char*%20password%20%3D%20%22votre-cle-wifi%22%3B%0Aconst%20char*%20host%20%3D%20%22192.168.19.40%22%3B%0AString%20APIKEYJEEDOM%20%3D%20%22lhdfvgazpoknvcjhgvazd%22%3B%20%2F%2F%20la%20cl%C3%A9%20API%20de%20Jeedom%20pour%20le%20’virtuel’%0AString%20NumeroVirtuel%20%3D%20%22650%22%3B%20%2F%2F%20le%20num%C3%A9ro%20du%20’virtuel’%20Jeedom%0Aint%20value%20%3D%200%3B%20%2F%2F%20la%20valeur%20%C3%A0%20envoyer%20dans%20le%20’virtuel’%20ci-dessus%0Aint%20t_old%20%3D%200%3B%20%2F%2F%20pour%20comparaison%20nouvelle%2Fancienne%20valeur%20de%20temp%C3%A9rature%0A%0A%23define%20DHTPIN%20D2%20%20%20%20%20%2F%2F%20D2%20correspond%20au%20PIN4%20de%20l’Arduino%20–%3E%20voir%20https%3A%2F%2Fgithub.com%2Fesp8266%2FArduino%2Fblob%2Fmaster%2Fvariants%2Fnodemcu%2Fpins_arduino.h%23L37-L59%0A%2F%2F%23define%20DHTPIN%20D4%20%20%20%20%20%2F%2F%20D4%20correspond%20au%20PIN2%0A%0A%23define%20DHTTYPE%20DHT11%20%20%20%2F%2F%20DHT%2011%0A%0ADHT%20dht(DHTPIN%2C%20DHTTYPE)%3B%0A%0Avoid%20setup()%20%7B%0A%20%20Serial.begin(115200)%3B%0A%20%20delay(10)%3B%0A%0A%20%20dht.begin()%3B%0A%0A%20%20Serial.print(%22Connecting%20to%20%22)%3B%0A%20%20Serial.println(ssid)%3B%0A%20%20%0A%20%20WiFi.begin(ssid%2C%20password)%3B%0A%20%20%0A%20%20while%20(WiFi.status()%20!%3D%20WL_CONNECTED)%20%7B%0A%20%20%20%20delay(500)%3B%0A%20%20%20%20Serial.print(%22.%22)%3B%0A%20%20%7D%0A%0A%20%20Serial.println(%22WiFi%20connected%22)%3B%20%20%0A%20%20Serial.println(%22IP%20address%3A%20%22)%3B%0A%20%20Serial.println(WiFi.localIP())%3B%0A%7D%0A%0Avoid%20loop()%20%7B%0A%20%20delay(5000)%3B%0A%20%20%2B%2Bvalue%3B%0A%0A%20%20%2F%2F%20Lecture%20valeur%20DHT11%0A%20%20int%20t%20%3D%20dht.readTemperature()%3B%0A%20%20int%20h%20%3D%20dht.readHumidity()%3B%0A%20%20if%20(isnan(h)%20%7C%7C%20isnan(t)%20)%20%0A%20%20%7B%0A%20%20%20%20Serial.println(%22Failed%20to%20read%20from%20DHT%20sensor!%22)%3B%0A%20%20%20%20return%3B%0A%20%20%7D%0A%20%20%2F%2F%20Fin%20lecture%20valeur%20DHT11%0A%0A%20%20%2F%2F%20Si%20la%20temp%C3%A9rature%20a%20chang%C3%A9%20depuis%20la%20derni%C3%A8re%20lecture%20(ou%20si%20sup%C3%A9rieur%20%C3%A0%2070%C2%B0C%20%3D%3D%3E%20pb%20lecture)%0A%20%20if%20(%20t%20!%3D%20t_old%20%26%26%20t%20%3C%2070%20)%0A%20%20%7B%0A%20%20%20%20%20%20%2F%2F%20On%20affiche%20la%20temp%C3%A9rature%20mesur%C3%A9e%20dans%20le%20moniteur%20Serial%0A%20%20%20%20%20%20Serial.print(%22Temperature%20%3A%20%22)%3B%0A%20%20%20%20%20%20Serial.print(t)%3B%0A%20%20%20%20%20%20Serial.println(%22%20C%22)%3B%0A%20%20%20%20%20%20%0A%20%20%20%20%20%20Serial.print(%22connecting%20to%20%22)%3B%0A%20%20%20%20%20%20Serial.println(host)%3B%0A%20%20%20%20%20%20%0A%20%20%20%20%20%20WiFiClient%20client%3B%0A%20%20%20%20%20%20const%20int%20httpPort%20%3D%2080%3B%0A%20%20%20%20%20%20if%20(!client.connect(host%2C%20httpPort))%20%7B%0A%20%20%20%20%20%20%20%20Serial.println(%22connection%20failed%22)%3B%0A%20%20%20%20%20%20%20%20return%3B%0A%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20%2F%2F%20On%20construit%20l’URL%20pour%20transmettre%20la%20temp%C3%A9rature%20via%20un%20’virtuel’%20Jeedom%0A%20%20%20%20%20%20String%20url%20%3D%20%22%2Fcore%2Fapi%2FjeeApi.php%3Fapikey%3D%22%3B%0A%20%20%20%20%20%20url%20%2B%3D%20APIKEYJEEDOM%3B%0A%20%20%20%20%20%20url%20%2B%3D%20%22%26type%3Dvirtual%26id%3D%22%3B%0A%20%20%20%20%20%20url%20%2B%3D%20NumeroVirtuel%3B%0A%20%20%20%20%20%20url%20%2B%3D%20%22%26value%3D%22%3B%0A%20%20%20%20%20%20url%20%2B%3D%20t%3B%0A%20%20%20%20%20%20%0A%20%20%20%20%20%20%2F%2F%20On%20envoie%20l’URL%20au%20serveur%20JEEDOM%0A%20%20%20%20%20%20client.print(String(%22GET%20%22)%20%2B%20url%20%2B%20%22%20HTTP%2F1.1%5Cr%5Cn%22%20%2B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22Host%3A%20%22%20%2B%20host%20%2B%20%22%5Cr%5Cn%22%20%2B%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22Connection%3A%20close%5Cr%5Cn%5Cr%5Cn%22)%3B%0A%20%20%20%20%20%20unsigned%20long%20timeout%20%3D%20millis()%3B%0A%20%20%20%20%20%20while%20(client.available()%20%3D%3D%200)%20%7B%0A%20%20%20%20%20%20%20%20if%20(millis()%20-%20timeout%20%3E%205000)%20%7B%0A%20%20%20%20%20%20%20%20%20%20Serial.println(%22%3E%3E%3E%20Client%20Timeout%20!%22)%3B%0A%20%20%20%20%20%20%20%20%20%20client.stop()%3B%0A%20%20%20%20%20%20%20%20%20%20return%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%0A%20%20%20%20%20%20%2F%2F%20Facultatif%20%3A%20on%20regarde%20la%20r%C3%A9ponse%20du%20serveur%20Jeedom%20et%20on%20l%20affiche%20dans%20la%20console%20Serial%0A%20%20%20%20%20%20while(client.available())%7B%0A%20%20%20%20%20%20%20%20String%20line%20%3D%20client.readStringUntil(‘%5Cr’)%3B%0A%20%20%20%20%20%20%20%20%2F%2FSerial.print(line)%3B%20%2F%2F%20Pour%20DEBUG%0A%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20Serial.println()%3B%0A%20%20%20%20%20%20Serial.println(%22closing%20connection%22)%3B%0A%0A%20%20%20%20%20%20%2F%2F%20On%20affecte%20la%20nouvelle%20valeur%20de%20temp%C3%A9rature%20au%20%22old%22%0A%20%20%20%20%20%20t_old%20%3D%20t%20%3B%0A%20%20%20%20%20%20%0A%20%20%7D%20%2F%2F%20fin%20de%20SI%20la%20temp%20a%20chang%C3%A9%0A%7D » message= »Code pour Wemos D1 avec un DHT11″ highlight= » » provider= »manual »/]

Il faudra que vous personnalisiez les lignes :

  • 4 = le nom du réseau Wifi sur lequel vous souhaitez vous connecter
  • 5 = la clé WEP/WPA associé…
  • 6 = l’adresse IP de la box domotique Jeedom
  • 7 = la clé API du plugin ‘virtuel’ dans Jeedom
  • 8 = le numéro de votre capteur ‘virtuel’ dans Jeedom

Téléversement dans le Wemos D1 :

Il ne reste plus que le téléversement dans la carte Wemos ‘compatible’.

Contrairement à un simple ESP8266 où il faut un FT232RL ou tout autre ‘bricolage’, le téléversement du scénario se fait comme avec un Arduino classique. Il faut juste ajouter la carte Wemos à votre IDE Arduino :

  1. Dans l’IDE, cliquez sur « Fichier » – « Préférence » puis ajouter « http://arduino.esp8266.com/stable/package_esp8266com_index.json » dans « URL de gestionnaire de cartes supplémentaires ».
  2. Puis dans « Outils » – « Type de carte » – « Gestionnaire de carte », cherchez et installez « esp8266 by ESP8266 Community »
  3. Ensuite, comme pour une carte Arduino classique, sélectionnez le port COM adéquat ainsi qu’une vitesse d’upload à 115200 et bien sûr, changer le type de carte !

Wemos : Arduino + ESP8266

Le tour est joué !

Pour ma part, cela a fonctionné du premier coup (ou presque -lire ci dessous-). C’est donc une solution facile pour mettre en place un Arduino en Wifi (qui nécessitera que quelques PINs… puisque l’ESP en vampirise pas mal).

Les PINs DATA sur un Wemos D1

Vous l’aurez peut être noté dans mon scénario, ligne 10 et 11, les PINs sur l’Arduino ne correspondent pas à ce qu’il faut coder dans l’IDE. Une table des correspondances est disponible ici.


Matériel utilisé pour cet article sur l’Arduino Wifi :

  • Wemos D1 ‘compatible’, acheté à 3.50 euros (fdp compris) le 22/07/2016 et reçu 17 après.
  • Une sonde de température DHT11, achetée 65 cts (fdp compris)

Cet article fait partie d’une série d’articles sur la box domotique Jeedom, les micro-contrôleurs Arduino et compatible, le tout en DIY (Do It Yourself). Consultez la liste complète des articles de cette thématique en cliquant ici.


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