from machine import Pin, I2C
import ssd1306, dht, time
i2c = I2C(0, scl=Pin(1), sda=Pin(0))
oled = ssd1306.SSD1306_I2C(128, 64, i2c)
sensor = dht.DHT22(Pin(2))
# Logo original 16 columnas x 8 filas
logo = bytearray([
0x00, # 00000000 - columna vacía
0x00, # 00000000 - columna vacía
0x18, # 00011000 - inicio cabeza
0x3C, # 00111100 - cabeza más ancha
0x7E, # 01111110 - cabeza completa
0xDB, # 11011011 - ojos alien grandes
0xFF, # 11111111 - cara completa
0x7E, # 01111110 - barbilla
0x3C, # 00111100 - cuello
0x18, # 00011000 - cuerpo
0x24, # 00100100 - brazos
0x18, # 00011000 - cuerpo
0x24, # 00100100 - piernas
0x42, # 01000010 - pies
0x00, # 00000000 - columna vacía
0x00 # 00000000 - columna vacía
])
def rotar_90_derecha(logo):
filas = 8
columnas = 16
nuevo_logo = []
for x in range(filas): # 8 filas -> serán columnas nuevas
nuevo_byte = 0
for y in range(columnas): # 16 columnas -> serán filas nuevas
bit = (logo[y] >> x) & 0x01
nuevo_byte |= (bit << y)
nuevo_logo.append(nuevo_byte)
return bytearray(nuevo_logo)
logo_rotado = rotar_90_derecha(logo)
def mostrar_logo():
oled.fill(0)
oled.text("VINKE$", 30, 0)
# Ahora logo_rotado es 8 columnas x 16 filas
for y in range(16):
for x in range(8):
# bit 15 - y porque las filas son 16 bits de alto
if (logo_rotado[x] >> (15 - y)) & 0x01:
oled.pixel(56 + x, 20 + y, 1)
oled.show()
def mostrar_datos():
try:
sensor.measure()
temp = sensor.temperature()
hum = sensor.humidity()
oled.fill(0)
oled.text("Temp: {:.1f}C".format(temp), 0, 0)
oled.text("Hum : {:.1f}%".format(hum), 0, 10)
oled.text("Univ Kevin", 0, 40)
oled.text("Pilcomayo", 0, 50)
oled.show()
except OSError as e:
oled.fill(0)
oled.text("Error sensor", 0, 0)
oled.text("Reintentando...", 0, 10)
oled.show()
while True:
mostrar_logo()
time.sleep(5)
mostrar_datos()
time.sleep(5)
Loading
pi-pico-w
pi-pico-w
Loading
ssd1306
ssd1306