//2439874
//
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <DHTesp.h>
#include <WiFi.h>
#include "ThingSpeak.h"
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
const int DHT_PIN = 15; // Pin donde está conectado el DHT22
DHTesp dhtSensor;
// WiFi settings
const char* WIFI_NAME = "Wokwi-GUEST";
const char* WIFI_PASSWORD = "";
const int myChannelNumber = 2439874;
const char* myApiKey = "TCJTWQ5VC7NJ71HM";
WiFiClient client;
void setup() {
Serial.begin(115200);
dhtSensor.setup(DHT_PIN, DHTesp::DHT22);
// Inicia la pantalla OLED
if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println(F("SSD1306 allocation failed"));
for (;;); // No continúa si falla
}
display.clearDisplay();
// Conexión WiFi
WiFi.begin(WIFI_NAME, WIFI_PASSWORD);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.println("Conectando a WiFi...");
}
Serial.println("Conectado a WiFi");
ThingSpeak.begin(client); // Inicia ThingSpeak
}
void loop() {
TempAndHumidity newData = dhtSensor.getTempAndHumidity();
// Simula los valores para el ejemplo
int heartRate = random(80, 87); // Simula un valor de ritmo cardíaco
int oxygenLevel = random(94, 99); // Simula un valor para el nivel de oxígeno en sangre
// Envía datos a ThingSpeak
ThingSpeak.setField(1, newData.temperature);
ThingSpeak.setField(2, heartRate);
ThingSpeak.setField(3, oxygenLevel);
ThingSpeak.writeFields(myChannelNumber, myApiKey);
// Visualización de los datos en la pantalla OLED
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(WHITE);
// Muestra la temperatura y su icono
display.setCursor(0, 0);
display.println("Temperatura:");
display.setCursor(90, 0); // Ajusta según necesidad
display.setCursor(0, 10);
display.print(newData.temperature);
display.println(" C");
// Muestra el ritmo cardíaco simulado y su icono
display.setCursor(0, 20);
display.println("Ritmo Cardiaco:");
display.setCursor(90, 20); // Ajusta según necesidad
display.setCursor(0, 30);
display.print(heartRate);
display.println(" BPM");
// Muestra el nivel de oxígeno en sangre simulado y su icono
display.setCursor(0, 40);
display.println("Oxigeno en Sangre:");
display.setCursor(90, 40); // Ajusta según necesidad
display.setCursor(0, 50);
display.print(oxygenLevel);
display.println("%");
display.display();
// Ajusta el delay basado en el ritmo cardíaco simulado para una actualización más realista
// Calcula el tiempo entre latidos en milisegundos
delay(100);
}