基于ESP32的电子墨水屏日历


基于ESP32的电子墨水屏日历,使用 4节7号电池可运行多年,支持通过 OpenWeatherMap (开放式天气预报地图,提供免费的天气预报数据和预测,该平台接入了来自全球的气象广播服务和超过40000个气象站的气象数据),实现天气显示等功能。

整机靓照如下

a9d31753510664.webp

Github地址:

https://github.com/wuspy/portal_calendar

Bill of Materials(物料清单)

- 7.5寸800x480电子墨水屏显示器

确保你买的是带分线板的裸显示器,不要买预装在盒子里的。也不要买黑/白/红的,只买标准的黑/白的(刷新率更快,支持局部刷新),下面这个形状的,主要是为了方便连接到ESP32开发板。

d0961753510664.png

584e1753510851.webp

此显示仅适用于2色灰度(全黑或全白,没有灰度级)。然而,这段代码做了一些hack(抖动算法),使它支持4色灰度更好的抗锯齿。当然GxEPD2(用于电子墨水屏显示器的Arduino显示库)项目也做了同样的事情。

- ESP32 Dev Board WiFi+Bluetooth

其高效的稳压器和灵活的输入电压,这种ESP32开发板非常适合碱性干电池电源。如果您使用不同的电路板,则需要修改外壳并提出自己的电源解决方案。

a3f41753510664.png

- 4xAAA电池座

21281753510664.png

- 9个M3x8帽头螺钉、

组装

这个项目需要焊接,总体来说组装比较easy。

通过3D 打印 front.stl和back.stl,cover.stl这几个文件生成壳体。一旦这些都完成了,你就可以开始把东西放在一起进行组装了,注意打印层高度设置为0.2mm。

如果电子墨水显示器前面有保护膜,请将其取下(在一个角落应该有一个红色或绿色的标签,你可以拉一下)。

装配显示屏时,确保显示器是平的,显示器的边缘与顶部和底部的壁架齐平。

8d361753510662.webp

后盖应与前盖的边缘齐平。如果不是,显示器可能没有正确地安装在前盖上。不要试图强迫它,拆下后盖并重新安装显示器。

d3401753510662.webp

后盖安装好后,可以在后盖的每个角上用m3 × 8的螺钉固定。

通过带状电缆将e-Paper Driver HAT插入插槽,并将带状电缆夹入连接器。请确保将其完全插入连接器,并确保将其锁紧,否则当您尝试打开电源时,显示器可能无法工作。同时,确保Display Config开关处于B位置,Interface Config开关处于0位置。

现在有趣的部分开始,切断电线长度和焊接他们到ESP32。注意下面列出的颜色是我得到的线束中使用的颜色,你的可能是相同的。

e3291753510662.png

装配后的效果

29c91753510662.webp

46231753510662.webp

由于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

ffbe1753510662.webp

设置好参数后,你可以像其他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,可以开搞了,有什么想法欢迎打在评论区~


收藏

扫描二维码,在手机上阅读

DIY墨水屏日历:自动刷新位置、天气,随机播放2000多条「毒鸡汤」

我在数字时代做了一个电子日历,让油画和照片可以被装进去

评 论
请登录后再评论