基于ESP32的电子墨水屏日历,使用 4节7号电池可运行多年,支持通过 OpenWeatherMap (开放式天气预报地图,提供免费的天气预报数据和预测,该平台接入了来自全球的气象广播服务和超过40000个气象站的气象数据),实现天气显示等功能。
整机靓照如下
Github地址:
https://github.com/wuspy/portal_calendar
Bill of Materials(物料清单)
- 7.5寸800x480电子墨水屏显示器
确保你买的是带分线板的裸显示器,不要买预装在盒子里的。也不要买黑/白/红的,只买标准的黑/白的(刷新率更快,支持局部刷新),下面这个形状的,主要是为了方便连接到ESP32开发板。
此显示仅适用于2色灰度(全黑或全白,没有灰度级)。然而,这段代码做了一些hack(抖动算法),使它支持4色灰度更好的抗锯齿。当然GxEPD2(用于电子墨水屏显示器的Arduino显示库)项目也做了同样的事情。
- ESP32 Dev Board WiFi+Bluetooth
其高效的稳压器和灵活的输入电压,这种ESP32开发板非常适合碱性干电池电源。如果您使用不同的电路板,则需要修改外壳并提出自己的电源解决方案。
- 4xAAA电池座
- 9个M3x8帽头螺钉、
组装
这个项目需要焊接,总体来说组装比较easy。
通过3D 打印 front.stl和back.stl,cover.stl这几个文件生成壳体。一旦这些都完成了,你就可以开始把东西放在一起进行组装了,注意打印层高度设置为0.2mm。
如果电子墨水显示器前面有保护膜,请将其取下(在一个角落应该有一个红色或绿色的标签,你可以拉一下)。
装配显示屏时,确保显示器是平的,显示器的边缘与顶部和底部的壁架齐平。
后盖应与前盖的边缘齐平。如果不是,显示器可能没有正确地安装在前盖上。不要试图强迫它,拆下后盖并重新安装显示器。
后盖安装好后,可以在后盖的每个角上用m3 × 8的螺钉固定。
通过带状电缆将e-Paper Driver HAT插入插槽,并将带状电缆夹入连接器。请确保将其完全插入连接器,并确保将其锁紧,否则当您尝试打开电源时,显示器可能无法工作。同时,确保Display Config开关处于B位置,Interface Config开关处于0位置。
现在有趣的部分开始,切断电线长度和焊接他们到ESP32。注意下面列出的颜色是我得到的线束中使用的颜色,你的可能是相同的。
装配后的效果
由于ESP32仍然需要编程,所以没有必要把电池放进去。
固件
通读config.h并填写所需的值。至少需要填写WIFI_NAME、WIFI_PASS和TIME_ZONE。需要WiFi连接来保持ESP32的内部时钟同步,并从OpenWeatherMap获取天气信息(如果你启用了该功能)。
用Arduino IDE构建
本项目依赖于ArduinoJson 6.20+,可以通过库管理器安装。同时需要安装ESP32单板2.0+包。转到File -> Preferences并将以下URL添加到Additional Boards Manager URL
https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json
然后,进入Tools -> Boards -> Boards Manager…然后搜索esp32
设置好参数后,你可以像其他arduino一样操作它。
更多信息
计时
ESP32的内部时钟非常不准确,指定的不准确性为5%,相当于每天72分钟。这显然是无用的长期计时,所以需要一个外部时钟。一种解决方案是使用像DS3231这样的RTC模块,但这仍然需要一个外部时间源进行初始化。考虑到这一点,该项目决定放弃这笔额外的费用,每天都需要一个WiFi连接来进行NTP时间同步,如果你决定使用OpenWeatherMap,这是必须的。默认的NTP服务器是pool.ntp.org和time.google.com,如果您愿意,可以在config.h中进行修改。
图形
就像我在物料清单部分提到的,我正在对电子墨水显示器做一些hack的事情,使其支持4色灰度,既可以显示,也可以使不活动的图标看起来更好看。关于所有这些工作原理的细节超出了本自述的范围,可详细了解一些相关的抖动灰度算法。
这样做的结果是,不得不为这个项目编写自己的简单的2位绘图库。用于绘制显示的低级代码位于DisplayGDEW075T7.cpp中,其中包括低级绘图命令,如setPx, drawVLine, drawHLine, fillRect和strokeRect,但也包括更高级的命令,如drawImage, drawText和drawMultilineText。
看到这儿,你是不是觉得很Easy,可以开搞了,有什么想法欢迎打在评论区~