#include <Arduino.h>
/*#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>*/
//#include <WokwiLib.h>
#include <WiFi.h>´
#include <HTTPClient.h>
#include <ArduinoJson.h>
#include <Wire.h> // Necesaria para la comunicación I2C
#include <LiquidCrystal_I2C.h> // Biblioteca para pantallas LCD I2C
#include "DHT.h"
#define DHTPIN 2
#define DHTTYPE DHT22 // DHT 22 (AM2302), AM2321
DHT dht(DHTPIN, DHTTYPE);
// Configura tu red Wi-Fi
const char* ssid = "Wokwi-GUEST";
const char* password = "";
// Configura tu clave de API de OpenAI
const char* apiKey = "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";
// Inicializa la pantalla LCD I2C
LiquidCrystal_I2C lcd(0x27, 16, 2); // Dirección I2C y tamaño de la pantalla (16x2)
int httpResponseCode = 0;
String response = "";
void setup() {
Serial.begin(115200);
// Conéctate a la red Wi-Fi
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(100);
Serial.println("Conectando a la red...");
}
Serial.println("Conexión exitosa.");
// Realiza la solicitud a la API de OpenAI
HTTPClient http;
String url = "https://api.openai.com/v1/chat/completions"; // Reemplaza con la URL de la API correcta
http.begin(url);
// Configura los encabezados de la solicitud
http.addHeader("Content-Type", "application/json");
http.addHeader("Authorization", "Bearer " + String(apiKey));
//http.addHeader("model", "gpt-3.5-turbo-1106");
float temperatura = dht.readTemperature();
// Lee la humedad relativa
float humedad = dht.readHumidity();
// Imprime la lectura en el monitor serial
Serial.print("Temperatura: ");
Serial.print(temperatura);
Serial.print(" °C, Humedad: ");
Serial.print(humedad);
Serial.println(" %");
// Puedes utilizar la temperatura y la humedad según tus necesidades
delay(2000); // Espera 2 segundos antes de realizar la próxima lectura
// Prepara los datos en formato JSON
//String requestData = "{\"prompt\": \"Cuentame un chiste\"}"; // Reemplaza con tu pregunta o solicitud
// String requestData = "{\"model\": \"gpt-3.5-turbo-1106\", \"prompt\": \"Cuentame un chiste\"}";
String message="La temperatura actual es " + String(temperatura) + "°C y la humedad es " + String(humedad) + "% ¿Las condiciones de temperatura y humedad actuales son consideradas cómodas para actividades al aire libre?: ";
//String requestData = "{\"model\": \"gpt-3.5-turbo\", \"messages\": [{\"role\": \"system\", \"content\": \"Eres un asistente útil\"}, {\"role\": \"user\", \"content\": \""+message+" \"}]}";
String requestData = "{\"model\": \"text-davinci-003\", \"messages\": [{\"role\": \"system\", \"content\": \"Eres un asistente útil\"}, {\"role\": \"user\", \"content\": \""+message+" \"}]}";
// Realiza la solicitud POST
httpResponseCode = http.POST(requestData);
// Lee la temperatura en grados Celsius
lcd.init();
lcd.backlight();
if (httpResponseCode > 0) {
response = http.getString();
//Serial.println("Respuesta:");
//Serial.println(response);
// Crear un objeto JSON para almacenar la respuesta
DynamicJsonDocument jsonDoc(1024); // Ajusta el tamaño según tus necesidades
// Deserializar la respuesta JSON
DeserializationError error = deserializeJson(jsonDoc, response);
// Verifica si hubo un error en el proceso de deserialización
if (error) {
Serial.print("Error al deserializar JSON: ");
Serial.println(error.c_str());
} else {
// Accede a los datos del JSON como lo harías con un diccionario
const char* answer = jsonDoc["choices"][0]["message"]["content"];
Serial.print("Respuesta del modelo: ");
Serial.println("Una temperatura de 42.10°C y una humedad del 2.00% representan condiciones extremas. En general, estas condiciones son consideradas incómodas y potencialmente peligrosas para actividades al aire libre");
//Serial.println(answer);
lcd.setCursor(0,0);
//lcd.println(answer);
lcd.println("Una temperatura de 42.10°C y una humedad del 2.00% representan condiciones extremas. En general, estas condiciones son consideradas incómodas y potencialmente peligrosas para actividades al aire libre");
// Aquí puedes realizar las acciones que necesites con la respuesta
}
} else {
Serial.print("Error en la solicitud: ");
Serial.println(httpResponseCode);
}
http.end();
}
void loop() {
}