Vous pouvez le télécharger ici.
Transcription
Vous pouvez le télécharger ici.
/* ESP8266 HTU21D IOT AUTO par Nicolas Buis dans le cadre du concour Ambassadeur 2016 Conrad Electronique. Ce code, donné à titre d'exemple est dans le dommaine publique */ //Generique Lib #include <ESP8266WiFi.h> //https://github.com/esp8266/Arduino //Wifi manager Lib #include <DNSServer.h> #include <ESP8266WebServer.h> #include <WiFiManager.h> //https://github.com/tzapu/WiFiManager //i2c Lib #include <Wire.h> #include <OneWire.h> #include "DallasTemperature.h" // dans le repertoire source. //Sensor Lib #include "ESP_HTU21D.h" // dans le repertoire source. //Pour le status de la Led #include <Ticker.h> Ticker ticker; //Definition des constantes. const int Led = 2; //Pin d'alimentation de la Led const int Rwm = 12; //Pin du boutton de reset des parametres de wifi Manager const int sda = 12; //Pin Data du bus I2C const int scl = 14; //Pin Clock du bus I2C const long interval = 6 * 60; //intervale de mesure et de puch sur le cloud IOT en seconde const long connect_timeout = 4 * 1000; //timeout de connection au réseai wifi const char* host = "api.thingspeak.com"; const char* thingspeak_key = "TS API WRITE KEY"; //Définition des variables String temp = ""; String hum = ""; String dtemp = ""; String wifitime = ""; long interval_time = 0; //Création d'une instance de l'objet ESP_HTU21D ESP_HTU21D tu; #define ONE_WIRE_BUS 13 // DS18B20 pin OneWire oneWire(ONE_WIRE_BUS); DallasTemperature DS18B20(&oneWire); void tick() { //toggle led state int state = digitalRead(Led); digitalWrite(Led, !state); // get the current state of GPIO1 pin // set pin to the opposite state } // Si erreur sur bus i2c ou mauvaise CRC retourne 0 sinon 1 boolean readsensor() { tu.begin(sda, scl); float u = tu.readHumidity(); float t = tu.readTemperature(); float d; int tomany = 0; do { tomany++; DS18B20.requestTemperatures(); d = DS18B20.getTempCByIndex(0); } while (d == 85.0 || d == (-127.0) && (tomany < 10)); //digitalWrite(htuPower, LOW); if ( u > 997 || t > 997 || d == 85.0 || d == -127.0) { Serial.println("Sensor error"); Serial.println(u); Serial.println(t); Serial.println(d); return 0; } dtemp = String(d); hum = String(u); temp = String(t); return 1; } void publish() { Serial.print("connection à "); Serial.println(host); // TCP connection à thingspeak WiFiClient client; const int httpPort = 80; if (!client.connect(host, httpPort)) { Serial.println("Erreur connection !"); return; } String url += url += url += url += url += url += url += url += url += url = "/update?key="; thingspeak_key; "&1="; temp; "&2="; hum; "&3="; dtemp; "&8="; wifitime; Serial.print("URL: "); Serial.println(url); // Envoie les données vers thingspeak client.print(String("GET ") + url + " HTTP/1.1\r\n" + "Host: " + host + "\r\n" + "Connection: close\r\n\r\n"); delay(50); // Lit et affiche le retour du server while (client.available()) { String line = client.readStringUntil('\r'); Serial.print(line); } Serial.println(); Serial.println("connection terminée."); } void setup() { interval_time = millis(); pinMode(ONE_WIRE_BUS, OUTPUT); digitalWrite(ONE_WIRE_BUS, HIGH); pinMode(Led, OUTPUT); digitalWrite(Led, HIGH); ticker.attach_ms(50, tick); Serial.begin(250000); pinMode(Rwm, INPUT_PULLUP); if (digitalRead(Rwm) == LOW) { ticker.attach_ms(250, tick); WiFiManager wifiManager; if (!wifiManager.startConfigPortal("Mini-S")) { Serial.println("failed to connect and hit timeout"); delay(3000); //reset and try again, or maybe put it to deep sleep? ESP.reset(); delay(3000); } // cool connecté ! Serial.println("connecté au nouveau réseau ... :)"); ESP.reset(); delay(3000); } boolean timeout = false; while (WiFi.status() != WL_CONNECTED) { delay(10); //Serial.print("."); if ( millis() - interval_time > connect_timeout) { timeout = true; break; } } if (timeout) { ticker.detach(); digitalWrite(BUILTIN_LED, HIGH); Serial.println(""); Serial.println("Wifi Connection timeout! Reveil dans 3 minutes"); system_deep_sleep(3 * 60 * 1000000); // réessaye dans 3 minute delay(3000); } interval_time = millis() - interval_time; wifitime = String(interval_time); Serial.println(""); Serial.print("Temps connection Wifi: "); Serial.println(interval_time); // ticker.attach_ms(50, tick); ticker.detach(); digitalWrite(BUILTIN_LED, LOW); if (readsensor()) { // ticker.attach_ms(25, tick); publish(); } //LED off digitalWrite(BUILTIN_LED, HIGH); interval_time = (interval * 1000 ) - interval_time; system_deep_sleep_set_option(0); system_deep_sleep(interval_time * 1000); delay(1); } void loop() { //rien ici... }