Skip to content

Instantly share code, notes, and snippets.

@Sh0cko
Last active May 24, 2025 15:47
Show Gist options
  • Save Sh0cko/d68917ad680625c3d3c923f41624a811 to your computer and use it in GitHub Desktop.
Save Sh0cko/d68917ad680625c3d3c923f41624a811 to your computer and use it in GitHub Desktop.

Utilizar API para conectar Raspberry Pi Pico y que tome desiciónes y las refleje en un Display a travéz de Wokwi

Joel Cuevas Estrada - 22210298

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

Componentes en Wokwi

  • 1 microcontrolador ESP32
  • 1 display OLED Display

Conexión de componentes en Wokwi

Pantalla OLED ESP32 (Wokwi o real)
SDA GPIO21
SCL GPIO22
VCC 3.3V
GND GND

image

Obtención de la API de ChatGPT por parte de OpenIA

image

Codigo utilizado

Raspberry Pi Pico W

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)

Practica funcionando

Microcontrolador consultando la IA

image

OLED Mostrando la respuesta de la IA

image

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment