from machine import Pin, I2C
import ssd1306
import network
import urequests
import json
import random
import dht
import machine
# Parametros para API
token = ""
# modelos
# gpt-3.5-turbo
# gpt-4
# gpt-4-1106-preview (aka gpt4 turbo)
model = '"gpt-3.5-turbo"'
# Asignacion de pins de ESP32
i2c = I2C(0, scl=Pin(22), sda=Pin(21))
oled_width = 128
oled_height = 64
oled = ssd1306.SSD1306_I2C(oled_width, oled_height, i2c)
dh = dht.DHT22(machine.Pin(12))
# WiFi
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlan.connect("Wokwi-GUEST","")
while not wlan.isconnected():
pass
# Separa un string en varias lineas
def split_text(text, max_width, font_width=8):
words = text.split(' ')
lines = []
current_line = ''
for word in words:
if len(current_line + word) * font_width <= max_width:
current_line += word + ' '
else:
lines.append(current_line.strip())
current_line = word + ' '
lines.append(current_line.strip())
return lines
# Temp a string
dh.measure()
temperature = str(dh.temperature())
# String mensaje
sensor_message = 'In a manufacturing plant, the current temperature in celsius is: ' + temperature + '. Temperatures over 50 are extremely dangerous. Report if the temperature is safe and what to wear in an industrial context. Respond in less than eight words.'
print("Using: " + model + ". Sending to OpenAI: " + '"' + sensor_message + '"')
# Headers para el request
headers = {'Authorization' : 'Bearer ' + token, 'Content-Type' : 'application/json'}
data = '{"model": ' + model + ', "messages": [{"role": "user", "content": "' + sensor_message + '"}], "temperature": 0}'
URL = "https://api.openai.com/v1/chat/completions"
# Envia el request
r = urequests.post(URL, headers=headers, data=data)
# Revisa si el request es exitoso
if r.status_code == 200:
person_dict = json.loads(r.text)
response = person_dict['choices'][0]['message']['content']
else:
response = "Error:" + str(r.status_code)
# Print de espuesta
print("OpenAI response: " + '"' + response + '"')
lines = split_text(response, oled_width)
for i, line in enumerate(lines):
oled.text(line, 0, i*10) # Ajusta la posicion y por cada linea
oled.show()