Publié le

Afficher les données de Netatmo avec… Un ESP8266 ESP1

Et pourquoi ne pas réduire un peu ce que j’ai fait sur l’autre tuto ?

Alors oui on pourrait remplacer l’Arduino Méga par un nano, mais pour le Wifi on fait comment ?

Dans mon précédant tuto, je parle de l’ESP8266, mais comment ça fonctionne ?

1. L’ESP8266

Voici l’ESP8266 ESP01.

WiFi Serial Transceiver Module

On pourrait reprendre la formule « Petit mais costaud », c’est petit, assez sympa, mais aussi très galère au début quand on y connait rien !

1.1 Les pins :

images

8 pins seulement, on a pas besoin de plus (on pourrait même faire avec 6…).

1.2 On le programme avec Arduino IDE !

Et oui, on ne s’embête pas pour le programmer on peut le faire à l’aide de l’IDE Arduino, mais avant il faut la préparer un peu :

1.2.1 Configuration de l’interface Arduino :

Alors dans un premier temps on installe Arduino 1.6.5.

On ouvre les préférences et dans « Additional Bords Manager URLs » on ajoute l’URL

http://arduino.esp8266.com/stable/package_esp8266com_index.json

prefs

Et on clique sur Ok.

Ensuite on va dans Outils > type de carte > Boards Manager , dans le champ de recherche on tape esp8266 et On voit apparaitre un cadre avec esp8266… On clique dessus puis sur install.

Une fois installé dans Outils > type de carte en bas on va retrouver l’esp8266 :

Esp

 

On utilisera le type de carte « Generic ESP8266 module ». L’interface est donc prête, on ferme l’interface Arduino pour installer les librairies.

1.2.2 Installation des librairies :

Première étape, on va sur le Github de Sandeepmistery et on télécharge la dernière release.

Ensuite on va dans le dossier Arduino, le dossier dans mes documents qui contient les sketches Arduino et on crée un dossier hardware.

Une fois le fichier télécharger (archive Zip) on copie-colle le dossier esp8266 dans le dossier hardware que nous venons de créer.

Attention : mon nom de compte sur mon pc est JiPé et Arduino n’aime pas ça, j’ai donc un second compte utilisateur nomé JiP, (oui oui avec une virgule à la place du é) et c’est dans ce compte utilisateur que j’ai du faire ces manipulations.

 

2. Premiers pas : récupération du fichier out.txt.

On revient en fait à l’étape 3.1 du tuto  Afficher les données Netatmo avec un Arduino.

Voici le code utilisé (d’après un exemple contenu dans la libairie esp8266wifi) :

#include <ESP8266WiFi.h>

const char* ssid     = "SSID Wifi";
const char* password = "MDP Wifi";

const char* host = "192.168.1.50";

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

  // We start by connecting to a WiFi network

  Serial.println();
  Serial.println();
  Serial.print("Connecting to ");
  Serial.println(ssid);

  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }

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

int value = 0;

void loop() {
  ++value;

  Serial.print("connecting to ");
  Serial.println(host);

  // Use WiFiClient class to create TCP connections
  WiFiClient client;
  const int httpPort = 80;
  if (!client.connect(host, httpPort)) {
    Serial.println("connection failed");
    return;
  }

  // We now create a URI for the request
  String url = "/Netatmo/out.txt";


  Serial.print("Requesting URL: ");
  Serial.println(url);

  // This will send the request to the server
  client.print(String("GET ") + url + " HTTP/1.1\r\n" +
 "Host: " + host + "\r\n" + 
 "Connection: close\r\n\r\n");
  delay(10);

  // Read all the lines of the reply from server and print them to Serial
  while(client.available()){
    String line = client.readStringUntil('r');
    Serial.print(line);
  }

  Serial.println();
  Serial.println("closing connection");
  delay(60000);
}

Et en sortie j’obtient :

Capture

 

3. Affichage LCD des données reçues :

Alors la partie qui m’a pris le plus de temps (en oubliant une ligne dans le code c’est sur que ça ne peut pas fonctionner).

L’ESP8266 ESP1 a deux GPIO qui peuvent servir pour l’I2C :

  • GPIO0 => SDA
  • GPIO2 => SCL

Du coup il est facile d’afficher sur un écran LCD avec une interface I2C.

Voici le code utilisé :

#include <LiquidCrystal_I2C.h>
#include <Wire.h>
#include <ESP8266WiFi.h>

LiquidCrystal_I2C lcd(0x27, 16, 2);

const char* ssid     = "SSID Wifi";
const char* password = "MDP Wifi";

const char* host = "192.168.1.50";

void setup() {
  Serial.begin(115200);
  delay(10);
  Wire.begin(0,2);                                  //LIGNE LA PLUS IMPORTANTE POUR DEMARRER L'I2C SUR L'ESP8266
  lcd.begin();
  lcd.backlight();

  // We start by connecting to a WiFi network

  Serial.println();
  Serial.println();
  Serial.print("Connecting to ");
  Serial.println(ssid);

  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }

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

int value = 0;

void loop() {

  ++value;

  Serial.print("connecting to ");
  Serial.println(host);

  // Use WiFiClient class to create TCP connections
  WiFiClient client;
  const int httpPort = 80;
  if (!client.connect(host, httpPort)) {
    Serial.println("connection failed");
    return;
  }

  // We now create a URI for the request
  String url = "/Netatmo/out.txt";


  Serial.print("Requesting URL: ");
  Serial.println(url);

  // This will send the request to the server
  client.print(String("GET ") + url + " HTTP/1.1\r\n" +
 "Host: " + host + "\r\n" + 
 "Connection: close\r\n\r\n");
  delay(10);
  String line = "";
  // Read all the lines of the reply from server and print them to Serial
  while(client.available()){
    line = client.readStringUntil('r');
   // Serial.print(line);
  }

//Serial.println(line);



char messageChar[500];
  line.toCharArray(messageChar,500);

  char dlm[] = "[";
            int cnt = 0;
            char* tab[255] = { 0 };
            char *pch = strtok(messageChar, dlm);
            while ( pch != NULL ) {
              if (cnt < 60) {
              tab[cnt++] = pch;
              } else {
              break;
              }
            pch = strtok (NULL, dlm);
            }


  char *chaine = tab[1];
  //Serial.println(chaine);
  char dlm2[] = "n";
            int cnt2 = 0;
            char* tab2[255] = { 0 };
            char *pch2 = strtok(chaine, dlm2);
            while ( pch2 != NULL ) {
              if (cnt2 < 60) {
              tab2[cnt2++] = pch2;
              } else {
              break;
              }
            pch2 = strtok (NULL, dlm2);
            }

lcd.clear();
lcd.print("T:");
lcd.print(tab2[0]);
lcd.print(" CO2:");
lcd.print(tab2[1]);
lcd.setCursor(0,1);
lcd.print("H:");
lcd.print(tab2[2]);
lcd.print(" P:");
lcd.print(tab2[3]);

  Serial.println();
  Serial.println("closing connection");
  delay(60000);
}

Et du coup :

 

IMG_0012

10 réflexions au sujet de « Afficher les données de Netatmo avec… Un ESP8266 ESP1 »

  1. Bonjour,

    L’archive source de Github de Sandeepmistery n’est plus dispo peux tu me la transférer car ton projet m’ interesse beaucoup

    1. J’envoie un mail au dév de la library

    2. Alors en fait on en a plus besoin (étape à sauter du coup)

  2. bonjour, super projet je cherche ça depuis plusieurs semaines.
    je m’y connais peu en dev c’est possible de l’adapter avec un écran oled comme sur ce porjet :
    http://www.projetsdiy.fr/scanner-wifi-ecran-oled-i2c-ssd1306-esp01-esp8266/#.WAB7zCQ081Y

    merci

    1. C’est possible sans soucis un ami l’a fait ;D

      1. Est ce possible d’avoir les sources ?

  3. bonjour,
    est il possible d’avoir le fichier ino svp, car je suis plus que novice en prog

    merci

  4. Un petit up

    1. vous avez juste à faire un copier coller du code donné des 3.

  5. Bonjour,

    Super tuto, merci beaucoup. Par contre à quoi correspond l’adresse IP « HOST »?

    Merci

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *