#incluir #incluir #incluir // edita estas tres líneasconst char* ssid = «TU-SSID-AQUÍ»;const char* contraseña = «TU-CONTRASEÑA DE PUNTO ACTIVO»;const char* api_key = «CLAVE API OPENAI AQUÍ»;// deja de editarconst char* host = «api.openai.com»;const int httpsPort = 443;const char ledPin = 2; WiFiClientSecure httpClient;/* Función para conectarse a WiFi */void connectToWiFi();/* Función para realizar una solicitud HTTP*/bool sendHTTPRequest(String Prompt, String *result);/* Función para pasar el mensaje del usuario y enviarlo a la API de OpenAI */String getGptResponse(Indicador de cadena, bool parseMsg = true); configuración vacía(){ Serial.begin(115200); connectToWiFi();} void loop(){ if (Serial.available() > 0) { Mensaje de cadena = Serial.readStringUntil(‘\n’); aviso.trim(); Serie.print(«ESP32 > «); Serial.println(mensaje); Respuesta de cadena = getGptResponse(prompt); Serial.println(«ChatGPT > » + respuesta); retraso(3000); } retraso(10);} void connectToWiFi(){ WiFi.begin(ssid, contraseña); mientras (WiFi.status()! = WL_CONNECTED) { retraso(1000); Serial.println(«Conectándose a WiFi…»); } Serial.println(«Conexión WiFi exitosa»);} bool sendHTTPRequest(String Prompt, String *resultado){ if (WiFi.status() != WL_CONNECTED) { Serial.println(«ERROR: Dispositivo no conectado a WiFi») ; falso retorno; } // Conéctese a la URL de la API de OpenAI httpClient.setInsecure(); if (!httpClient.connect(host, httpsPort)) { Serial.println(«Error al conectarse con la API de OpenAI»); falso retorno; } // Generar carga útil Carga útil de cadena = «{\»model\»: \»gpt-3.5-turbo\»,\»messages\»: [{\»role\»: \»user\», \»content\»: \»» + prompt + «\»}]}»; Serial.println(carga útil); // Generar cadena de solicitud HTTP request = «POST /v1/chat/completions HTTP/1.1\r\n»; request += «Host: » + String(host) + «\ r\n»; request += «Autorización: Portador » + String(api_key) + «\r\n»; request += «Tipo de contenido: aplicación/json\r\n»; request += «Longitud del contenido : » + Cadena(carga útil.longitud()) + «\r\n»; solicitud += «Conexión: cerrar\r\n»; solicitud += «\r\n» + carga útil + «\r\n» ; // Enviar solicitud HTTP httpClient.print(solicitud); // Función LED digitalWrite(ledPin, ALTA); demora(1000); digitalWrite(ledPin, BAJA); ; mientras (httpClient.connected()) { if (httpClient.available()) { respuesta += httpClient.readStringUntil(‘\n’); respuesta += String(«\r\n»); (); // Analizar el código de respuesta HTTP int ResponseCode = 0; if (response.indexOf(» «) != -1) { // Si se encuentra el primer espacio, ResponseCode = respuesta.substring(response.indexOf(» «) + 1, respuesta.indexOf(» «) + 4).toInt(); // Obtiene los caracteres que siguen al primer espacio y los convierte a un número entero } if (responseCode!= 200) { Serial.println(«El procedimiento ha fallado. Información:» + String(respuesta)); falso retorno; } // Obtener cuerpo JSON int start = respuesta.indexOf(«{«); int fin = respuesta.lastIndexOf(«}»); String jsonBody = respuesta.substring(inicio, fin + 1); if (jsonBody.length() > 0) { *resultado = jsonBody; devolver verdadero; } Serial.println(«Error: No se puede leer la información»); devolver falso;} String getGptResponse(String Prompt, bool parseMsg){ String resultStr; resultado bool = sendHTTPRequest(prompt, &resultStr); si (!resultado) devuelve «Error: enviarHTTPRequest»; si (!parseMsg) devuelve resultStr; Documento DynamicJsonDocument(resultStr.length() + 200); Error deserializaciónError = deserializeJson(doc, resultStr.c_str()); si (error) {regresar «[ERR] deserializeJson() falló: » + String(error.f_str()); } const char *_content = doc[«choices»][0][«message»][«content»]; devolver cadena (_content);}