From: Emmanuel Lacour Date: Wed, 3 Jan 2024 11:29:20 +0000 (+0100) Subject: Add "grande chambre" (using esp8266 nodemcu) X-Git-Url: http://git.home-dn.net/?p=manu%2Farduino-maison.git;a=commitdiff_plain;h=HEAD;hp=c2263c0c69da7fea06826d04d6061f174c2c89f9 Add "grande chambre" (using esp8266 nodemcu) --- diff --git a/garage/garage.ino b/garage/garage.ino index 2467f07..fbe2d77 100644 --- a/garage/garage.ino +++ b/garage/garage.ino @@ -1,9 +1,8 @@ #include #include #include -#include -#include -#include +#include +#include #include #include "garage-config.h" @@ -25,9 +24,16 @@ String location = LOCATION; WiFiUDP Udp; // Temp -#define DHTPIN 19 -#define DHTTYPE DHT22 -DHT_Unified dht(DHTPIN, DHTTYPE); +// GPIO where the DS18B20 is connected to +const int oneWireBus = 19; +// Setup a oneWire instance to communicate with any OneWire devices +// ROM = 28 C6 C9 81 E3 6E 3C C ROM = 28 31 A7 1D 13 21 1 F6 ROM = 28 15 8E 4B 13 21 1 46 No more addresses. +DeviceAddress sensor_heater_out = {0x28, 0x31, 0xA7, 0x1D, 0x13, 0x21, 0x01, 0xF6}; +DeviceAddress sensor_serre = {0x28, 0x15, 0x8E, 0x4B, 0x13, 0x21, 0x01, 0x46}; +DeviceAddress sensor_heater_in = {0x28, 0xC6, 0xC9, 0x81, 0xE3, 0x6E, 0x3C ,0x0C}; +OneWire oneWire(oneWireBus); +// Pass our oneWire reference to Dallas Temperature sensor +DallasTemperature sensors(&oneWire); // Uptime timer boolean tick1sec=0;// one for interrupt, don't mess with @@ -61,15 +67,17 @@ void setup() { WiFi.mode(WIFI_STA); WiFi.begin(WIFI_SSID, WIFI_PASS); - + delay(500); + while (WiFi.status() != WL_CONNECTED) { + WiFi.begin(wifi_ssid, wifi_pass); delay(500); + if (WiFi.status() != WL_CONNECTED) { + delay(2000); + } } - dht.begin(); - sensor_t sensor; - dht.temperature().getSensor(&sensor); - dht.humidity().getSensor(&sensor); + sensors.begin(); tinfo.init(TINFO_MODE_STD); tinfo.attachDataStd(DataCallback); @@ -83,33 +91,41 @@ void loop() { fulldata = true; previousMillis = millis(); - // Check wifi connexion - if ( WiFi.status() != WL_CONNECTED ) { - int retry = 0; - WiFi.mode(WIFI_STA); + // Reconnect if needed + while (WiFi.status() != WL_CONNECTED) { WiFi.begin(WIFI_SSID, WIFI_PASS); - while (retry < 10 || WiFi.status() != WL_CONNECTED) { - retry++; - delay(500); + delay(500); + if (WiFi.status() != WL_CONNECTED) { + delay(2000); } } if ( WiFi.status() == WL_CONNECTED ) { Serial.println("DEBUG wifi connected, start temp measure"); - sensors_event_t event; + + sensors.requestTemperatures(); + float serre_tempC = sensors.getTempC(sensor_serre); + float heater_out_tempC = sensors.getTempC(sensor_heater_out); + float heater_in_tempC = sensors.getTempC(sensor_heater_in); + + if(serre_tempC == DEVICE_DISCONNECTED_C) { + // Error + } else { + sendToInfluxDB("temperature,city="+city+",location=serre-semis", "value", String(serre_tempC)); + } - dht.temperature().getEvent(&event); - if (isnan(event.temperature)) { + if(heater_out_tempC == DEVICE_DISCONNECTED_C) { // Error } else { - sendToInfluxDB("temperature,city="+city+",location="+location, "value", String(event.temperature)); + sendToInfluxDB("temperature,city="+city+",location=heater,direction=out", "value", String(heater_out_tempC)); } - dht.humidity().getEvent(&event); - if (isnan(event.relative_humidity)) { + + if(heater_in_tempC == DEVICE_DISCONNECTED_C) { // Error } else { - sendToInfluxDB("humidity,city="+city+",location="+location, "value", String(event.relative_humidity)); + sendToInfluxDB("temperature,city="+city+",location=heater,direction=in", "value", String(heater_in_tempC)); } + sendToInfluxDB("teleinfo,city="+city+",location="+location, "SINSTS", tinfo_SINSTS); sendToInfluxDB("teleinfo,city="+city+",location="+location, "SINSTS1", tinfo_SINSTS1); sendToInfluxDB("teleinfo,city="+city+",location="+location, "SINSTS2", tinfo_SINSTS2); diff --git a/getonewireaddrs/getonewireaddr/getonewireaddr.ino b/getonewireaddrs/getonewireaddr/getonewireaddr.ino new file mode 100644 index 0000000..6cfa27f --- /dev/null +++ b/getonewireaddrs/getonewireaddr/getonewireaddr.ino @@ -0,0 +1,32 @@ +/* + * Rui Santos + * Complete Project Details https://randomnerdtutorials.com + */ + +#include + +// Based on the OneWire library example + +OneWire ds(19); //data wire connected to GPIO 4 + +void setup(void) { + Serial.begin(115200); +} + +void loop(void) { + byte i; + byte addr[8]; + + if (!ds.search(addr)) { + Serial.println(" No more addresses."); + Serial.println(); + ds.reset_search(); + delay(250); + return; + } + Serial.print(" ROM ="); + for (i = 0; i < 8; i++) { + Serial.write(' '); + Serial.print(addr[i], HEX); + } +} diff --git a/grande-chambre/grande-chambre-config.h.in b/grande-chambre/grande-chambre-config.h.in new file mode 100644 index 0000000..4a1402d --- /dev/null +++ b/grande-chambre/grande-chambre-config.h.in @@ -0,0 +1,13 @@ +// Enable debug on serial port +#define DEBUG 1 +// Wifi +#define WIFI_SSID "XXXXXX" +#define WIFI_PASS "xxxxxx" +// InfluxDB +#define INFLUXDB_IP {w,x,y,z} +#define INFLUXDB_PORT xxxx +// Polling interval (ms) +#define POLL_INT 10000 +// Location informations +#define CITY "xxxxx" +#define LOCATION "xxxxx" diff --git a/grande-chambre/grande-chambre.ino b/grande-chambre/grande-chambre.ino new file mode 100644 index 0000000..0d36ca5 --- /dev/null +++ b/grande-chambre/grande-chambre.ino @@ -0,0 +1,83 @@ +// Board ESP8266 - NodeMCU 1.0 (ESP-12E module) +#include +#include +#include +#include +#include +#include + +#include "grande-chambre-config.h" + +const char* wifi_ssid = WIFI_SSID; +const char* wifi_pass = WIFI_PASS; + +// Grafana +IPAddress influxdb_ip(INFLUXDB_IP); +long influxdb_port = INFLUXDB_PORT; +unsigned int localPort = 2390; +// MilliSeconds +long unsigned poll_int = POLL_INT; +String city = CITY; +String location = LOCATION; +WiFiUDP Udp; + +// Temp +// 5 = D1 on esp8266 +#define DHTPIN 5 +#define DHTTYPE DHT22 +DHT_Unified dht(DHTPIN, DHTTYPE); + +void setup() { + + Serial.begin(9600); + // Not for esp8266 WiFi.mode(WIFI_STA); + WiFi.begin(WIFI_SSID, WIFI_PASS); + while (WiFi.status() != WL_CONNECTED) { + delay(500); + } + + dht.begin(); + sensor_t sensor; + dht.temperature().getSensor(&sensor); + dht.humidity().getSensor(&sensor); + +} + +void loop() { + delay(POLL_INT); + // Check wifi connexion + if ( WiFi.status() != WL_CONNECTED ) { + int retry = 0; + // Not for esp8266 WiFi.mode(WIFI_STA); + WiFi.begin(WIFI_SSID, WIFI_PASS); + while (retry < 10 || WiFi.status() != WL_CONNECTED) { + retry++; + delay(500); + } + } + + if ( WiFi.status() == WL_CONNECTED ) { + sensors_event_t event; + + dht.temperature().getEvent(&event); + if (isnan(event.temperature)) { + // Error + } else { + sendToInfluxDB("temperature,city="+city+",location="+location, "value", String(event.temperature)); + } + dht.humidity().getEvent(&event); + if (isnan(event.relative_humidity)) { + // Error + } else { + sendToInfluxDB("humidity,city="+city+",location="+location, "value", String(event.relative_humidity)); + } + } +} + +void sendToInfluxDB(String measure, String key, String value) { + String line = measure+" "+key+"="+value; + Udp.begin(localPort); + Udp.beginPacket(influxdb_ip, influxdb_port); + Udp.print(line); + Udp.endPacket(); +} diff --git a/station-meteo/station-meteo.ino b/station-meteo/station-meteo.ino index 589c4bb..dc4cc21 100644 --- a/station-meteo/station-meteo.ino +++ b/station-meteo/station-meteo.ino @@ -29,10 +29,8 @@ String location = LOCATION; int rainfall_sensor_pin = 2; float rain_incr = 0.2794; // this is mm/m2 for each sensor tick int rainfall_ticks = 0; - -// Timing -unsigned long previousMillis= 0; -unsigned long previousMillis2= 0; +long debouncing_time = 30; +volatile unsigned long last_micros; // Initiate udp client WiFiUDP udp; @@ -73,10 +71,15 @@ void setup(void) Serial.println(wifi_ssid); // Connect to WPA/WPA2 network WiFi.begin(wifi_ssid, wifi_pass); + delay(500); // attempt to connect to Wifi network: while (WiFi.status() != WL_CONNECTED) { + WiFi.begin(wifi_ssid, wifi_pass); delay(500); + if (WiFi.status() != WL_CONNECTED) { + delay(2000); + } } Serial.println("Connected to wifi"); @@ -92,13 +95,12 @@ void loop(void) { delay(POLL_INT); - // Check wifi connexion - if ( WiFi.status() != WL_CONNECTED ) { - int retry = 0; + // Reconnect if needed + while (WiFi.status() != WL_CONNECTED) { WiFi.begin(wifi_ssid, wifi_pass); - while (retry < 10 || WiFi.status() != WL_CONNECTED) { - retry++; - delay(500); + delay(500); + if (WiFi.status() != WL_CONNECTED) { + delay(2000); } } @@ -174,5 +176,8 @@ void printWifiStatus() { void getRain () { - rainfall_ticks ++ ; + if((long)(micros() - last_micros) >= debouncing_time * 1000) { + rainfall_ticks ++ ; + last_micros = micros(); + } }