1058|5

253

帖子

3

TA的资源

纯净的硅(初级)

楼主
 

【DigiKey“智造万物,快乐不停”创意大赛】经典老黄历 [复制链接]

  本帖最后由 HonestQiao 于 2024-1-10 23:40 编辑
【DigiKey“智造万物,快乐不停”创意大赛】经典老黄历
 
作品名称:经典老黄历
作者: HonestQiao
 
一、作品简介(100-200字)1
二、系统框图(图文结合)3
三、各部分功能说明(图文结合)11
四、 作品源码 26
五、作品功能演示视频 27
六、项目总结 28
七、其他 30
 
一、作品简介(100-200字)
(设计名称、作品照片、项目用到的板卡、芯片、模块等介绍,作品功能介绍等)

设计名称:经典老黄历
作品照片:
 
项目用到的板卡、芯片、模块:
M5Paper,核心为ESP32-D0WDQ6
 
作品功能介绍:
本作品基于M5Paper制作而成,通过ESP32的WiFi联网功能从网络服务获取老黄历数据,并根据老黄历数据进行屏幕的显示处理,从而呈现出一款经典的老黄历。
经典老黄历的界面呈现较为复杂繁琐,为了方便界面的显示和调整,定义了一套使用json数据格式,进行界面元素绘制的规范,通过网络服务提供动态的json数据给 M5Paper,从而实现了修改json数据中的定义,就能够实现 M5Paper 上的经典老黄历界面的更新,让界面和代码解耦。
同时利用M5Paper 上的滚轮,方便使用者向前或者向后查看老黄历,以及刷新当前的经典老黄历界面。
 
二、系统框图(图文结合)
(设计思路、系统软硬件介绍及实现框图,以图文结合的展示)

设计思路:
M5Paper使用的是电子墨水屏,电子墨水屏显示内容以后,可以在断电的情况下继续显示,非常适合不需要频繁更新界面的应用场合。
用 M5Paper 来作为日历界面的呈现,非常适合,不过感觉一般的日历呈现难度有点低。经过一番研究准备,最终选择了经典老黄历。
要在M5Paper 上实现经典老黄历,核心要处理的问题就是界面的呈现。我选择了参考 紫薇黄历网站的传统老黄历界面和数据,网址见本文结尾出所列链接。
为了复刻经典老黄历的界面,使用图形软件,进行了界面中显示元素的坐标定位:
因为经典老黄历的界面呈现较为复杂,PC上显示的界面,并不能直接复制到M5Paper上面进行显示,而一旦要修改界面,就需要修改代码,重新编译下载,然后运行显示。即使是采用的是micropython类环境,每次执行要重新初始化M5Paper的系统,也耗时耗力。
在经过漫长而痛苦的界面修改调试后,最终决定,定义一套JSON格式的数据规范,来控制M5Paper提供的屏幕处理,让 M5Paper 上的程序,通过网络请求并解析JSON数据,并根据JSON数据,决定实际该调用哪个屏幕函数,以及传递什么参数。通过这样的数据规范,把M5Paper 上的程序写好了,后面就需要简单修改JSON数据,就能够实现屏幕的更新了。
为了方便测试查看,把 M5Paper 上的滚轮也使用上了,通过滚轮,可以刷新当前经典老黄历界面,也可向前或者向后查看老黄历。
 
系统软硬件介绍:
 
硬件介绍:
经典老黄历仅使用M5Paper即可实现,M5Paper官方资料如下:
其具体规格参数如下:
在M5Paper上,本作品使用到了如下的内置外设:
  • 滚轮:用于刷新当前界面,以及往前或者往后查看
  • SD卡:使用一块8GB的SD卡存储TTF字体文件
 
软件介绍:
软件部分,分为3个部分:
 
JSON数据规范:
JSON数据规范的核心:
  • 屏幕处理基础参数定义
  • 屏幕处理实际调用队形和参数定义
上图是JSON数据规范的模块,其中详细定义了以及基础参数,并在data_demo中,定义了要在屏幕上进行显示处理实际可以用到的调用对象,以及其所使用的参数。
例如:
表示调用M5Paper屏幕处理,在屏幕上坐标(x=27, y=25)的位置,显示字符7,文字颜色为白色。
 
服务端:
服务端的核心:
  • 通过网络提供API接口
  • 根据API接口返回对应日期的老黄历JSON数据
服务端程序,使用Python的Flask进行开发,提供API调用接口,通过传递的参数,检查是否存在对应日期的老黄历数据,并根据实际情况,提供给M5Paper使用。
具体的API调用方式如下:
  • /api/v1.0/laohuangli/index/prev/n:查看前面第n天的老黄历
  • /api/v1.0/laohuangli/index/next/n:查看后面第n天的老黄历
  • /api/v1.0/laohuangli/index/next/0:查看当天的老黄历
 
M5Paper部分:
M5Paper部分的核心:
  • 滚轮按键处理
  • WiFi网络连接处理
  • API接口请求处理
  • 根据JSON数据规范解析老黄历数据
  • 调用屏幕处理方法进行界面元素的呈现处理
在M5Paper上,使用Arduino IDE和M5Stack提供的M5EPD支持库进行开发。
 
 
实现框图:
具体的实现部分,分为以上两个部分,分别是M5Paper和Python服务端。
 
 
三、各部分功能说明(图文结合)
(各部分实现的功能说明及讲解,以图文结合的展示)
 
服务端:
服务端的核心处理代码如下:
在上述代码中,根据请求API时,提供的参数,来检查caches目录中,是否有对应日期的老黄历JSON数据。
如果今天为2024年1月10日,则访问如下的API接口,则会返回如下的数据:
  • /api/v1.0/laohuangli/index/prev/1:返回2024年1月9日的老黄历JSON数据
  • /api/v1.0/laohuangli/index/next/1:返回2024年1月11日的老黄历JSON数据
  • /api/v1.0/laohuangli/index/next/0:返回当天2024年1月10日的老黄历JSON数据
老黄历的数据,需要提前进行准备,根据JSON数据规范的格式,结合老黄历本身的数据进行生成备用。
为了方便大家测试,提供了2024年1月整月的老黄历数据。
当调用服务端API接口时,返回对应的最终数据如下:
通过上述的调用定义序列,让M5Paper进行一步步的屏幕处理操作。
 
M5Paper部分:
在Arduino代码中,定义了一个根据JSON数据规范,来一对一方法调用的类:
在这个类的每个调用方法的具体实现中,根据M5Paper的EPD屏幕处理,进行实际的调用:
然后,在通过网络获取到老黄历的JSON数据后,对其进行解析处理:
通过上面的解析和调用,最终就能够实现通过JSON数据规范定义的老黄历JSON数据,在M5Paper上,进行实际界面的呈现了。
在运行的过程中,如果通过数据线连接了电脑,开启了串口监听,则能够看到输出的调试信息:
另外,在代码中,还在loop()调用部分,进行了滚轮按键检查,来实现天数的变化和调用的刷新处理:
按键后,通过串口监听,也可以看到调试信息:
 
实际界面操作:
系统启动时显示:
 
 
 
API请求数据时:
 
 
 
当日老黄历:2024年1月10日
 
 
前一天老黄历:2024年1月9日
 
 
后一天老黄历:2024年1月11日
 
 
网络请求出现问题时:
 
 
 
 

四、作品源码

(可下载的项目源码及说明,源码请上传到EEWorld下载中心,下载链接粘贴到作品文档和作品提交帖中)
源码下载地址:https://download.eeworld.com.cn/detail/HonestQiao/630745
源码说明:
  • arduino目录内为M5Paper上运行的代码
    • lao_huang_li_m5paper.ino:M5Paper上运行的Arduino程序代码
  • server为Python开发的服务端代码
    • laohuangli_server.py:服务端Py程序
    • requirements.txt:运行服务端的依赖包
    • templates/laohuangli.tpl.default.json:JSON数据规范模板文件
    • caches:根据JSON数据规范模板文件生成的老黄历数据,提供了2024年1月整月的数据
 
五、作品功能演示视频
(视频简介+链接,视频链接:可上传到EEWorld大学堂,观看链接粘贴到作品文档和作品提交帖中,也可直接上传到作品帖中)

视频简介:视频展示了经典老黄历的具体功能,以及操作方法。还对使用的代码,进行了简明扼要的讲解。

视频链接:https://training.eeworld.com.cn/course/68363


 

 

六、项目总结

(项目文字总结+帖子分享链接汇总)

项目总结:
这次活动中,千挑万选,选择了M5Stack的M5Paper这款设备。
经过实际的使用,发M5Paper真的是相当的好用,其所使用的EPD_ED047TC1墨水屏分辨率为540x960,显示的效果也非常的不错。
虽然M5Stack为M5Paper提供了UI Flow图形界面开发环境、micropython和circuitpython开发环境,以及Arduino支持库,但最终使用上,在Arduino环境中进行开发,最终效果最好。
通过M5EPD库的支持,能够将M5Paper的功能完全发挥出来。M5EPD提供的EPD屏幕处理函数,非常的丰富。不过在墨水屏上,进行复杂界面的显示和调试,依然是一件非常费劲的功夫。
在UI Flow中,可以在图形界面开发环境中,进行预览,不过不知道为啥,M5Stack支持M5Paper的UI Flow版本是老旧的v1.0版本,其对应的底层环境micropython也是老旧的版本。
因此,为了更好提高开发经典老黄历的调试效率,最终摸索定义了JSON数据干规范,使得界面调试的速度超大幅度的提升。
另外,在开发的过程中,也考虑到了通用性,采用定义调用接口类的方式,与底层硬件设备进行一定程度的解绑,以便于在其他类似设备的移植。目前已经在两款墨水屏上,实现了规范化数据的调用和显示处理。
感谢EEWorld提供本次创意大赛的机会,得以在这个小小的M5Paper上,实现经典老黄历的功能。翻看大家提交的作品,真的是各种创意不断,受益匪浅。衷心祝愿每个创意作品都能得奖,衷心祝愿EEWorld也会越办越好!

帖子分享链接:

 

七、其他

在本项目开发的过程中,参考了非常多的资料和文档,包括但不限于如下列出的:
对所有参考的资料和文档的作者,都报以由衷的感谢!
 
 
附加:电子文档
Word版本: 经典老黄历.doc (28.29 MB, 下载次数: 4)
PDF版本: 经典老黄历.pdf (7.24 MB, 下载次数: 4)

 

最新回复

666   详情 回复 发表于 2024-1-11 14:02
点赞 关注(1)
 
 

回复
举报

6841

帖子

11

TA的资源

版主

沙发
 
乔老师这作品,给周易补上了现代的元素,那些老家伙们看这电子书,可能不用老花镜了吧。祝大佬喜得大奖!

点评

感谢大佬提携!!!   大佬你的作品,更是用心用功,与实际需求结合,落到产品实处,更值得学习!  详情 回复 发表于 2024-1-11 08:38
 
 
 

回复

253

帖子

3

TA的资源

纯净的硅(初级)

板凳
 
lugl4313820 发表于 2024-1-11 08:07 乔老师这作品,给周易补上了现代的元素,那些老家伙们看这电子书,可能不用老花镜了吧。祝大佬喜得大奖!

感谢大佬提携!!!

 

大佬你的作品,更是用心用功,与实际需求结合,落到产品实处,更值得学习!

 
 
 

回复

6060

帖子

6

TA的资源

版主

4
 

这个创意真不错,效果也是杠杠的  

点评

由于定义了JSON数据规范来控制屏幕,所以不是这个屏或者板子的,在Arduino开发环境中,也能够快速的进行移植。  详情 回复 发表于 2024-1-11 13:57
个人签名

在爱好的道路上不断前进,在生活的迷雾中播撒光引

 
 
 

回复

253

帖子

3

TA的资源

纯净的硅(初级)

5
 
秦天qintian0303 发表于 2024-1-11 11:20 这个创意真不错,效果也是杠杠的  

由于定义了JSON数据规范来控制屏幕,所以不是这个屏或者板子的,在Arduino开发环境中,也能够快速的进行移植。

 
 
 

回复

221

帖子

2

TA的资源

纯净的硅(初级)

6
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表