/eInkCalendarOfToxicSoul

毒鸡汤墨水屏日历

Primary LanguageCMIT LicenseMIT

缘由

前两个星期,无意中在小米有品的商店中看到一款电子墨水屏的日历,如下图。觉得挺有意思。刚好新冠疫情前期时,在家闲得慌也用微雪的墨水屏做过一个展示COVID数据的可穿戴设备外挂。 简单评估了下觉得这玩意儿也不难,那就自己做一个毒鸡汤电子墨水屏日历吧。

秒秒测电子墨水屏日历

方案选型

硬件

  • 屏幕:在这样的电子产品中,屏幕可能会是硬件成本最大的一块了。从某些评测视频中看到,秒秒测的这款电子日历为了降低硬件成本应该是没有采用并口的墨水屏方案,只能全刷屏幕且刷新率较低,尺寸为5.83寸。恰好微雪也有一款同尺寸的屏幕如下图分辨率为648*480,基于SPI接口,我猜测和秒秒测应该是同类型/型号的面板,于是毫不犹豫的采用了这款。此屏幕零售价格为231元。如果您希望未来通过树莓派或者其他Arduino设备来驱动他,可以选择带有适配板的套装价格为283.5元。还有就是,现在随着电子墨水屏技术的发展其实也有了彩色的,例如微雪这里也有可额外显示红色或者黄色的版本。不过成本自然就上去了,同时如果您想要复用我的代码,可能也或多或少需要做些少量改动。

微雪5.83寸电子墨水屏模块

微雪电子墨水屏适配板

  • 计算单元:目前使用乐鑫的ESP32芯片可能是个最佳选择,自带2.4G无线网络和蓝牙,具有充足的引脚。动手能力强的可以自己买基于ESP32的模组然后整合到自己的板子里,当然也可以采用市面上各种各样基于ESP32的开发板(当然,前面这两种方式都需要买屏幕时顺便买上适配板,好将屏幕的软排线转换为SPI接口)。作为我这种硬件手残党,加上为了快速出东西,自然还是选用微雪的自带了软排线接口的基于ESP32的墨水屏开发板了,价格78.75元。

ESP32模组

ESP32 DevKitC开发板

微雪ESP32电子墨水屏开发板

  • 电源:在开发过程中,可以通过电脑上的USB接口用micro USB线直接通过开发板来进行供电和调试工作。如果您想要在实际使用中摆脱开电源线的话,我建议您从伟大的某宝上找一块自带micro USB充放接口的锂电池。根据电池的容量不同价格可能不一,不过一般也都是在50元以下,可选择的太多这里我就不放链接了。 因为缺少电压/电量检测,很容易造成锂电过放,所以不建议用我下图这种电池(除非您买的电池是本身有电量显示的)。。。而且我手里的这块微雪的板子的针脚都被我剪断并用热熔胶粘到了镜框背面,所以短期内可能无法进行电池电压检测相关的尝试,主要的是,大家的电源可能不一样,而且接到主板上的方式也不一样比较难做一个统一的电池电源电量检测方案。所以,目前建议大家要么买带有电量显示的锂电池,要么用其他USB电源直接供电。

  • 最后。。。别忘了。。。框架: 根据您的实际情况,找个合适的镜框/盒子什么的,当然您愿意的话裸板挂在墙上也不是不可以。

软件

  • 框架:ESP32上的应用程序可以采用多种软件框架和语言来开发,例如Espressif自己的EDF-IDF框架,或者大家熟悉的Arduino。对我来说,还是用Arduino比较方便点,毕竟里面有许多大量的现成的第三方库可以使用。
  • 开发工具:虽然使用了Arduino框架,但是我还是放弃了Arduino自有的IDE,那玩意儿太难用了,谁用谁知道。都2020年(误,写文档的今天已经是2021年了)我自然是推荐使用Visual Studio Code了,和Git的整合,各种语法高亮快捷跳转。。。相比之下Arduino IDE简直是小盆友的玩具。使用VSCode你来开发Arduino应用的话也还有两个选择,使用微软自己的Arduino插件,或者使用PlatformIO。它也是VSCode的插件,但是内置了各种嵌入式硬件平台和框架和库的整合。用它来做Arduino开发简直要爽到飞起。不过PlatformIO和微软的Arduino插件有冲突只能二选一(我个人还是推荐PlatformIO)。尤其是本Repo中工程为PlatformIO工程,如果您希望在VSC中最小改动进行部署的话,那么您也使用PaltformIO是最好的选择。当然,使用原生 Arduino IDE 需要有一点点小的改动。PlatformIO IDE
  • 相关类库: 在本软件开发中,主要用到了如下第三方库
    • Adafruit GFX: 由著名的电子硬件社区Adafruit提供的一套图形图像引擎。做各种需要显示输出的Arduino应用一般都少不了它了。
    • GxEPD2:基于Adafruit_GFX库来驱动各种电子墨水屏。
    • U8g2 for Adafruit GFX:一套基于U8g2字体引擎来通过Adafruit GFX来显示文字的第三方库。
    • 对于中文字库的生成我使用了前几天撸的一个懒人工具来配合U8g2 for Adafruit GFX.
    • ArduinoJSON:要处理JSON字符串现在少不了它了。
  • 相关服务
    • 毒鸡汤:毒鸡汤的内容并没有采用网络上现有的某个API来处理,而是直接硬编码到了src/toxicsoul.h里。一是觉得又要申请什么API Key之类的太麻烦,服务还不一定长期有效,二是觉得内容不可控有点不放心。所以只不过随手从网上搜了搜一些别人提供的毒鸡汤内容,然后综合整理去重,简单的清洗掉过长或者过时,或者一眼看上去就比较三俗的内容。当然,我也没有耐心挨个去看这好几千条,所以毕竟会有疏忽的地方。如果您有更好的内容或者觉得现有内容有不合适的地方或者说您觉得哪些内容侵犯了您的权利,欢迎提出PR。
    • IP地址查询:用来通过当前设备的IP地址查询得知当前位置。具体可见 src/MyIP.hsrc/MyIP.cpp
    • 字体:项目中的字体使用了造字工房的部分非商用字体来生成。如您要使用,请确保在其授权范围内使用。
    • 天气服务:这里用了和风天气开发平台的服务。所以需要您前往注册账号并获取到自己的一个应用程序Key来替换src/config.h中的占位符。具体相关代码可以参见 src/QWeather.hsrc/QWeather.cpp
const String QWEATHER_API_KEY = "********************";

装配

硬件

连接您的电子墨水屏到微雪的ESP32开发板上,其实很简单,就一个软排线接口,插上口按下卡扣就好。就不多说了。

软件

VSCode和PlatformIO IDE的安装我也不在累述,请自行完成。需要注意以下两点:

  • 修改和风天气API的Key,别忘了

- 从VSCode中分别按照以下步骤从PlatformIO的插件里分别Build和上传文件分区镜像(就是那些天气图标什么的)和程序固件。

如果一切顺利,在VSCode里PlatformIO的串口监视器里就能看到输出的信息了。

成品

只需要简单的替换源代码中你的和风天气API的Key,然后把程序烧录到开发板里,用热熔胶和其他工具把它固定到镜框里,连接上电源。一个毒鸡汤电子墨水屏日历就完工了。 毒鸡汤电子墨水屏日历 成品背面 成品 成品

待优化

  • 加入ESP32的睡眠模式处理来节电,(已经完成)
  • 增加更多内容。。。数据都有就看怎么画好看了。
  • u8g2Fonts引擎和GxEPD2原生绘图之间的冲突问题,目前只能先写完文字刷新后再重新画图然后再刷新。存在二次刷新问题。
  • 改善网络的刷新机制,目前比较懒,所以是每次请求时都会刷新。(使用Deep Sleep机制,所以还是每次都刷新一下好)
  • 清理不必要的字体/缩减字体文件大小。目前为了省事儿,所以打包进了太多字体占用了太多空间,回头有时间得要清理下。