Inteligencia Artificial
Inteligencia Artificial en ESP32: Conectando Google Gemini paso a paso
PUBLICIDAD • RECOMENDADO
📖 Resumen & Explicación del Proyecto
Aprende a integrar la API de Google Gemini AI en el ESP32 utilizando una conexión segura (HTTPS) y muestra las respuestas generadas en una pantalla OLED I2C de 0.96". Un proyecto de Inteligencia Artificial e IoT optimizado, directo y sin librerías complejas.
En este tutorial explicamos paso a paso el código, la conexión física y cómo estructurar el formato JSON para limitar los tokens y recibir respuestas precisas.
📌 Enlaces y Recursos:
• Código completo : https://drive.google.com/file/d/1PepDLPq0yczPKJHu9R5na13gFhBvCQO_/view?usp=sharing
• Obtén tu API Key de Gemini gratis aquí: https://aistudio.google.com/
#ESP32 #GeminiAI #IoT #OLED #Arduino #InteligenciaArtificial #Maker
🛠️ Componentes & Materiales Requeridos
- ✓Placa de desarrollo ESP32 (DOIT DevKit V1 o NodeMCU ESP32)
- ✓Pantalla OLED I2C SSD1306 0.96" (128x64 píxeles)
- ✓Cables de conexión Dupont Hembra - Macho
- ✓Cable Micro-USB para programación y alimentación
- ✓API Key gratuita de Google Gemini (Google AI Studio)
⚡ Conexión de Pines (Pinout)
| Pin Microcontrolador | Pin Dispositivo / Sensor | Función / Descripción |
|---|---|---|
GPIO 21 | SDA (OLED) | Bus de datos bidireccional I2C |
GPIO 22 | SCL (OLED) | Línea de reloj del bus I2C |
3V3 / VIN | VCC | Alimentación positiva lógica (3.3V) |
GND | GND | Tierra común del circuito |
🔍 Diagrama de arquitectura del ESP32 enviando HTTPS POST a Google Gemini y mostrando la respuesta en OLED.
💻 Códigos Fuente del Proyecto
Verificados en LaboratorioCopia y pega directamente los scripts en tu entorno de desarrollo (Arduino IDE, PlatformIO o editor de código):
C++ / Arduino IDE
ESP32_Gemini_AI_Client.ino
Código 1: Firmware ESP32 en Arduino IDE (C++)
#include <WiFi.h>
#include <HTTPClient.h>
#include <WiFiClientSecure.h>
#include <ArduinoJson.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
const char* ssid = "TU_RED_WIFI";
const char* password = "TU_PASSWORD_WIFI";
const char* apiKey = "TU_GEMINI_API_KEY_AQUI";
const char* geminiEndpoint = "https://generativelanguage.googleapis.com/v1beta/models/gemini-1.5-flash:generateContent?key=";
void setup() {
Serial.begin(115200);
Wire.begin(21, 22);
if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println(F("Fallo OLED"));
for(;;);
}
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
display.setCursor(0, 10);
display.println("Conectando WiFi...");
display.display();
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
display.clearDisplay();
display.setCursor(0, 10);
display.println("WiFi Conectado!");
display.println(WiFi.localIP());
display.display();
delay(1500);
consultarGemini("Explica en 15 palabras que es el Internet de las Cosas.");
}
void loop() {
// En este demo se realiza la consulta en setup()
}
void consultarGemini(String prompt) {
WiFiClientSecure client;
client.setInsecure(); // Para prototipos HTTPS directos
HTTPClient http;
String url = String(geminiEndpoint) + apiKey;
http.begin(client, url);
http.addHeader("Content-Type", "application/json");
// Construcción del Payload JSON
StaticJsonDocument<512> doc;
JsonArray contents = doc.createNestedArray("contents");
JsonObject partObj = contents.createNestedObject();
JsonArray parts = partObj.createNestedArray("parts");
JsonObject textObj = parts.createNestedObject();
textObj["text"] = prompt;
String requestBody;
serializeJson(doc, requestBody);
int httpCode = http.POST(requestBody);
if (httpCode == HTTP_CODE_OK) {
String payload = http.getString();
DynamicJsonDocument responseDoc(2048);
deserializeJson(responseDoc, payload);
const char* respuesta = responseDoc["candidates"][0]["content"]["parts"][0]["text"];
display.clearDisplay();
display.setCursor(0, 0);
display.println("Respuesta Gemini:");
display.setCursor(0, 15);
display.println(respuesta);
display.display();
Serial.println(respuesta);
} else {
Serial.printf("Error HTTP: %d\n", httpCode);
}
http.end();
}
JSON / API REST
gemini_payload_template.json
Código 2: Estructura del Payload JSON para Google Gemini REST API
{
"contents": [
{
"parts": [
{
"text": "Eres un asistente de hardware embebido. Responde en maximo 20 palabras: ¿Cual es el consumo tipico del ESP32 en Deep Sleep?"
}
]
}
],
"generationConfig": {
"temperature": 0.4,
"topK": 32,
"topP": 1,
"maxOutputTokens": 60,
"stopSequences": []
}
}
🚀 Puesta en Marcha Paso a Paso
-
1
Obtener tu API Key gratuita en Google AI Studio (aistudio.google.com).
-
2
Instalar las librerías ArduinoJson (versión 7 recomendada) y Adafruit SSD1306 desde el gestor de bibliotecas de Arduino IDE.
-
3
Realizar el conexionado físico del display OLED I2C en los pines GPIO 21 (SDA) y GPIO 22 (SCL).
-
4
Configurar el nombre de red (SSID), contraseña y pegar tu API Key en las variables del sketch.
-
5
Compilar y cargar el código al ESP32 seleccionando la placa 'DOIT ESP32 DEVKIT V1'.
📥 Descargas & Recursos Oficiales
PUBLICIDAD • RECOMENDADO