[LiClock]可编程墨水屏时钟
简介
支持图形化编程、多APP调度、在线调试,对新手友好的墨水屏天气时钟,全开源
简介:支持图形化编程、多APP调度、在线调试,对新手友好的墨水屏天气时钟,全开源开源协议
:CC BY-SA 3.0
(未经作者授权,禁止转载)描述
一种基于ESP32的 2.9寸可编程墨水屏天气时钟
项目说明
网上能找到许多2.9寸天气时钟,不过有的功能多但没有开源,有的开源的功能较少。
还有的并没有用立创EDA设计,不能享受嘉立创的优惠。
为了让每个人都能快速DIY属于自己的墨水屏天气时钟,并让每个人都能参与开发,
为了完成曾经“校园生活助手 7”项目没做完的Lua解释器
我决定利用暑假设计一个扩展性强,DIY过程对新手友好,功能全且成本低的墨水屏天气时钟。
Github 仓库点这里
介绍视频已发布,点这里
固件烧录/更新,点这里
最新信息之后会在Github发布,本页面最后更新时间:2024年1月18日10点38分
HW3.0硬件已更新。
开源协议
EDA工程开源协议为CC-BY-SA 3.0,其中:
CC:知识共享许可协议(英语:Creative Commons license)的缩写
BY:署名,您必须给出适当的署名,提供指向本许可协议的链接,同时标明是否(对原始作品)作了修改。
SA:相同方式共享,如果您 再混合、转换或者基于本作品进行创作,您必须基于与原先许可协议相同的许可协议分享发布您贡献的作品。
源代码开源协议为GPL-3.0,允许开源情况下商用,但请标明原作者和工程链接,不得售卖源代码或作为闭源项目发布
另外,按照GPL-3.0协议要求,由此项目衍生出的代码如果分享或商用,必须以GPL3.0开源并在显眼的地方声明
此处的开源指使任何人可以自由且免费地获得、修改源代码和(或)硬件工程源文件
另外因为用了彩云天气的API,仅供学习研究,如果需要商用,则不得包含此源代码或由其产生的二进制文件
项目相关功能
此项目后端使用Arduino(C++ PlatformIO)开发,并移植了Lua解释器用于执行图形化编程代码
主要设计功能如下:
- 通过彩云天气API获取本地天气并显示
- 使用ESP32内部RTC提供时钟信号,经过两次NTP同步进行线性偏移补偿,可做到日误差小于2秒
- 内置Web服务器用于配置天气位置,管理内部文件等
- 内置GUI框架,包括对话框、菜单等
- 简易电子书功能
- Bilibili粉丝显示器
- 完善的设置菜单
- 通过蜂鸣器播放经过转码的Midi音乐
- 简易的闹钟
- 内置Blocky 图形化开发环境,只要有浏览器就能为它添加功能
此项目以易用性和可二次开发为核心目标:
- 系统框架与App解耦,每个“App”源码为单个cpp文件,复制到app目录后自动识别编译并添加到APP列表,无需其它修改操作。TF卡、传感器等外设在第一次开机时自动识别,由系统统一管理,不使用时自动断电(传感器进入省电模式)
- APP为事件驱动,有较为完善的GUI框架,可以快速实现想要的功能,另外,电子书App等内置App在不刷新屏幕时和关机状态耗电量相同(注意:GUI框架在等待用户输入时不会进入休眠模式)
- 无需配置API KEY,无需手动设置时钟误差修正,无需手动配置Bilibili UID(手机扫码登录),只需填写天气GPS坐标(GCJ-02)和WiFi密码
- 对于不会配置环境的小伙伴,提供全功能二进制文件,直接烧录运行也可体验所有功能
- 内置Lua语言解释器和Google Blockly开发环境,可通过lua语言编写APP,网页端上传后直接运行,同时可以无缝添加到App列表,设置为主屏幕App等
在安全性和稳定性方面
- PCB设计有电源自动切换电路,无需担心电池循环充放电引发危险
- 软件方面一定时间未操作自动关机,避免电池电量耗尽(只限于App选择界面和网络重新配置界面,其它需要用户确认的地方不会自动休眠)
- 同时也设计有电量检测功能
- 万一遇到无限重启的情况,可先按住向左键后,按背面的复位按钮,这将立即关闭此设备,避免频繁刷新烧坏屏幕
项目属性
本项目为首次公开,为本人原创项目。项目未曾在别的比赛中获奖。
项目进度
- 2023/07/24 功能设计,开发板购买
- 2023/07/27 功能可行性分析完成,基本开发思路确定
- 2023/08/06 各电路模块功能测试通过
- 2023/08/08 创建EDA项目
- 2023/08/09 元器件选型完成,PCB设计完成,等待审核生产
- 2023/10/02 公开源代码到Github
- 2023/10/17 完成项目介绍
设计原理
硬件部分都比较简单。除了那个电源自动切换电路是网上找到的,我也不知道原理,但是可以用,还特别稳定。
整体框图:
AppManager类管理全部App(包括Lua App)的生命周期
HAL类为硬件相关功能,同时提供自动连接WiFi、NTP同步等服务
Peripheral类管理已安装的外设,同时在App运行时按需开关外设电源(或进入与退出省电模式)
Lua解释器解释运行Lua App,实现App的动态添加与删除
FreeRTOS为ESP-IDF提供的实时操作系统,此处主要用于实现多线程
软件说明
系统 主要 运行下面三个任务
AppManager:用于执行App代码,判断下次休眠时间
HAL:自动更新时间和电池电压,并处理按钮事件
Lua调试:在网页端调试Lua时创建,方便在需要时立即结束程序运行,同时防止Lua进程阻塞web服务器运行
系统初始化步骤如下
实物展示
背面
主页面(下方阴影部分为降水量)
预警信息(按任意键返回)
App选择(在电子书应用外任意App中长按中键,也可以在设置中选择任意App作为主屏幕App)
完善的设置菜单
扫码二维码连接配置用的热点(也可以手动输入密码或使用SmartConfig)
电子书(长按左键上一页,长按右键下一页,继续长按右键可进入菜单)
Bilibili二维码登录
都拿到cookies了,剩下的功能就靠大家了 其实是因为我不会设计UI[doge]
简易的Bilibili粉丝数显示界面(UI非常简易,但功能超过网上80%的作品)
外设自动探测,可以用来检验传感器是否正确焊接
--Blockly IDE 简介--
开发这个功能也是为了解决自定义表盘的问题
可以随时修改代码、互相分享工程、减少调试所需的编译上传时间
网页端(可以在左边使用“积木”编程,或者直接编辑Lua代码,但不支持Lua反向转化为Blockly)
使用WebSocket实现终端功能,lua的输出和报错将被重定向到这里
Lua运行结果
App创建
创建的App,除了能卸载或从TF卡安装,用起来和内置App完全没有区别(内置App是基于C++的)
详细程序编写说明请看Github Readme
文件管理
预览“lbm”图像文件(实质上是xbm二进制版,可用GIMP保存为xbm格式,后使用GitHub仓库tools目录下xbm转lbm工具)
lua已实现相对目录(如果需要访问资源文件,请将其放在webtmp文件夹下,创建App时会一并复制,支持.表示当前目录,不支持..文件夹)
sd卡挂载到/sd/,内置littlefs挂载到/littlefs
蜂鸣器支持播放.buz文件(midi转buz的python程序同样放在GitHub的tools目录下)
更多Lua函数添加中,也欢迎大家贡献自己的代码或工程文件
DIY注意事项
这回BOM很全,可以直接照着买
经小批量生产测试,硬件已经没有BUG了,如果烧不进程序等问题只可能是没焊好
HW3.0硬件已修复之前提到的全部问题,软件只支持2.0及以上版本
电池接口如果选择连接器,可能会导致无法装进外壳
原理图“可选功能”整页都可以不焊接,系统会自动识别都焊了什么
ESP32可以用ESP32-WROOM系列,系统会自动根据Flash剩余容量调整LittleFS分区大小
千万别买带PSRAM的ESP32!!!
焊好后,烧录好程序,跟着OOBE配置就行。
一键烧录最新固件:https://diylxy.github.io/LiClockWebFlash/
最新源代码和编译好的固件在这个网页的最上面
(附件按照开源平台的要求,包含了2023年12月2日更新的源代码)
3D模型也在Github仓库里
如果觉得工程不错,别忘了点赞收藏,谢谢大家!
评论