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 :

#include <ESP8266WiFi.h>
#include "dht22.h"

const char* ssid     = "votre-reseau-wifi";
const char* password = "votre-cle-wifi";
const char* host = "192.168.19.40";
String APIKEYJEEDOM = "lhdfvgazpoknvcjhgvazd"; // la clé API de Jeedom pour le 'virtuel'
String NumeroVirtuel = "650"; // le numéro du 'virtuel' Jeedom
int value = 0; // la valeur à envoyer dans le 'virtuel' ci-dessus
int t_old = 0; // pour comparaison nouvelle/ancienne valeur de température

#define DHTPIN D2     // D2 correspond au PIN4 de l'Arduino --> voir https://github.com/esp8266/Arduino/blob/master/variants/nodemcu/pins_arduino.h#L37-L59
//#define DHTPIN D4     // D4 correspond au PIN2

#define DHTTYPE DHT11   // DHT 11

DHT dht(DHTPIN, DHTTYPE);

void setup() {
  Serial.begin(115200);
  delay(10);

  dht.begin();

  Serial.print("Connecting to ");
  Serial.println(ssid);
  
  WiFi.begin(ssid, password);
  
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }

  Serial.println("WiFi connected");  
  Serial.println("IP address: ");
  Serial.println(WiFi.localIP());
}

void loop() {
  delay(5000);
  ++value;

  // Lecture valeur DHT11
  int t = dht.readTemperature();
  int h = dht.readHumidity();
  if (isnan(h) || isnan(t) ) 
  {
    Serial.println("Failed to read from DHT sensor!");
    return;
  }
  // Fin lecture valeur DHT11

  // Si la température a changé depuis la dernière lecture (ou si supérieur à 70°C ==> pb lecture)
  if ( t != t_old && t < 70 )
  {
      // On affiche la température mesurée dans le moniteur Serial
      Serial.print("Temperature : ");
      Serial.print(t);
      Serial.println(" C");
      
      Serial.print("connecting to ");
      Serial.println(host);
      
      WiFiClient client;
      const int httpPort = 80;
      if (!client.connect(host, httpPort)) {
        Serial.println("connection failed");
        return;
      }

      // On construit l'URL pour transmettre la température via un 'virtuel' Jeedom
      String url = "/core/api/jeeApi.php?apikey=";
      url += APIKEYJEEDOM;
      url += "&type=virtual&id=";
      url += NumeroVirtuel;
      url += "&value=";
      url += t;
      
      // On envoie l'URL au serveur JEEDOM
      client.print(String("GET ") + url + " HTTP/1.1\r\n" +
                   "Host: " + host + "\r\n" + 
                   "Connection: close\r\n\r\n");
      unsigned long timeout = millis();
      while (client.available() == 0) {
        if (millis() - timeout > 5000) {
          Serial.println(">>> Client Timeout !");
          client.stop();
          return;
        }
      }
      
      // Facultatif : on regarde la réponse du serveur Jeedom et on l affiche dans la console Serial
      while(client.available()){
        String line = client.readStringUntil('\r');
        //Serial.print(line); // Pour DEBUG
      }

      Serial.println();
      Serial.println("closing connection");

      // On affecte la nouvelle valeur de température au "old"
      t_old = t ;
      
  } // fin de SI la temp a changé
}
Code pour Wemos D1 avec un DHT11

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+
Tweet about this on Twitter
Twitter