构建一个电子纸智能徽章
假设你的学校、学院或大学正在举办一场活动,比如科学展或博览会。这一次,主办方希望尝试一些不同的方式:不再使用普通的纸质或塑料名牌,而是让参与者使用电子徽章,这些徽章能清晰显示信息,并且可以随时更新内容。
由于你以好奇心强、具备一定技术能力的创客形象著称,主办方便向你提出了这个挑战,并列出了一些项目需求:
当你读到第一条要求时,第一反应可能是:“这不可能实现!”每个电子元件都需要某种电源支持,尤其是显示屏,无论是LCD、OLED还是其他类型!
但你继续往下看:在不同光照条件下仍能保持良好的可见性,同时分辨率也足够高?
也许OLED显示屏会是个不错的选择,因为它色彩鲜艳明亮;又或者,EPD也能胜任这项任务,即使在强光下也能呈现生动的色彩……
等等,之前提到的EPD是双稳态的,这是什么意思?
EPD能不使用电池工作吗?
是的!一旦将图像加载到屏幕上,EPD 就不需要任何电源即可保持显示。
可以重复使用吗?
当然可以!你可以更换图像,并使用新的信息再次启用徽章。
因此,结论很明确:使用EPD屏幕,这个项目完全可行。
商用电子纸徽章
这类设备目前已有商业产品,以不同的名称存在,例如智能徽章、工作徽章或电子纸徽章。如果你在网上搜索,会发现有大量可供选择的选项。
与传统的纸质或塑料名牌相比,电子纸徽章具有多项关键优势:可以轻松更新信息,可多次重复使用同一设备,甚至还能显示额外内容,例如佩戴者的照片、二维码或其他相关信息。
许多此类设备都内置NFC接收器。NFC即近场通信,是一种短距离技术,使设备在仅几厘米范围内即可交换信息。
除了传输数据外,NFC还可利用读取器产生的电磁场为超低功耗设备供电,这意味着接收器无需任何电池即可运行。
继续我们设想的场景,假设你拿到这些信息后,向活动主办方询问他们更倾向于购买现成的解决方案,还是自行开发。答案显而易见:他们希望打造自己的项目——不仅作为徽章使用,还要在活动中展示出来。然而,由于预算限制,NFC接口将无法被包含进来。
因此,在这些规格和限制条件下,让我们开始一起设计属于你的电子纸徽章吧!
组件选择
根据现有的规格,下一步就是选择构建设备所需的组件。
先列出初步清单:
但等等——一个蜂鸣器或许有用,不过它需要电池供电,目前没有可用的电池。
NFC因成本问题被否决,WiFi同样需要电池和CPU来控制,所以这个方案也不行。
把这些都从清单上划掉。
那么,剩下的选项是什么?一个内置EPD的外壳。
如果徽章没有通信功能(没有WiFi或NFC)如何加载屏幕内容呢?
一种折中方案是使用类似EE04的驱动板,连接EPD,加载你想显示的内容,然后断开连接并将其安装到外壳内。
这并不是最优雅的配置,但可能行得通。如果徽章使用频繁,频繁地连接和断开可能会损坏精密的FPC数据线。但如果只是偶尔需要使用一次,这个方案就足够可行了。
选择显示屏
你选择的屏幕将决定整个徽章的外观,因此挑选合适的屏幕非常重要。
在本教程的前面,我们已经介绍了EPD的主要技术参数,接下来在选型时请牢记这些信息。
首先,我们来讨论尺寸问题。中等尺寸的显示屏可能是最佳选择。7英寸的屏幕可能太笨重,不太适合佩戴在脖子上,而2到4英寸之间的屏幕则恰到好处。
下一个关键问题是颜色:我们该选择单色屏幕还是彩色屏幕?
彩色屏幕确实更引人注目——它们能让信息更加突出。但同时速度也较慢:彩色电子纸需要复杂的波形,这意味着刷新过程更耗时,因为要通过多个步骤才能准确定位每种颜料的位置。
相比之下,单色屏幕则快得多,甚至支持部分刷新,因此可以快速更新屏幕的某一部分或小区域。
在下图中,你可以比较两个相同尺寸(2.9英寸)显示屏的速度特性,这非常方便。
一个显示屏可显示4个灰度等级,另一个则能显示4种颜色。单色显示屏的完整刷新大约需要3秒,而彩色版本则需25秒,几乎是前者的10倍!
如你所见,速度差异巨大。但请仔细想想:我们真的需要这么快的屏幕吗?我们要显示的数据是否经常变化?
如果您的徽章将显示一张固定图像——连续多天不变,且无任何更改——那么初始缓慢刷新并不成问题,因为这种情况只发生一次,之后你便不会再察觉。因此,在这种情况下,刷新时间并非限制因素。
考虑到使用颜色带来的诸多优势,我们选择右侧的显示屏:一个2.9英寸、四色(白色、黑色、红色和黄色)EPD,分辨率为128 x 296像素。
主要特点
该显示屏采用JD79667驱动芯片,可支持最高200x384像素分辨率的屏幕。
该芯片内置每像素2位(2bpp)的缓冲区,并配有集成温度传感器。此外,它还具备非易失性MTP(多时间可编程)存储器。与只能编程一次的OTP存储器不同,MTP存储器可以多次擦除和重写。这种存储器用于保存默认的LUT(查找表)及其他重要信息。
为了控制屏幕并加载内容,我们将使用之前提到的EE04板及其24针接口。
显示文本
本项目中我们将制作的徽章会通过文字和简单的图形(如线条和矩形)来展示信息。尽管Seeed_GFX支持图像加载,但我们暂且将此功能留待后续项目。
这样,你可以从基础开始,随着对库的运作方式逐渐熟悉,再逐步进阶到更复杂的内容。
现在,让我们回到之前看到的、在屏幕上显示文本的基本程序:
如果你运行这段代码,可能会出现错误提示,或者在EPD上看不到任何变化。这是因为缺少了某些信息:你需要告诉库你正在使用的显示屏和驱动板的组合。
为此,你需要创建一个名为 driver.h 的额外文件。在 IDE 中,按下 Ctrl+Shift+N 可以打开一个新标签页。
在 driver.h 文件中,你需要添加一些定义。不必担心记忆这些内容或查阅文档——Seeed Studio 提供了一个在线工具,让这一步变得非常简单。
在此页面上,只需选择你的显示屏面板和驱动板。对于本项目,它应该如下所示:
完成选择后,下方的文本框会自动更新为你需要的定义。
直接将该内容复制到你的 driver.h 文件中即可。
现在,如果你编译并上传程序,它应该能正常运行且无错误。经过几秒钟的闪烁和颜色变化后,你会看到类似以下的内容:
哇!好吧,我知道这听起来不太惊艳,但确实很令人兴奋。
这是你首次在EPD屏幕上显示的内容。
请耐心等待,这仅仅是个开始。
颜色与坐标
本项目所使用的显示屏支持四种颜色,在库中分别定义为TFT_WHITE、TFT_BLACK、TFT_RED和TFT_YELLOW。
要在屏幕上放置任何元素,通常使用一个x、y坐标系。该系统的原点可以更改(稍后我们会看到),但默认情况下,0, 0点位于屏幕左上角,即与FPC数据线相对的一侧。
x坐标向右递增,y坐标向下递增。
使用字体
Seeed_GFX支持使用多种不同字体显示文本,每种字体都有其独特的样式、大小和特性。
可用的字体可能因您的显示屏而异,因此这里提供一个小提示,帮助您快速检查在不同情况下可使用的字体。
库文件中包含多个配置文件,存放在User_Setups文件夹中,这些文件用于不同的功能,例如设置显示尺寸、驱动芯片、连接引脚等。
每个配置文件都分配有一个数字代码。对于2.9英寸彩色显示屏和EE04板卡,该代码为512(您可以在driver.h文件中查看)。
如果您进入User_Setups文件夹,会找到名为Setup512_Seeed_XIAO_EPaper_2inch9_BWRY.h的文件,其中包含以下定义:
这些定义表示您共有6种可用字体:1、2、4、6、7和8。每种字体的字号各不相同——有些包含所有字母和字符,而另一些可能仅包含数字和少数符号(注释中会说明具体区别)。
这也意味着启用了FreeFonts——这是一组开源字体,源自Adafruit最初创建的一个库。我们稍后会详细讨论这些字体。
要选择这6种字体中的某一种,请使用setTextFont方法并指定相应的编号。例如:
让我们利用这些知识在徽章上显示用户信息。
例如,你可以添加身份证号、姓名、头衔,甚至一些活动信息——但请随意添加你认为合适的内容。
代码示例如下:
结果如图所示。
如图所示,字体2和4非常适合此用途。可以尝试其他字体,查看它们的外观效果。
更换字体是一个重要的进步,但通过使用FreeFonts进一步优化徽章外观仍有空间。
FreeFonts
正如我们在 Setup512_Seeed_XIAO_EPaper_2inch9_BWRY.h 文件中看到的,已启用所谓的 FreeFonts。
这些字体种类繁多,每个字体都定义在库中的 Fonts/GFXFF 文件夹内的一个头文件 (.h) 中。
每个字体的名称会告诉你其样式和大小。例如,字体 FreeSans9pt7b 可以这样拆解:
Free:这是一个开源字体,无任何许可证限制。
Sans:这是一种现代无衬线字体(如 Arial),也可能是 Mono(一种简单的一行间距字体)或 Serif(更具装饰性,如 Times New Roman)。
Bold:表示该字体为粗体。你可能还会看到斜体或粗体,如果字体是常规的则可能什么都不会显示。
9pt:这是以点为单位的字体大小。
7b:表示该字体使用7位值定义。
使用FreeFonts
现在我们了解了什么是FreeFonts,接下来来看看如何利用它们来改进我们的徽章。
要选择其中一种字体,你需要使用setFreeFont方法,并传入一个指向字体定义的指针。以下是应用FreeFonts后的代码示例:
如你所见,名字部分使用的是FreeSansBold12pt7b字体,事件信息部分则使用FreeMonoBold12pt7b字体。
当然,你可以选择任何你喜欢的字体,只要其尺寸适合你的显示设备即可。
其他字体
如果你浏览库中的Fonts文件夹,会发现另外两个文件夹:Custom和TrueType。后者目前尚不支持,但在Custom文件夹中有一些可供实验使用的字体定义——不过它们对于这个显示屏来说稍大了一些。
自定义字体是由用户创建的字体。你甚至可以自己设计字体,但这一点我们留待以后讨论。
添加图形
最后,为了完成徽章的设计,让我们添加一些简单的图形,例如线条和矩形。该库包含一系列丰富的图形函数,可轻松绘制圆形、矩形、椭圆等。我们将在另一个项目中详细讲解这些功能。
线条可以通过多种方式绘制:使用 drawFastHLine 和 drawFastVLine 绘制优化的水平和垂直线;或使用 drawLine 处理一般情况——这使你能够连接任意两点之间的直线。
矩形可以使用 drawRect 画出空心矩形,通过 fillRect 填充颜色,也可以使用 drawRoundRect 画出带圆角的矩形。
通过添加几条分隔线和填充的矩形来改变背景颜色,我们的徽章最终呈现出如下效果:
这里有一个有趣之处:我并没有以像素为单位指定矩形和分隔线的宽度,而是使用了 width 方法,它返回的是显示屏的实际宽度。
我还使用了 height 方法获取总像素高度,从而更方便地设置白色矩形的高度。
为了完成整个过程并制作出一个实用的原型,我为显示屏加了一个3D打印的外壳。
这就是最终成品徽章的样子!
结论
在这个项目中,我们学习了如何根据一组特定的设计要求,使用彩色显示屏和EE04板开发一个简单应用程序。
通过应用本教程第一部分涵盖的多个概念,我们为所提出的问题找到了可行的解决方案,并设计出一个完整的系统——包括硬件和软件部分,最终制作出一个可运行的原型。
在过程中,我们探索了Seeed_GFX库的工作原理,特别是其与ePaper技术相关的独特功能。我们也深入研究了该库如何利用不同字体在屏幕上渲染文字。
我们在此构建的徽章只是其中一种可能的应用。掌握这些知识后,你可以按照自己的想法重新设计它,或将其用于完全不同的用途——无论是个性化凭证、活动配饰,还是用于显示信息或消息的微型显示屏。
本文编译自hackster.io





