from machine import Pin, ADC, I2C
import network, time
from utime import sleep, sleep_ms
import ujson
import urequests
OPENROUTER_API_KEY = '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'
led = Pin(7, Pin.OUT)
pot = ADC(Pin(16))
def conectaWifi (red, password):
global miRed
miRed = network.WLAN(network.STA_IF)
if not miRed.isconnected(): #Si no está conectado…
miRed.active(True) #activa la interface
miRed.connect(red, password) #Intenta conectar con la red
print('Conectando a la red', red +"…")
timeout = time.time ()
while not miRed.isconnected(): #Mientras no se conecte..
if (time.ticks_diff (time.time (), timeout) > 10):
return False
return True
if conectaWifi ("Wokwi-GUEST", ""):
print ("Conexión exitosa!")
print('Datos de la red (IP/netmask/gw/DNS):', miRed.ifconfig())
def chat_with_openrouter(prompt, model="openai/gpt-3.5-turbo"):
# URL de la API de OpenRouter
url = "https://openrouter.ai/api/v1/chat/completions"
# Encabezados de la solicitud
headers = {
"Authorization": f"Bearer {OPENROUTER_API_KEY}",
"Content-Type": "application/json"
}
# Cuerpo de la solicitud
data = {
"model": model, # Modelo que deseas utilizar
"messages": [{"role": "user", "content": prompt}]
}
# Convertir el cuerpo a JSON
json_data = ujson.dumps(data)
# Enviar la solicitud POST a la API
response = urequests.post(url, headers=headers, data=json_data)
# Verificar si la solicitud fue exitosa
if response.status_code == 200:
# Extraer y devolver la respuesta del chatbot
response_json = response.json()
response.close() # Cerrar la conexión
return response_json['choices'][0]['message']['content']
else:
# Si la solicitud falla, devolver un mensaje de error
error_message = f"Error: {response.status_code}, {response.text}"
response.close() # Cerrar la conexión
return error_message
def main():
print("Bienvenido ESP_Bot_AI. Inteligencia Artificial en Microcontroladores.")
while True:
dato= pot.read()
temperatura = int((dato * 100)/4096)
user_input ='''Eres el cerebro de un microcontrolador que controla temperatura en una
planta que mide la temperatura de 0 a 100 grados centigrados;
si el siguente valor ''' + str(temperatura) + ''' es superior a 40 indicar mediante
una respuesta muy corta realizarla evacuacion que obligatoriamente contenga la palabra alarma en minuscula dentro del
texto y el valor de temperatura obtenido en grados centigrado;si el valor es inferior a 39
dar un mensaje de tranquilidad e indicar medidas de cuidado ante emergencias en
frases muy cortas donde no se incluya la palabra alarma'''
if user_input.lower() == 'salir':
print("ESP_Bot_AI: ¡Hasta luego!")
break
# Obtener la respuesta del chatbot
response = chat_with_openrouter(user_input, model="openai/gpt-3.5-turbo")
if "alarma" in response:
led.on()
else:
led.off()
# Mostrar la respuesta del chatbot
print(f"ESP_Bot_AI: {response}")
sleep(1)
if __name__ == "__main__":
main()
else:
print ("Imposible conectar")
miRed.active (False)