Utilizar API para conectar Raspberry Pi Pico y que tome desiciónes y las refleje en un Display a travéz de Wokwi
Crear una problematica para que el LLM a travéz de la API tome una desición en la manipulación de algon sensor IoT de la Raspberry Pi Pico W en Wokwi y desplegar la respuesta en un display virtual en Wokwi
- 1 microcontrolador ESP32
- 1 display OLED Display
Pantalla OLED | ESP32 (Wokwi o real) |
---|---|
SDA | GPIO21 |
SCL | GPIO22 |
VCC | 3.3V |
GND | GND |
import network
import urequests
import time
import random
from machine import Pin, I2C
from ssd1306 import SSD1306_I2C
i2c = I2C(1, scl=Pin(22), sda=Pin(21)) # Cambiar a 1 si 0 da error
oled = SSD1306_I2C(128, 64, i2c)
API_KEY = "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"
# Conexión WiFi
def connect_wifi(ssid, password):
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
if not wlan.isconnected():
print("Conectando a WiFi...")
wlan.connect(ssid, password)
while not wlan.isconnected():
time.sleep(0.5)
print("Conectado:", wlan.ifconfig())
# Simulación de sensores
def read_fake_sensors():
temperatura = random.randint(20, 45)
humedad = random.randint(30, 90)
return temperatura, humedad
# Envío de datos al LLM de OpenAI
def consultar_llm(temp, hum):
prompt = f"Tengo un invernadero con temperatura de {temp} grados Celsius y humedad de {hum} por ciento. ¿Qué acción debo tomar con la ventilación?"
headers = {
"Content-Type": "application/json",
"Authorization": f"Bearer {API_KEY}"
}
body = {
"model": "gpt-3.5-turbo",
"messages": [
{"role": "user", "content": prompt}
]
}
try:
response = urequests.post("https://api.openai.com/v1/chat/completions", json=body, headers=headers)
result = response.json()
response.close()
respuesta = result['choices'][0]['message']['content']
except Exception as e:
respuesta = "Error en consulta IA"
print("Error:", e)
return respuesta
# Inicializar pantalla OLED
i2c = I2C(0, scl=Pin(22), sda=Pin(21))
oled = SSD1306_I2C(128, 64, i2c)
# 🚀 Inicio
connect_wifi("Wokwi-GUEST", "")
while True:
temp, hum = read_fake_sensors()
print(f"Temp: {temp}°C, Hum: {hum}%")
oled.fill(0)
oled.text("Consultando IA...", 0, 0)
oled.show()
decision = consultar_llm(temp, hum)
print("Decision IA:", decision)
# Mostrar resultado
oled.fill(0)
oled.text(f"T:{temp}C H:{hum}%", 0, 0)
oled.text("Decision:", 0, 16)
lines = decision.split(". ")
for i, line in enumerate(lines[:3]):
oled.text(line[:18], 0, 32 + i * 10)
oled.show()
time.sleep(15)