Station météo à base de ESP8266 V2

Je vous présente aujourd’hui la version 2 de ma Station Météo Personnel réalisé autour d’un ESP8266.

24102015-20151024_135536

Le montage est composé d’un ESP8266 avec plateforme de développement NodeMCU V2. Et la Programmation s’effectuera avec l’IDE de l’Arduino (cliquez ici pour suivre ce tuto).

nodemcuv2NodeMCU_Pinout

Les parties mécaniques de la station, Anémomètre, Pluviomètre et le boitier Thermo/Hygromètre ont été récupéré sur une station WMR200.

Le fonctionnement de Anémomètre est conservé, Un tour des godets active un interrupteur magnétique ILS ( 2.5km/h par commutation toute les seconde). La direction est obtenu à l’aide de 8 interrupteur magnétique ILS.

La partie Thermo/Hygromètre contiens le baromètre (BME280) avec le ESP8266 NodeMCU.

Le Chargeur dans le petit boitier ou il y avait le panneau solaire et la Batterie dans la petite boite de dérivation

22102015-20151022_205543 22102015-20151022_021044 22102015-20151022_002907 22102015-20151022_001328 21102015-20151021_210716

Le Pluviomètre est quant à lui composé d’un simple un interrupteur magnétique ILS, Chaque 0.8mm les godets bascule et active l’ILS.

22102015-20151022_222405

Voici le schéma de connexion des divers capteur:

ESP8266-PWS-V2

Vous pouvez télécharger le sketch et librairies ici ou le visualiser ici.

Pour consulter les données de la station vous pouvez cliquez ici.

Pour marque-pages : Permaliens.

11 réponses à Station météo à base de ESP8266 V2

  1. Bruce dit :

    Good work, Jordan – I am working on a similar project, and your code will help me now I have the hardware!

    The only difference is that I am going to use contactless sensors for speed and direction , as I have found that contact bounces can be a real problem – there are Hall Effect sensors that work well, and a cheap I2C magnetic compass sensor for the wind direction.

    thank you for posting your work, so others like me can benefit from it.

    • Jordan BLANCHARD dit :

      Debouce is a real problem, i use that in my code to reduce that:
      void rpm() {
      long thisTime=micros()-wind_last;
      wind_last=micros();
      if(thisTime>500)
      {

      pulseswind++;
      pulsesgust++;
      if (debug) {
      Serial.print(« Nb wind turn: « );
      Serial.println(pulseswind);
      }
      }
      }
      If bounce time is inferior than 500us i don’t take care.

      Using Hal sensor and compass it’s a good idea, i think i will use that for an other weather station.

  2. Quentin dit :

    Salut,

    Je suis en train de monter une station météo à l’aide de l’ESP8266 et du BME280.
    J’ai une erreur importante sur la température (de l’ordre de 4°), as-tu eu le même problème ?

    D’où vient ton BME280 ?

    Merci !!! 🙂

    • Jordan BLANCHARD dit :

      Salut!

      Dans mon code j’ai ajouter ceci:
      int temp_offset = -4; // Temp. Offset
      int humi_offset = 10; // Humidity Offset
      Effectivement pour moi j’avais une légère différence, que j’ai combler par un offset, vérifie si pour toi cela est nécessaire.

      J’ai eu mon BME280 chez adafruit.

  3. Ping :Short cuts | organic~monkey~motion

  4. manu k dit :

    I want to build this as my town has No PWS
    I have made NodeMCU small weather station and its working but only able to publish to thingspeak

    Can this be made with BMP180 +DHT11 and skip the Anemometer ?

    please suggest.

    • Jordan BLANCHARD dit :

      Yes you can, only thing you must folow it’s the wunderground protocol http://wiki.wunderground.com/index.php/PWS_-_Upload_Protocol
      Just use the variable you need when you build the request:
      String url = "/weatherstation/updateweatherstation.php?ID=";
      url += WUID;
      url += "&PASSWORD=";
      url += WUPASS;
      url += "&dateutc=now&winddir=";
      url += winddir;
      url += "&windspeedmph=";
      url += windspeed;
      url += "&windgustmph=";
      url += windgust;
      url += "&tempf=";
      url += tempout;
      url += "&dewptf=";
      url += dewpout;
      url += "&humidity=";
      url += humidity;
      url += "&baromin=";
      url += baro;
      url += "&rainin=";
      url += rain1h;
      url += "&dailyrainin=";
      url += rain24h;
      url += "&weather=&clouds=&softwaretype=Arduino-ESP8266&action=updateraw";

  5. Eneko dit :

    Hello Jordan,

    First of all, good work, very helpfull for me because I’m working on a similar project.
    But I have one question that I can’t clarify reading the API of wunderground. The calls to upload data to wunderground from my station count as calls? If so, in a free account are limited to 500 per day?
    Because using the rapidfire method goes up every 2.5 seconds.
    May seem like a silly question but it is very important for me to know.

    Thank you!

  6. Dogan dit :

    i build my station but i do not understand the upload protocol to wunderground. is there a sample sketch for that? i can easily update thingspeak channel but cant figure the wundergorund out.

  7. Dave dit :

    Hi Jordan,

    I wanted to say « thank you » for publishing your project and code.

    It took me a bit, but using your design as a starting point, adapted it to use common ebay wind sensors via an I2C ADC. I also added OTA updates, so the code can be tweeked on the fly without messing with the station.The station has been up and running for the last 6 months or so here in the midwest of the USA.

    One issue has emerged: Some of the most interesting weather (storms) often take out the mains power and with it the router. All the station data is lost until the router comes back up. It would be nice if the station could store the data if it cant reach the server, then dump all the data once the server comes back up.I have come up with a possible solution, but the code might be beyond my skill-set. If you might be interested in taking a look, send me an email.

    Thanks again!

    -Dave

  8. Jaco Botha dit :

    Where do you call the function rain(). I do not see it in your code.

Laisser un commentaire

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