"""
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ Raspberry Pi Pico + SSD1306 OLED - Íconos del Clima ☁️🌧️❄️ ┃
┃ ┃
┃ Muestra íconos meteorológicos en pantalla OLED (128x64) ┃
┃ junto con su descripción (texto). ┃
┃ ┃
┃ 🌞 Soleado ☁️ Nublado 🌧️ Lluvia ⛈️ Tormenta ❄️ Nieve ┃
┃ ┃
┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
"""
from machine import Pin, I2C
from ssd1306 import SSD1306_I2C
import framebuf, sys
import utime
pix_res_x = 128
pix_res_y = 64
#Iconos
icons = {
"🌞 Soleado": bytearray([
0x00,0x00,0x18,0x00,0x3C,0x00,0x3C,0x00,
0xFF,0x00,0x7E,0x00,0x3C,0x00,0x3C,0x00,
0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
]),
"☁️ Nublado": bytearray([
0x00,0x00,0x1C,0x00,0x3E,0x00,0x7F,0x00,
0xFF,0x00,0xFF,0x00,0x7F,0x00,0x3E,0x00,
0x1C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
]),
"🌧️ Lluvia": bytearray([
0x00,0x00,0x18,0x00,0x3C,0x00,0x7E,0x00,
0xFF,0x00,0xFF,0x00,0x7E,0x00,0x3C,0x00,
0x18,0x00,0x24,0x00,0x00,0x00,0x24,0x00,
0x00,0x00,0x24,0x00,0x00,0x00,0x24,0x00
]),
"⛈️ Tormenta": bytearray([
0x00,0x00,0x38,0x00,0x7C,0x00,0xFE,0x00,
0xFF,0x00,0xFE,0x00,0x7C,0x00,0x38,0x00,
0x00,0x00,0x10,0x00,0x38,0x00,0x7C,0x00,
0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00
]),
"❄️ Nieve": bytearray([
0x00,0x00,0x18,0x00,0x3C,0x00,0x5A,0x00,
0xFF,0x00,0x5A,0x00,0x3C,0x00,0x18,0x00,
0x24,0x00,0x5A,0x00,0x00,0x00,0x5A,0x00,
0x24,0x00,0x00,0x00,0x00,0x00,0x00,0x00
])
}
#CONEXION CON I2C
def init_i2c(scl_pin, sda_pin):
i2c_dev = I2C(1, scl=Pin(scl_pin), sda=Pin(sda_pin), freq=200000)
i2c_addr = [hex(ii) for ii in i2c_dev.scan()]
if not i2c_addr:
print('No I2C Display Found')
sys.exit()
return i2c_dev
#DIBUJO
def display_icon_and_name(oled, icon_bytes, name):
fb = framebuf.FrameBuffer(icon_bytes, 32, 32, framebuf.MONO_HLSB)
oled.fill(0)
oled.blit(fb, 48, 0) # Ícono centrado arriba
oled.text(name, 15, 40) # Texto debajo del ícono
oled.show()
#ANIMACION
def animate_icons(oled):
for name, icon in icons.items():
display_icon_and_name(oled, icon, name)
utime.sleep(3)
#MAIN
def main():
i2c_dev = init_i2c(scl_pin=27, sda_pin=26)
oled = SSD1306_I2C(pix_res_x, pix_res_y, i2c_dev)
animate_icons(oled)
#EJECUCION
if __name__ == '__main__':
main()