#include <WiFi.h>
#include "ThingSpeak.h"
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
// Configuración de la pantalla OLED
#define SCREEN_WIDTH 128 // Ancho de la pantalla OLED
#define SCREEN_HEIGHT 64 // Alto de la pantalla OLED
#define OLED_RESET -1 // Pin de reset de la pantalla (no se utiliza)
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
// Configuración de la red WiFi
const char* WIFI_NAME = "Wokwi-GUEST";
const char* WIFI_PASSWORD = "";
// Configuración de ThingSpeak
const unsigned long channelID = 2669089; // Asegúrate de que es un unsigned long
const unsigned int numberChannel = 1; // Número del campo que deseas leer
const char* readApikey = "I3A36B5WOSWXYUPO";
int readValue;
// Configuración del pin del botón
#define pinButton 32
WiFiClient client;
void setup(){
// Inicializa la comunicación serial a 115200 baudios
Serial.begin(115200);
delay(1000); // Pequeña demora para asegurar que el monitor serial esté listo
// Inicializa la pantalla OLED con la dirección I2C por defecto 0x3C
if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println(F("No se pudo encontrar la pantalla SSD1306"));
for (;;); // Bucle infinito en caso de error
}
// Configura la pantalla OLED
display.clearDisplay(); // Limpia el buffer de la pantalla
display.setTextSize(1); // Establece el tamaño del texto
display.setTextColor(WHITE); // Establece el color del texto a blanco
display.setCursor(0, 0); // Establece la posición del cursor en la pantalla
display.println("Inicializando...");
display.display(); // Muestra el buffer inicial en la pantalla
// Configura el pin del botón como entrada con pull-up
pinMode(pinButton, INPUT_PULLUP);
// Inicia la conexión WiFi
WiFi.begin(WIFI_NAME, WIFI_PASSWORD);
Serial.println("Conectando a WiFi...");
display.println("Conectando a WiFi...");
display.display();
// Espera hasta que la conexión WiFi se establezca
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.println("WiFi no conectado");
display.println("WiFi no conectado");
display.display();
}
// Confirma la conexión WiFi
Serial.println("¡WiFi conectado!");
Serial.print("IP local: ");
Serial.println(WiFi.localIP());
display.println("WiFi conectado!");
display.print("IP: ");
display.println(WiFi.localIP());
display.display();
// Configura el modo WiFi
WiFi.mode(WIFI_STA);
// Inicializa ThingSpeak
ThingSpeak.begin(client);
}
void loop(){
// Verifica si el botón está presionado (suponiendo que está conectado a GND cuando se presiona)
if(!digitalRead(pinButton)){
Serial.println("Leyendo canal de ThingSpeak...");
display.clearDisplay();
display.setCursor(0, 0);
display.println("Leyendo ThingSpeak...");
display.display();
// Lee el valor del campo especificado en ThingSpeak
readValue = ThingSpeak.readIntField(channelID, numberChannel, readApikey);
// Obtiene el estado de la última lectura
int statusCode = ThingSpeak.getLastReadStatus();
if(statusCode == 200) {
// Muestra el valor leído en el monitor serial
Serial.println("Valor leído: " + String(readValue));
// Muestra el valor leído en la pantalla OLED
display.clearDisplay();
display.setCursor(0, 0);
display.println("Dato:");
display.print("POT: ");
display.println(readValue);
display.display();
} else {
// Muestra el código de error HTTP en el monitor serial
Serial.println("HTTP error code: " + String(statusCode));
// Muestra el error en la pantalla OLED
display.clearDisplay();
display.setCursor(0, 0);
display.println("Error al leer");
display.print("Código: ");
display.println(statusCode);
display.display();
}
// Espera un breve periodo para evitar múltiples lecturas rápidas
delay(1000);
}
// Opcional: Agrega un pequeño delay para estabilidad
delay(100);
}