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...
}

Documents pareils