数码之家

 找回密码
 立即注册

QQ登录

只需一步,快速开始

微信登录

微信扫一扫,快速登录

搜索
查看: 798|回复: 11

【MY808_DIY】ESP32_micropython_天气时钟

[复制链接]
发表于 2019-8-9 23:31:14 | 显示全部楼层 |阅读模式

马上注册,认识更多玩家好友,查阅更多资源,享有更多功能

您需要 登录 才可以下载或查看,没有帐号?立即注册 微信登录

x
以前制作了个自动对时的小钟,已经稳定运行几个月了,误差,误差是不存在的,
每小时自动NTP对时
https://www.mydigit.cn/forum.php?mod=viewthread&tid=20674



                               
登录/注册后可看大图

当时由于esp8266空间限制,天气没有显示。
天气时钟制作中……

搞定了ssd1306显示(可以滚动)
1924564805.jpg


无奈没有艺术细胞
366671740.jpg


感觉女儿画的很好,她已经同意帮我画图标了。
28691063.jpg

打赏

参与人数 2M币 +70 收起 理由
200birds + 20
阿睦 + 50

查看全部打赏

 楼主| 发表于 2019-8-9 23:33:06 | 显示全部楼层
占楼备用,以前的帖子参考:
https://www.mydigit.cn/forum.php?mod=viewthread&tid=19337

                               
登录/注册后可看大图

回复 支持 反对

使用道具 举报

发表于 2019-8-9 23:55:38 | 显示全部楼层
【MY808_DIY】ESP32_micropython_天气时钟2_网页爬取天气信息
https://www.mydigit.cn/forum.php?mod=viewthread&tid=68181
回复 支持 反对

使用道具 举报

发表于 2019-8-10 01:26:21 来自手机浏览器 | 显示全部楼层
然而oled寿命堪忧…
回复 支持 反对

使用道具 举报

发表于 2019-8-10 15:02:22 来自手机浏览器 | 显示全部楼层
楼主能分享一下吗  
回复 支持 反对

使用道具 举报

发表于 2019-8-13 08:18:10 | 显示全部楼层
女儿画的,是用的电脑手写板画的吧?

点评

在纸上画的,手机拍照上传的。  详情 回复 发表于 2019-8-14 17:15
回复 支持 反对

使用道具 举报

发表于 2019-8-13 09:55:20 | 显示全部楼层
有了女儿的参与使DIY变得温馨了,那些枯燥的代码也似乎会随着心情悦动。
回复 支持 反对

使用道具 举报

发表于 2019-8-14 16:50:48 | 显示全部楼层
要求看改换了小情人画的图像的产品图

点评

还在制作中,遇到点困难。 UTF-8 的汉字,OLED显示,正在学习中。  详情 回复 发表于 2019-8-14 17:16
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-8-14 17:15:03 | 显示全部楼层
infozx 发表于 2019-8-13 08:18
女儿画的,是用的电脑手写板画的吧?

在纸上画的,手机拍照上传的。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-8-14 17:16:12 | 显示全部楼层
hainanhaibei 发表于 2019-8-14 16:50
要求看改换了小情人画的图像的产品图

还在制作中,遇到点困难。
UTF-8 的汉字,OLED显示,正在学习中。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-8-15 17:16:24 | 显示全部楼层
本帖最后由 lyy-cy 于 2019-8-15 17:22 编辑

今天搞定了中英文混合显示,和字库。具体过程如下:
1、将可能用到的汉字用记事本随便记录进去;
  1. 穿衣炎热热舒适较舒适较冷冷寒冷旅游适宜较适宜一般较不宜不太适宜不适宜洗车适宜较适宜较不宜不宜紫外线最弱弱中等强很强

  2. 多云        Cloudy        
  3. 晴间多云        Partly Cloudy        
  4. 晴间多云        Partly Cloudy        
  5. 大部多云        Mostly Cloudy        
  6. 大部多云        Mostly Cloudy        
  7. 阴Overcast        
  8. 阵雨        Shower        
  9. 雷阵雨        Thundershower        
  10. 雷阵雨伴有冰雹        Thundershower with Hail        
  11. 1小雨        Light Rain        
  12. 1中雨        Moderate Rain        
  13. 1大雨        Heavy Rain        
  14. 1暴雨        Storm        
  15. 1大暴雨        Heavy Storm        
  16. 1特大暴雨        Severe Storm        
  17. 1冻雨        Ice Rain        
  18. 2雨夹雪        Sleet        
  19. 2阵雪        Snow Flurry        
  20. 2小雪        Light Snow        
  21. 2中雪        Moderate Snow        
  22. 2大雪        Heavy Snow        
  23. 2暴雪        Snowstorm        
  24. 2浮尘        Dust        
  25. 2扬沙        Sand        
  26. 2沙尘暴        Duststorm        
  27. 2强沙尘暴        Sandstorm        
  28. 3雾        Foggy        
  29. 3霾        Haze        
  30. 3风        Windy        
  31. 3大风        Blustery        
  32. 3飓风        Hurricane        
  33. 3热带风暴        Tropical Storm        
  34. 3龙卷风        Tornado        
  35. 3冷        Cold        
  36. 3热        Hot        
  37. 9未知        Unknown        
  38. 说明
  39. 国外的晴天 Fair 表示没有大风或者大雾的晴天
  40. 国内的 Sunny/Clear 表示阳光充足,会有大风或大雾等天气
  41. 今天明天有升高降低温度带伞级出门,。?!★℃↑↓
复制代码


2、写个程序将多余的字符去掉,保存成字库汉字.txt
  1. filepath_in = r'1汉字准备.txt'
  2. filepath_out = r'3字库汉字.txt'


  3. #for line in open(filepath,'r',encoding='utf-8'):
  4. #        print(line, end='')

  5. han_list = []
  6. with open(filepath_in,'r',encoding='gbk') as f_in:
  7.         for x in f_in:
  8.                 for i in x:
  9.                         if ord(i) > 127:
  10.                                 print(i)
  11.                                 if i not in han_list:
  12.                                         han_list.append(i)
  13.                         else:
  14.                                 pass

  15. han_list.sort() #排序
  16. print(han_list)        #打印测试下


  17. with open(filepath_out,'w',encoding='gbk') as f_out:
  18.         for i in han_list:
  19.                 f_out.write(i)
复制代码


3、再写个程序将汉字作key,汉字在字库中的偏移量做value;
  1. 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}
复制代码


4、用软件将字库汉字生成二进制字库文件;
操作步骤.jpg
5、最终代码
  1. #我的oled的地址  60     0x3c     0b111100
  2. from machine import Pin, I2C
  3. i2c = I2C(scl=Pin(26), sda=Pin(27), freq=400000)
  4. oled = SSD1306_I2C(128, 64, i2c, addr=0x3c, external_vcc=False)

  5. #垂直水平清屏
  6. show_buffer = bytearray([0x0]*8*128)
  7. oled.show(0,7,0,127,show_buffer)

  8. #页地址清屏
  9. for x in range(8):
  10.     show_buffer = bytearray([0x00]*128)
  11.     oled.pag_show(0,x,show_buffer)

  12. 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}

  13. import time

  14. #汉字 40*40点阵,每次取一列 5个字节  5*8 = 40  逐列扫描
  15. #首先开辟一块显存,对应要显示的面积 x*y*字数/8  一个字节8个点
  16. buff = [0x00]*(40*40*3//8)  #40pix x  40 pix  三个字  共600个bytes

  17. <span style="background-color: yellow;">han_font_file = open('han40x40_tianqi_songti.fon',"rb")
  18. en_font_file = open('en_20x40_kaiti.FON',"rb")</span>
  19. nubBytes = 5 #每次写入5个字节(5为步进)   5*8 = 40  一列40个点

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

  21. for one_char in str:
  22.     if ord(one_char) <= 128:        
  23.         offset = (ord(one_char))*100
  24.         en_font_file.seek(offset)
  25.         for i in range(20):    #每个英文100个bytes  
  26.             han_tem  = en_font_file.read(nubBytes)  #将一个汉字的5个字节取出
  27.             buff += han_tem     # 将这5个bytes加到尾部
  28.             del buff[0:5]       #删除前面的5个bytes
  29.             show_buffer = (bytearray(buff))     #整个缓存转为字节串
  30.             oled.show(2,6,0,127,show_buffer)    #将整个缓存写入
  31.             time.sleep_ms(1)
  32.     else:
  33.         offset = dic_han_40[one_char]
  34.         han_font_file.seek(offset)
  35.         for i in range(40):    #每个汉字200个bytes  每次写入5个字节(5为步进)   5*8 = 40  一列40个点
  36.             han_tem  = han_font_file.read(nubBytes)  #将一个汉字的5个字节取出
  37.             buff += han_tem     # 将这5个bytes加到尾部
  38.             del buff[0:5]       #删除前面的5个bytes
  39.             show_buffer = (bytearray(buff))     #整个缓存转为字节串
  40.             oled.show(2,6,0,127,show_buffer)    #将整个缓存写入
  41.             time.sleep_ms(1)
  42.     for j in range(0,2):   #写入10列作为两个字之间的空白  
  43.         buff += [0x00]*5
  44.         del buff[0:5]
  45.         show_buffer = (bytearray(buff))
  46.         oled.show(2,6,0,127,show_buffer)
  47.         time.sleep_ms(1)
  48.         
  49. han_font_file.close()
  50. en_font_file.close()
复制代码


看了论坛几位朋友的帖子,并且百度后,算是搞明白了。准备买个编程器和 W25Q64芯片,将字库写入。现在用的是文件形式。

回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-8-18 16:44:53 | 显示全部楼层
这还是字库生成的步骤
步骤截图.jpg




回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册 微信登录

本版积分规则

Archiver|手机版|小黑屋|关于我们|联系我们|网站条款|数码之家 ( 闽ICP备05031405号 )

GMT+8, 2019-8-26 11:09 , Processed in 0.168719 second(s), 14 queries , MemCache On.

Powered by Discuz!

© 2001-2019 Comsenz Inc.

快速回复 返回顶部 返回列表