/* PROYECTO UNAD - SISTEMA TELEMÉTRICO IoT
Monitoreo de Secadero Solar de Café y Fibras
Sensores: DHT22, LDR, MQ2 (Gases) + Pantalla OLED + Alarma LED
*/
#include <WiFi.h>
#include <HTTPClient.h>
#include "DHT.h"
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SH110X.h>
// --- 1. Credenciales de Conexión ---
const char* ssid = "Wokwi-GUEST";
const char* password = "";
String apiKey = "QJTR6U1JE8LRSD15";
const char* server = "http://api.thingspeak.com/update";
// --- 2. Pines de los Sensores y Actuadores ---
#define DHTPIN 4
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
#define LDRPIN 34 // Fotorresistencia (Field 3)
#define GASPIN 35 // Sensor MQ2 de Gases (Field 4)
// Pin para el LED de Alarma
// (Asignado al pin 5 para no hacer conflicto con el DHT22)
const int pinLedAlarma = 5;
// --- 3. Configuración de la Pantalla OLED ---
#define i2c_Address 0x3c
Adafruit_SH1107 display = Adafruit_SH1107(64, 128, &Wire, -1);
void setup() {
Serial.begin(115200);
dht.begin();
// Configurar el pin del LED como salida
pinMode(pinLedAlarma, OUTPUT);
digitalWrite(pinLedAlarma, LOW); // Aseguramos que inicie apagado
// Iniciar Pantalla
display.begin(i2c_Address, true);
display.setRotation(1);
display.clearDisplay();
display.setTextColor(SH110X_WHITE);
display.setTextSize(1);
display.setCursor(0, 10);
display.println("UNAD - Secadero");
display.println("Conectando...");
display.display();
// Conectar WiFi
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
display.clearDisplay();
display.setCursor(0, 10);
display.println("SISTEMA ONLINE");
display.display();
delay(2000);
}
void loop() {
// LECTURA DE SENSORES
float temp = dht.readTemperature();
float hum = dht.readHumidity();
int luz = analogRead(LDRPIN);
int gas = analogRead(GASPIN); // Lectura del nuevo sensor de gases
if (isnan(temp) || isnan(hum)) {
Serial.println("Error en sensores");
return;
}
// Lógica de la Alarma Física
// Si la humedad pasa del 70%, encender LED rojo
if (hum > 70.0) {
digitalWrite(pinLedAlarma, HIGH);
} else {
digitalWrite(pinLedAlarma, LOW);
}
// MOSTRAR EN PANTALLA OLED
display.clearDisplay();
display.setTextSize(1);
display.setCursor(0, 0);
display.println("MONITOREO CLIMA:");
display.setCursor(0, 15);
display.print("Temp: "); display.print(temp, 1); display.println(" C");
display.print("Hum: "); display.print(hum, 1); display.println(" %");
display.print("Luz: "); display.println(luz);
display.print("Gases:"); display.println(gas);
display.display();
// ENVÍO A THINGSPEAK
if(WiFi.status() == WL_CONNECTED){
HTTPClient http;
String url = String(server) + "?api_key=" + apiKey +
"&field1=" + String(temp) +
"&field2=" + String(hum) +
"&field3=" + String(luz) +
"&field4=" + String(gas);
http.begin(url);
int httpCode = http.GET();
if(httpCode > 0){
// Mensaje gerencial para el Monitor Serie
Serial.println("[OK] Paquete de telemetria transmitido a ThingSpeak (4 variables).");
}
http.end();
}
// ThingSpeak requiere 16 segundos entre envíos
delay(16000);
}Loading
grove-oled-sh1107
grove-oled-sh1107