//#include <Wire.h> // Only needed for Arduino 1.6.5 and earlier
#include "SSD1306Wire.h"
// Para Heltec #include "HT_SSD1306Wire.h"
#include <DHT.h> //en Wokwi recomienda usar la de ESP: #include "DHTesp.h"
#include <BH1750.h>
#define interval1 2000
#define interval2 5000
#define DHTPIN 20 // Digital pin connected to the DHT sensor -> HE USADO EL PIN 13
#define DHTTYPE DHT22 //en lugar de: #define DHTTYPE DHT11
#define pin_rele 11
// create an OLED display object connected to I2C
//SSD1306Wire display(0x3c, SDA, SCL);
SSD1306Wire display(0x3c, 17, 18); // o SSD1306Wire display(0x3c,4, 15, GEOMETRY_128_64);
//En Heltec: SSD1306Wire display(0x3c,500000, 4, 15, GEOMETRY_128_64, RST_OLED);
DHT dht(DHTPIN, DHTTYPE);
BH1750 lightMeter; //I2C0 al mismo bus que la OLED
unsigned long currentTime, previousTime1, previousTime2 = 0;
void setup() {
pinMode(pin_rele, OUTPUT);
digitalWrite(pin_rele, LOW);
Serial.begin(9600);
//Wire.begin(SDA, SCL, freq);
//Wire.begin(17, 18); //no haría falta porque ya lo inicializa para el display
Wire1.begin(34, 5);
lightMeter.begin(BH1750::CONTINUOUS_HIGH_RES_MODE, 0x23, &Wire1);
//lightMeter.begin(&Wire1); //voy a dejar el modo por defecto
dht.begin();
Serial.println("Probando sensores");
// initialize OLED display with I2C address 0x3C
display.init();
display.flipScreenVertically();
display.setFont(ArialMT_Plain_10);
display.setTextAlignment(TEXT_ALIGN_LEFT);
}
void loop() {
currentTime = millis();
if (currentTime - previousTime1 > interval1)
{
//ejecuta la acción: lee los valores...
float h = dht.readHumidity();
float t = dht.readTemperature();
Serial.println("Humedad: " + String(h, 0) + "% Temperatura: " + String(t, 1) + " C");
float lux = lightMeter.readLightLevel();
//float lux = 800;
Serial.println("Light " + String(lux, 1) + " lux");
// Pantalla OLED
display.clear(); // clear display
display.drawString(40, 0, "SENSORES"); //drawString(0, 16,
display.drawString(0, 16, "Light " + String(lux, 1) + " lux"); //drawString(0, 16,
display.drawString(0, 32, "T " + String(t, 1) + " C");
display.drawString(0, 48, "HR " + String(h, 0) + "%");
display.display();
previousTime1 = currentTime;
}
if (currentTime - previousTime2 > interval2)
{
digitalWrite(pin_rele, !digitalRead(pin_rele));
previousTime2 = currentTime;
}
}