#include <Arduino.h>
#include <WiFi.h>
#include <HTTPClient.h>
#include <ArduinoJson.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include "DHT.h"
#define DHTPIN 2
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
LiquidCrystal_I2C lcd(0x27, 20, 4);
const char* ssid = "Wokwi-GUEST";
const char* password = "";
const char* apiKey = "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";
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.");
// Leer la temperatura en grados Celsius
float temperatura = dht.readTemperature();
// Leer la humedad relativa
float humedad = dht.readHumidity();
// Imprimir la lectura en el monitor serial
Serial.print("Temperatura: ");
Serial.print(temperatura);
Serial.print(" °C, Humedad: ");
Serial.print(humedad);
Serial.println(" %");
// Realizar la solicitud a la API de OpenAI
HTTPClient http;
String url = "https://api.openai.com/v1/chat/completions";
http.begin(url);
// Agregar depuración
Serial.println("Intentando conectar a la API...");
Serial.print("URL de la API: ");
Serial.println(url);
http.addHeader("Content-Type", "application/json");
http.addHeader("Authorization", "Bearer " + String(apiKey));
// Crear un mensaje que incluye la temperatura y la humedad
String mensaje = "La temperatura actual es " + String(temperatura) + "°C y la humedad es " + String(humedad) + "%. Tomando en cuenta los datos que se te pasaron de la temperatura y la humedad ¿Crees que existe probabilidad de lluvia? Contesta segun sea el caso y da una breve justificacion de la respuesta";
//String requestData = "{\"model\": \"gpt-3.5-turbo\", \"messages\": [{\"role\": \"system\", \"content\": \"Eres un asistente útil\"}, {\"role\": \"user\", \"content\": \"" + mensaje + "\"}]}";
//String requestData = "{\"model\": \"gpt-3.5-turbo-1106\", \"messages\": [{\"role\": \"system\", \"content\": \"Eres un asistente útil\"}, {\"role\": \"user\", \"content\": \"" + mensaje + "\"}]}";
String requestData = "{\"model\": \"gpt-3.5-turbo-16k\", \"messages\": [{\"role\": \"system\", \"content\": \"Eres un asistente útil\"}, {\"role\": \"user\", \"content\": \"" + mensaje + "\"}]}";
//String requestData = "{\"model\": \"GPT-4 \", \"messages\": [{\"role\": \"system\", \"content\": \"Eres un asistente útil\"}, {\"role\": \"user\", \"content\": \"" + mensaje + "\"}]}";
httpResponseCode = http.POST(requestData);
lcd.init();
lcd.backlight();
if (httpResponseCode > 0) {
response = http.getString();
// Crear un objeto JSON para almacenar la respuesta
DynamicJsonDocument jsonDoc(1024);
// Deserializar la respuesta JSON
DeserializationError error = deserializeJson(jsonDoc, response);
if (error) {
Serial.print("Error al deserializar JSON: ");
Serial.println(error.c_str());
} else {
const char* respuesta = jsonDoc["choices"][0]["message"]["content"];
Serial.print("Respuesta del modelo: ");
Serial.println(respuesta);
lcd.setCursor(0, 0);
lcd.println(respuesta);
}
} else {
Serial.print("Error en la solicitud: ");
Serial.println(httpResponseCode);
}
http.end();
}
void loop() {
// El código del bucle puede continuar aquí
delay(2000); // Espera 2 segundos antes de realizar la próxima lectura
}