python制作数码时钟_【MY808_DIY】ESP32_micropython_天气时钟

该博客介绍了如何利用ESP32板和micropython编程,结合汉字点阵字体文件,创建一个显示天气和温度的数码时钟。通过读取字体文件并逐列扫描显示汉字,实现了动态更新天气信息的功能。
摘要由CSDN通过智能技术生成

#我的oled的地址  60     0x3c     0b111100

from machine import Pin, I2C

i2c = I2C(scl=Pin(26), sda=Pin(27), freq=400000)

oled = SSD1306_I2C(128, 64, i2c, addr=0x3c, external_vcc=False)

#垂直水平清屏

show_buffer = bytearray([0x0]*8*128)

oled.show(0,7,0,127,show_buffer)

#页地址清屏

for x in range(8):

show_buffer = bytearray([0x00]*128)

oled.pag_show(0,x,show_buffer)

dic_han_40 = {'℃': 0, '↑': 200, '↓': 400, '★': 600, '。': 800, '一': 1000, '不': 1200, '中': 1400, '云': 1600, '今': 1800, '会': 2000, '伞': 2200, '伴': 2400, '低': 2600, '充': 2800, '光': 3000, '内': 3200, '冰': 3400, '冷': 3600, '冻': 3800, '出': 4000, '升': 4200, '卷': 4400, '国': 4600, '外': 4800, '多': 5000, '大': 5200, '天': 5400, '太': 5600, '夹': 5800, '宜': 6000, '寒': 6200, '小': 6400, '尘': 6600, '带': 6800, '度': 7000, '弱': 7200, '强': 7400, '很': 7600, '或': 7800, '扬': 8000, '旅': 8200, '明': 8400, '晴': 8600, '暴': 8800, '最': 9000, '有': 9200, '未': 9400, '气': 9600, '沙': 9800, '没': 10000, '洗': 10200, '浮': 10400, '温': 10600, '游': 10800, '炎': 11000, '热': 11200, '特': 11400, '的': 11600, '知': 11800, '示': 12000, '穿': 12200, '等': 12400, '紫': 12600, '级': 12800, '线': 13000, '者': 13200, '舒': 13400, '般': 13600, '衣': 13800, '表': 14000, '说': 14200, '足': 14400, '车': 14600, '较': 14800, '适': 15000, '部': 15200, '门': 15400, '间': 15600, '阳': 15800, '阴': 16000, '阵': 16200, '降': 16400, '雨': 16600, '雪': 16800, '雷': 17000, '雹': 17200, '雾': 17400, '霾': 17600, '风': 17800, '飓': 18000, '高': 18200, '龙': 18400, '!': 18600, ',': 18800, '?': 19000}

import time

#汉字 40*40点阵,每次取一列 5个字节  5*8 = 40  逐列扫描

#首先开辟一块显存,对应要显示的面积 x*y*字数/8  一个字节8个点

buff = [0x00]*(40*40*3//8)  #40pix x  40 pix  三个字  共600个bytes

han_font_file = open('han40x40_tianqi_songti.fon',"rb")

en_font_file = open('en_20x40_kaiti.FON',"rb")

nubBytes = 5 #每次写入5个字节(5为步进)   5*8 = 40  一列40个点

str = '    明天晴天,温度2326℃↑↑。出门带伞!Ntp ok.   '

for one_char in str:

if ord(one_char) <= 128:

offset = (ord(one_char))*100

en_font_file.seek(offset)

for i in range(20):    #每个英文100个bytes

han_tem  = en_font_file.read(nubBytes)  #将一个汉字的5个字节取出

buff += han_tem     # 将这5个bytes加到尾部

del buff[0:5]       #删除前面的5个bytes

show_buffer = (bytearray(buff))     #整个缓存转为字节串

oled.show(2,6,0,127,show_buffer)    #将整个缓存写入

time.sleep_ms(1)

else:

offset = dic_han_40[one_char]

han_font_file.seek(offset)

for i in range(40):    #每个汉字200个bytes  每次写入5个字节(5为步进)   5*8 = 40  一列40个点

han_tem  = han_font_file.read(nubBytes)  #将一个汉字的5个字节取出

buff += han_tem     # 将这5个bytes加到尾部

del buff[0:5]       #删除前面的5个bytes

show_buffer = (bytearray(buff))     #整个缓存转为字节串

oled.show(2,6,0,127,show_buffer)    #将整个缓存写入

time.sleep_ms(1)

for j in range(0,2):   #写入10列作为两个字之间的空白

buff += [0x00]*5

del buff[0:5]

show_buffer = (bytearray(buff))

oled.show(2,6,0,127,show_buffer)

time.sleep_ms(1)

han_font_file.close()

en_font_file.close()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值