当前位置:首页 > 工业控制 > 电路设计项目集锦
[导读]这一次,我们将通过使用GxEPD2库(用于控制ePaper屏幕的流行Arduino库)深入了解该显示器的功能,并将我们所学到的一切应用于具体项目:实时比特币价格监视器。

介绍

在上一篇文章中,我们探讨了CrowPanel ePaper显示器的主要特性,并通过一个简单的示例学习了如何使用Elecrow库与Arduino一起控制5.79″面板。

这一次,我们将通过使用GxEPD2库(用于控制ePaper屏幕的流行Arduino库)深入了解该显示器的功能,并将我们所学到的一切应用于具体项目:实时比特币价格监视器。

GxEPD2库

GxEPD2是GxEPD的演变,是Arduino库的第一个版本,专门用于控制带有SPI接口的电子纸显示器(EPD -电子纸显示器)。GxEPD2由Jean-Marc Zingg (ZinggJM)开发,扩展了其前身的功能,并为Good Display和Waveshare等领先制造商的各种显示器提供支持。

GxEPD2库依赖于另一个广泛使用的库Adafruit_GFX进行操作。这个库由Adafruit开发,是Arduino生态系统中最受欢迎的库之一。它提供了一组功能,用于在各种显示器上绘制文本和几何形状,如LCD和OLED屏幕。

这两个库之间的关系可以总结如下:虽然Adafruit_GFX处理图形原语并提供渲染图形和文本的基本工具,但GxEPD2通过专门管理ePaper显示器(EPD)及其SPI通信接口的控制来补充它。这样,Adafruit_GFX管理可视化表示,GxEPD2侧重于epd的操作和功能。

接下来,我将解释如何在Arduino IDE 2中安装GxEPD2和Adafruit_GFX库,以便与5.79″Elecrow面板一起使用它们,以及如何利用它们的功能来显示文本,图形和图像。

在本教程中,我假设您已经安装并配置了Arduino IDE 2,以使用5.79英寸的CrowPanel。如果没有,我建议您阅读我之前的文章,在那里我解释了如何设置它。

安装

在使用这些库之前,您需要按照标准过程将它们安装到Arduino IDE中。

由于GxEPD2依赖于Adafruit_GFX,您只需要直接安装GxEPD2。在安装过程中,IDE将检测依赖项并提示您安装Adafruit库。此时,只需确认并继续安装即可。

该过程与安装任何其他库相同。单击左侧工具栏中的库管理器或从主菜单中选择工具→管理库。

使用任何一种方法都会打开一个搜索框。输入GxEPD2来搜索库,当找到它时,单击INSTALL按钮。

版本:确保安装最新版本的GxEPD2,不要将其与GxEPD混淆,后者是旧版本。

在IDE中,您应该看到如下内容:

图1所示。安装GxEPD2

单击INSTALL后,IDE将检测与其他库(如Adafruit_GFX)的依赖关系,并询问您是否也想安装它们。单击INSTALL ALL确认

图2所示。GxEPD2的依赖项

几分钟后,IDE将下载并安装所有必要的文件。

连接

使用GxEPD2库的第一步是配置ePaper连接,指定将哪些微控制器引脚分配给各种控制信号。在这种情况下,我们需要定义BUSY, RST(复位),DC(数据/命令),CS(芯片选择),SCK(串行时钟)和MOSI(主输出,从输入)信号。

幸运的是,Elecrow已经在他们的存储库中分享了该面板的原理图,使得检查和识别ESP32上连接到这些信号的引脚变得容易。

图3所示。5.79″面板电路(片段)

我们感兴趣的连接是前面图片中用红色标记的那些:

图4所示。电子报连接

安装好所有库并准备好ePaper连接细节之后,我们就可以开始使用GxEPD提供的各种特性编写代码了。为了使其更具吸引力,我们将朝着一个具体的目标努力:开发一个充分利用该面板的特定应用程序。

实时比特币监控

接下来,我们将探索使我们能够控制ePaper显示的几个GxEPD2函数。我们的目标是建立一个实时比特币价格监视器。该设备将从在线服务中获取加密货币的当前值并将其显示在屏幕上。我们将包括图像、文本和数字,以一种有吸引力和视觉组织的方式呈现关键信息。

最终的结果看起来像这样:

图5所示。行动中的监视器

为了开发这个应用程序的代码,我们将学习如何单独控制每个元素。我们将分解并分析每一步,所以让我们从基础开始。

显示文本

让我们从简单的事情开始:在屏幕上显示文本。这不仅可以帮助我们熟悉与文本相关的函数,还可以教我们如何正确地初始化面板和库。

GxEPD2提供了处理文本的各种功能,例如编写消息、选择字体、调整颜色和定义大小。

下面是一个使用不同字体和文本大小显示经典“Hello, World!”消息的示例:

让我们分解代码来理解它是如何工作的:

在代码的第一行中,我们发现了几个#include指令。第一个集成了GxEPD2库,特别是为单色显示设计的版本(因此添加了BW)。下面的#include指令用于加载字体定义,稍后我们将使用这些定义在屏幕上显示文本。

可用的字体是在Adafruit_GFX库中定义的,位于fonts文件夹中。每种字体都使用头文件(.h)定义。

图6所示。字体定义

每种字体的名称表示字体、样式和大小。例如,前面示例中使用的字体FreeSans24pt7b可以分解为以下元素:

Free:表示该字体为自由字体,没有许可限制。

Sans:指现代风格的字体,如Arial。它也可以是Mono,一种简单的等宽字体,或Serif,一种更具装饰性的字体,如Times New Roman。

加粗:表示字体加粗。如果没有指定,它也可以是斜的(斜体)或正则的。

24pt:指以点为单位的字体大小。

7b:表示使用7位值定义字体。

要选择显示文本的字体,必须使用setFont方法,但首先需要通过包含相应的头文件来加载字体定义。

继续进行代码分析,我们找到了几个指定ePaper连接的常量的定义,如前所述。这些值是必需的,稍后将用于创建表示显示的对象。

下一步是创建与显示相关联的对象。为此,我们使用一个名为GxEPD2_BW的模板,它接受以下参数:

GxEPD2_579_GDEY0579T93:类标识符,充当此显示模型的特定驱动程序。

GxEPD2_579_GDEY0579T93::HEIGHT:一个常量,它定义了显示的高度,并确定将使用分页模式还是非分页模式(不要担心,稍后我会解释这意味着什么)。

5.79″CrowPanel(像其他型号一样)没有在GxEPD2支持的显示器中列出,因为它是除了ePaper显示器之外集成了几个组件的设备。根据我的测试,所包含的显示器的特性与Good display中的GDEY0579T93型号匹配,该型号是本示例代码中使用的型号。

最后,为显示对象使用构造函数(如果愿意,您可以重命名它),再次将显示标识符作为参数与连接引脚的详细信息一起传递(使用我们前面定义的常量)。

CrowPanel的另一个独特之处在于它包含了一个控制屏幕电源的电路,从而实现了高效的能源管理。

该电路的控制引脚是GPIO7,因此在尝试访问显示器之前,第一步是通过将该引脚设置为HIGH来打开电源。

为了实现这一点,我包含了displayPowerOn函数,它处理这个任务:

继续编写代码,我们将转向Arduino中的设置函数。

正如您所看到的,它由对属于显示对象的各种方法的调用组成,这就是使用语法display.method(parameters)的原因。让我们回顾一下每个方法的作用:

init:初始化显示对象的几个元素。这里,我们提供值115200,它为通过串行监视器的诊断输出设置波特率。您可以通过将其设置为0来禁用它,但这有助于理解库正在做什么。

setFullWindow:表示将使用整个屏幕。也可以只使用屏幕的一部分来加速刷新过程(这称为部分刷新,我们将在后面讨论)。

fillScreen:用一种颜色填充屏幕,在本例中为白色(GxEPD_WHITE),清除之前的任何内容。您可以使用任何支持的颜色:

黑色(GxEPD_BLACK)

白色(GxEPD_WHITE)

以90度的倍数定义屏幕的方向。

setTextColor:设置文本颜色。

setTextSize:设置文本的大小。

最后,有几个块使用不同的字体显示文本:setFont指定要使用的字体或字体,setCursor将光标定位在所需的位置(原点(0,0)位于左上角),print将文本输出到屏幕上。

实际上,上面提到的方法并不直接在屏幕上显示任何内容。相反,所有指令都作用于缓冲区或内存区域,然后必须将其传输到屏幕上以使其可见。实现这一点的一种方法是使用display方法,稍后我们将探讨另一种方法。

将缓冲区的内容传输到屏幕的过程也称为刷新。

下面是代码的实际效果:

图7所示。使用不同字体的文本

图形

GxEPD2库还包括绘制图形元素(如点和线)以及几何形状(如矩形、圆形和三角形)(空心和填充)的方法。

在下面的示例中,我使用其中一些方法来显示条形图。代码如下:

如您所见,第一部分与“Hello World!”示例非常相似。这里,我们还包括必要的库,定义引脚,并创建显示对象。设置函数开始时显示的初始化也非常相似。

接下来,我们有绘制条形图的部分。为此,我反复使用两种方法来绘制直线和矩形:

drawLine(x0, y0, x1, y1, color):以指定颜色绘制从点(x0, y0)到点(x1, y1)的直线。

drawRect(x, y, w, h, color):以指定的颜色绘制一个从左上角(x, y)开始的矩形,宽度为w像素,高度为h像素。注意,矩形的原点是它的左上角,它是“向下”绘制的。

fillRect(x, y, w, h, color):类似于drawRect,但是矩形被指定的颜色填充。

图8所示。图形使用示例

具体来说,这个例子创建了一个500像素宽、200像素高的画布,然后使用水平线和垂直线对其进行细分。左侧的标签表示不同的值。由于画布水平分为50个部分,因此定义了一个包含50个随机值的数组,并将其显示为黑色条。

图片

如果上面提到的图形元素还不够,而您想要显示位图图像,不要担心——gxepd2也支持这一点。此外,图像不需要占据整个屏幕;您可以显示任何大小的位图,并将它们放置在任何位置。

该过程与我在前一篇文章中解释的过程相同:首先,获取图像(必须是单色的),并使用image2lcd程序将其转换为头文件(.h)。然后,使用#include指令将该文件包含在代码中,并使用drawBitmap方法将其放置在屏幕上。

drawBitmap的语法如下:

drawBitmap (x, y, bitmap, w, h, color);

地点:

x, y:位图的起始坐标(左上角)。

bitmap:图像的标识符(在.h文件中定义)。

w, h:位图的宽度和高度,以像素为单位。

颜色:“前景”颜色,以区别于屏幕背景。

您需要采取的唯一预防措施是在将图像转换为image2lcd之前对其进行水平镜像。

图9所示。反映图像

在下面的示例中,我将向您展示如何加载位图(在本例中为比特币符号)并将其显示在屏幕中央。

在这个例子中,width()和height()方法的使用值得注意。这些方法返回屏幕尺寸,使计算原点坐标(bitmapX和bitmapY)以正确居中位图变得容易。

运行上述代码后,显示如下图像:

图10所示。位图使用实例

局部刷新

在前面的示例中,我们使用了不同的方法来显示文本、图形和图像。在每种情况下,使用display()方法更新整个屏幕,该方法在屏幕上呈现操作的结果。此外,在所有示例中,我们都使用setFullWindow()初始化屏幕。这确保了display()重新绘制整个屏幕,执行所谓的完全刷新。

更新整个屏幕是一个相对缓慢的过程。虽然在程序开始时执行一次通常不会出现问题,但是当需要频繁更新值时,例如使用每两秒钟刷新一次的温度传感器时,这就变得不方便了。在这种情况下,延迟是不可接受的。

幸运的是,5.79″CrowPanel支持一个称为部分刷新的功能,它允许只更新屏幕的特定部分,而无需重新绘制所有像素。这不仅明显更快,而且还消除了与完全刷新相关的闪烁。由于部分刷新,可以在更新更快的ePaper上显示动态值。

并非所有的ePaper显示器都支持部分刷新。它在单色电子纸显示器上比在多色电子纸显示器上更常见。

下面的视频演示了两种刷新技术之间的比较。它显示计数器的值,从1到10,首先使用完全刷新,然后使用部分刷新。差异是显著的。

在本例中,我使用GxEPD中所谓的分页模式对方法进行了略微不同的结构。

分页模式是为RAM有限的微控制器(如Arduino UNO)设计的。不是在内存中存储整个屏幕的缓冲区,而是只存储屏幕的一小部分(例如,一半)。然后分两个步骤执行刷新:首先,在缓冲区中生成一半屏幕的内容并传输,然后重用相同的缓冲区来准备和传输另一半屏幕。虽然这种方法比一次刷新整个屏幕要慢,但它显著减少了内存使用。

要使用分页模式,首先需要指定缓冲区仅代表全屏的一小部分。这是在创建显示对象时完成的。例如,要使用一半的屏幕,您可以将缓冲区大小设置为HEIGHT/2。

接下来,访问屏幕的方法必须遵循这个结构:

使用firstPage方法启动分页周期。

将修改屏幕的方法包含在do..while循环中。

在nextPage方法返回true时重复循环,这表明仍有数据有待传输到屏幕。

回到这个例子,虽然我将定义缓冲区以覆盖整个屏幕(因为这个面板上的ESP32-S3有足够的内存),但我将以分页模式的风格组织代码:

正如您所看到的,关键的区别在于,在第一部分中,屏幕是用setFullWindow()初始化的,而随后是用setPartialWindow()完成的。

setPartialWindow()方法在屏幕中定义了一个“窗口”,它将被修改和更新,而屏幕的其余部分保持不变。

这个方法的语法是:

setPartialWindow (x, y, w, h);

地点:

x, y:部分刷新窗口的起始坐标。

w, h:窗口的宽度和高度。

界面按钮

所有CrowPanel模型都在侧面包含一组按钮以支持用户交互。它们由两个按钮和一个连接到ESP32-S3的旋转开关组成,ESP32-S3的状态可以直接从程序中读取。

图11所示。用户按钮

连接引脚如图所示:

图12所示。按钮连接

这意味着MENU连接到GPIO2, EXIT连接到GPIO1,旋转开关为GPIO6,为GPIO4,按下旋转开关激活GPIO5。每个输入都有一个PULL_UP电阻,所以当它们被拉低时被激活。

把它们放在一起

我们终于到达终点了!如果你已经走到这一步,恭喜你的耐心!

让我们把我们所学到的一切应用到实际应用中:比特币价格监视器。该监视器将从CoinGecko(一个具有非常简单API的网站)获取比特币的实时价格。该API允许我们在不需要注册或API密钥的情况下发出GET请求。

我们将每30秒发出一个请求(重要的是不要过于频繁地发出请求,因为站点可能会返回0的值),检索值将使用部分刷新显示在面板上。此外,我们将实现按钮控制:按MENU将显示美元(USD)的价格,按EXIT将显示欧元(EUR)的价格。

请求使用的端点如下:

并以JSON格式返回值:

{“比特币”:{“美元”:101971年,“欧元”:98173}}

为了提取不同的字段(通常称为“解析JSON”),我们将使用ArduinoJson库。

下面是比特币监视器的运行情况。

存储库

这个项目中使用的代码和图像可以在这个存储库中找到。其余的示例可以在另一个存储库中获得。

结论

在本文中,我们通过使用GxEPD2库探索了5.79英寸CrowPanel的高级功能,GxEPD2库是一种广泛采用的用于控制ePaper显示的通用工具。从最初的设置到集成文本渲染、图形和部分刷新等功能,我们成功构建了一个融合了设计和功能的比特币监视器。

在整个过程中,我们学会了:

Arduino IDE环境中安装和配置基本库,如GxEPD2和Adafruit_GFX。

使用Elecrow提供的原理图定义ePaper面板的物理连接。

使用先进的技术,如部分刷新,以优化电子纸显示性能,减少刷新时间,消除不必要的闪烁。

合并物理控件,如CrowPanel按钮,以提供交互式用户界面。

通过利用CoinGecko API来获取美元和欧元的实时价格更新,实现实时比特币监控。

构建此监视器不仅展示了CrowPanel和GxEPD2库的功能,而且还提供了开发微控制器动态应用程序的实用方法,特别是在数据可视化方面。

虽然这个例子集中在比特币监视器上,但所提供的工具和概念适用于使用ePaper显示器的广泛项目,从环境监视器到信息面板。使用GitHub存储库中的示例,您可以自定义和扩展此项目以满足您的特定需求。

本文编译自hackster.io

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

9月2日消息,不造车的华为或将催生出更大的独角兽公司,随着阿维塔和赛力斯的入局,华为引望愈发显得引人瞩目。

关键字: 阿维塔 塞力斯 华为

加利福尼亚州圣克拉拉县2024年8月30日 /美通社/ -- 数字化转型技术解决方案公司Trianz今天宣布,该公司与Amazon Web Services (AWS)签订了...

关键字: AWS AN BSP 数字化

伦敦2024年8月29日 /美通社/ -- 英国汽车技术公司SODA.Auto推出其旗舰产品SODA V,这是全球首款涵盖汽车工程师从创意到认证的所有需求的工具,可用于创建软件定义汽车。 SODA V工具的开发耗时1.5...

关键字: 汽车 人工智能 智能驱动 BSP

北京2024年8月28日 /美通社/ -- 越来越多用户希望企业业务能7×24不间断运行,同时企业却面临越来越多业务中断的风险,如企业系统复杂性的增加,频繁的功能更新和发布等。如何确保业务连续性,提升韧性,成...

关键字: 亚马逊 解密 控制平面 BSP

8月30日消息,据媒体报道,腾讯和网易近期正在缩减他们对日本游戏市场的投资。

关键字: 腾讯 编码器 CPU

8月28日消息,今天上午,2024中国国际大数据产业博览会开幕式在贵阳举行,华为董事、质量流程IT总裁陶景文发表了演讲。

关键字: 华为 12nm EDA 半导体

8月28日消息,在2024中国国际大数据产业博览会上,华为常务董事、华为云CEO张平安发表演讲称,数字世界的话语权最终是由生态的繁荣决定的。

关键字: 华为 12nm 手机 卫星通信

要点: 有效应对环境变化,经营业绩稳中有升 落实提质增效举措,毛利润率延续升势 战略布局成效显著,战新业务引领增长 以科技创新为引领,提升企业核心竞争力 坚持高质量发展策略,塑强核心竞争优势...

关键字: 通信 BSP 电信运营商 数字经济

北京2024年8月27日 /美通社/ -- 8月21日,由中央广播电视总台与中国电影电视技术学会联合牵头组建的NVI技术创新联盟在BIRTV2024超高清全产业链发展研讨会上宣布正式成立。 活动现场 NVI技术创新联...

关键字: VI 传输协议 音频 BSP

北京2024年8月27日 /美通社/ -- 在8月23日举办的2024年长三角生态绿色一体化发展示范区联合招商会上,软通动力信息技术(集团)股份有限公司(以下简称"软通动力")与长三角投资(上海)有限...

关键字: BSP 信息技术
关闭