0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何为ESP32项目选择彩色显示

454398 来源:wv 2019-09-25 10:27 次阅读

步骤1:为什么添加显示器?

如何为ESP32项目选择彩色显示

您可以完美运行各种物联网项目,无需任何显示。但是,某些IoT项目不仅可以单向馈送数据(从IoT到服务器),还可以从服务器或Internet收集实时信息以进行显示。

我以前的教学方法,ESP32 Photo Clock是例如,它从Internet下载当前的分钟照片,将JPEG照片解码并显示。

服务器或Internet中有各种实时信息,例如除了室温,服务器CPU使用率,天气预报,新闻,股票价格,提醒下载文件已完成之外,您的YouTube频道视图:》

步骤2:确定,然后为什么要进行彩色显示?

许多Arduino项目都使用单色显示,原因之一是MCU的资源有限。每个RGB颜色通道的宽度为320像素,高度为240像素,颜色为8位,意味着每个全屏图片为230 KB。但是普通的Arduino(ATmega328)仅具有32 KB的闪存,从SD卡读取数据并将其绘制到彩色显示屏上非常耗时(超过一秒钟)。

ESP32改变了游戏规则。它具有更快的处理能力(16 MHz与240 MHz双核),更多的RAM(2 KB对超过200 KB)和更多的闪存(32 KB对4 MB),因此能够利用更多的色彩和更高的分辨率用于显示的图像。同时,它能够执行一些RAM占用很大的过程,例如JPEG解码,这对于显示Internet收集的信息是非常重要的功能。

步骤3:串行外围接口

彩色显示器具有多种类型的接口:串行外围设备接口(SPI),6位,8位,16位,18位以及NeoPixel!

SPI主导了业余电子市场,这很可能是因为连接所需的电线更少。我的抽屉中的大多数显示器也只有SPI引脚,因此此说明主要针对SPI显示器。

注意:

NeoPixel矩阵是一种非常特殊的彩色显示器。如果您对NeoPixel矩阵显示感兴趣,请参考以下使用它的说明:

https://www.instructables.com/id/Display-Colorful -。..

HTTPS://www.instructables.com/id/ATtiny13A-NeoPixe 。..

https://www.instructables.com/id/IoT-LED-Matrix/

HTTPS://www.instructables.com/id/IoT-LED-Cheering -。..

https://www.instructables.com/id/IoT-LED-Sign/

步骤4:硬件和软件

为ESP32选择彩色显示屏时,要考虑两个部分。

硬件

针对业余电子产品,有各种彩色显示屏:LCD,IPS LCD,具有不同分辨率和不同驱动芯片OLED。 LCD可以具有更高的图像密度,但是OLED可以具有更好的可视角度,IPS LCD可以同时具有两者。 OLED对于每个点亮的像素都具有更高的功率效率,但可能存在老化问题。彩色OLED的工作电压为14 V,这意味着您需要专用的升压电路,但是如果您仅使用分线板就不会有问题。 LCD在大多数情况下都可以直接在3.3 V电压下工作,并且工作电压与ESP32相同,因此您可以考虑不使用分线板制作更纤薄的产品

软件

软件支持另一方面也会影响您的选择。您可以使用Arduino IDE开发ESP32程序,也可以直接使用ESP-IDF。但是,由于ESP-IDF没有太多的显示库并且没有太多的显示硬件受支持,所以我将只关注Arduino显示库。

对于初学者来说,我认为购买adafruit(或类似供应商)硬件并且使用其Arduino库可以提供良好的无缝体验(尽管我没有预算尝试所有操作)。 TFT_eSPI库具有更好的性能,但配置需要在库文件夹中进行更改。 Ucglib和UTFT-ESP运行有点慢,但它支持许多硬件,并且是一个流行的库,您可以找到许多Arduino项目使用它。

让我们从抽屉中的彩色显示屏开始进行比较。

步骤5:LCD ST7735

ST7735是非常受欢迎的LCD分辨率为128x128和128x160的驱动程序模型。这可能是由于其受欢迎程度引起的,有许多制造商生产兼容产品,但它们并不完全兼容。初始代码有一些变化,颜色顺序可以是RGB或BGR,y坐标范围也有一些像素变化。一些库通过红色,绿色或黑色标签对其进行区分,但标签颜色并不总是正确的。最坏的情况是一一尝试使用标签选项,直到看到好的结果为止。上面的第三张图片是使用错误标签选项的示例,您可以在顶部找到3个像素的高度噪声条。

步骤6:LCD ST7735奇数大小

ST7735在128x160的分辨率范围内还具有其他奇数大小的彩色显示,例如上面的图片是0.96英寸128x64彩色显示器。

步骤7:IPS LCD ST7735

由于可穿戴设备的普及,今年我可以在市场上找到更多的小尺寸IPS LCD。上图是使用ST7735驱动芯片的0.96英寸80x160 IPS彩色LCD。如您在第三张图片中所见,您可以将其视为代码中的128x160彩色显示器,但实际上仅显示中间部分。第四张图片是没有分线板的显示器,它很薄,很小,非常适合可穿戴项目!

注意:

所有IPS LCD都有一个共同的特征,即显示的颜色被倒置,大多数库都可以通过打开invert选项简单地对其进行修复。

步骤8:OLED SSD1331

我认为这是市场上可以找到的最低分辨率彩色显示器,它是0.96英寸96x64彩色OLED。

OLED有很大的优势是,像素只有在点亮时才会消耗功率;另一方面,即使在显示黑屏的情况下,LCD背光也会始终消耗全部功率,因此OLED可以帮助为电池供电的项目节省一些电量。/p》

我尝试在以前的教学指南中使用它:

https://www.instructables.com/id/Arduino-MINTIA-Ga 。..

步骤9:OLED SSD1351

这是1.5英寸128 x 128色OLED,外形非常适合智能手表般的佩戴能干的项目。选择此项的最大障碍应该是价格约为普通LCD的4倍。

步骤10:OLED SEPS525

这是我在业余电子市场上可以找到的最高分辨率的彩色OLED,它是1.69“ 160x128彩色OLED。由于大尺寸的分线板,我不知道

第11步:LCD ILI9225

它是2.2英寸176x220彩色液晶显示器。使用该芯片和分辨率的项目相对较少。这可能是由于其芯片家族兄弟ILI9341(尺寸大了0.2英寸,但分辨率接近两倍)的成功所致。

步骤12:LCD ILI9341

我认为ILI9341是业余电子市场上最受欢迎的LCD驱动器芯片,大多数情况下分辨率为240x320,屏幕尺寸从2.0开始“至3.2”。一些突破性板还内置触摸屏功能。

您可以在GitHub上找到许多使用此功能的项目。如果您打算购买第一块LCD,那么ILI9341突破性板是一个不错的选择选择。

在市场上找到没有分线板的纯LCD也很容易。

以下是我正在使用ILI9341的一些项目:

https://www.instructables.com/id/Connect-LCD-to-Ra.。.

https://www.instructables.com/id/ESP8266-WiFi-Anal.。.

的https://www.instructables.com/id/Breadboard-RetroP 。..

HTTPS://www.instructables.com/id/Portable-WiFi-Ana 。..

https://www.instructables.com/id/ESP32-Photo-Clock.。.

HTTPS://www.instructables.com/id/Battery-Powered-E 。..

HTTPS://www.instructables.com/id/Kids-Photo-Album -。..

步骤13:IPS LCD ILI9341

这是IPS版本使用ILI9341驱动器芯片的2.4英寸LCD。

显示效果很好,但是供应商没有提供分线板选项,因此您需要自己接线。

步骤14:IPS LCD ST7789

ST7789也是ESP32社区中的通用驱动芯片。原因之一是ESP32官方开发套件正在使用它。与ILI9341一样,ST7789也可以驱动240x320分辨率。

我手头没有240x320 ST7789显示屏,上面的图片是1.3英寸240x240 IPS彩色LCD。

这也是第15步:IPS LCD与普通LCD一样,它可以直接在3.3 V电压下操作,因此非常适合制作纤薄的可穿戴设备。

HX8352C

这是一个3.0英寸240x400 IPS彩色LCD。这是我什至没有看到的业余电子市场中唯一的宽屏LCD。

步骤16:LCD ILI9486

这是3.5英寸320x480彩色LCD。此分辨率是普通MCU的负担,使用Ucglib需要一秒钟以上的时间才能充满全屏。

步骤17:软件比较

有许多显示库可以支持各种硬件。我选择了4个最受欢迎的Arduino库进行比较:

Adafruit GFX家族

TFT_eSPI

UTFT-ESP

Ucglib

上图是每个库的硬件支持列表。

显示速度是我们考虑选择哪个库的最重要的事情之一。为此,我选择了TFT_eSPI PDQ测试,并做出了一些努力来重写可以在4个库中运行的PDQ测试。 。所有测试将使用相同的2.8“ ILI9341 LCD进行。

为简化比较过程,所有显示器均使用相同的连接模式n。

这是我的连接摘要:

ESP32 Display

Pin 5 -》 CS (Some display not breakout this pin, simply skip it)

Pin 16 -》 DC

Pin 17 -》 Reset

Pin 18 (VSPI CLK) -》 CLK

Pin 23 (VSPI MOSI) -》 MOSI (Some display call it Din)

您可以在Github上找到代码:

https://github.com/moononournation/Arduino_graphic 。..

更新

正如我发现TFT_eSPI是此指令中最有潜力的ESP32显示库一样,我付出了一些努力来添加对我所有显示的支持。手。上图中新添加的显示支持用红色标记为字母M,这是我的增强版本:

https://github.com/moononournation/TFT_eSPI

步骤18:Adafruit GFX系列

Adafruit在业余电子市场上出售各种显示模块,并且它们在软件水平上也有很好的支持。他们的显示库全部建立在称为Adafruit_GFX的父类上,因此我将其称为Adafruit GFX系列。该库通常支持大多数Arduino硬件(也包括ESP32)。

在Arduino库管理器中,只需搜索“ adafruit display” ,即可看到所有家族成员。如果要安装,请说ILI9341,只需选择“ Adafruit ILI9341”,然后单击“安装”。记住还要安装其依赖库“ Adafruit GFX库” 。

步骤19:TFT-eSPI

此库方法签名与Adafruit GFX非常相似,但它是为ESP8266或ESP32量身定制的。我认为源代码针对ESP32进行了优化,因此PDQ结果比其他库要快得多。

您可以通过搜索“ TFT-eSPI” 将其安装在Arduino Library Manager中。然后单击安装。

注意:使用此库最困难的部分是必须先配置此库,然后才能使用它。配置文件位于库文件夹中,它应该是您自己的文档文件夹下的“ Arduino/libraries/TFT_eSPI/User_setup.h” 。它有很多注释可帮助您完成此操作,请按照注释逐步进行以完成配置。这是我的ILI9341的User_setup.h:

#define ILI9341_DRIVER

#define TFT_CS 5 // Chip select control pin D8

#define TFT_DC 16 // Data Command control pin

#define TFT_RST 17 // Reset pin (could connect to NodeMCU RST, see next line)

#define LOAD_GLCD // Font 1. Original Adafruit 8 pixel font needs ~1820 bytes in FLASH

#define LOAD_FONT2 // Font 2. Small 16 pixel high font, needs ~3534 bytes in FLASH, 96 characters

#define LOAD_FONT4 // Font 4. Medium 26 pixel high font, needs ~5848 bytes in FLASH, 96 characters

#define LOAD_FONT6 // Font 6. Large 48 pixel font, needs ~2666 bytes in FLASH, only characters 1234567890:-.apm

#define LOAD_FONT7 // Font 7. 7 segment 48 pixel font, needs ~2438 bytes in FLASH, only characters 1234567890:-。

#define LOAD_FONT8 // Font 8. Large 75 pixel font needs ~3256 bytes in FLASH, only characters 1234567890:-。

//#define LOAD_FONT8N // Font 8. Alternative to Font 8 above, slightly narrower, so 3 digits fit a 160 pixel TFT

#define LOAD_GFXFF // FreeFonts. Include access to the 48 Adafruit_GFX free fonts FF1 to FF48 and custom fonts

#define SMOOTH_FONT

#define SPI_FREQUENCY 40000000 // Maximum to use SPIFFS

步骤20:Ucglib

您可以通过搜索“ Ucglib” 然后单击安装在Arduino库管理器中进行安装。

步骤21:UTFT-ESP

UTFT-ESP基于Rinky-Dink Electronics UTFT库,并添加了ESP8266和ESP32支持。

您可以通过在Github上下载它进行安装:

https://github.com/gnulabis/UTFT-ESP

,然后将“ UTFT”文件夹复制到Arduino库文件夹。/p》

参考号:http://www.rinkydinkelectronics.com/library.php?id 。..

步骤22:微调SPI频率

ESP32 + ILI9341可以SPI速度40 MHz运行,它需要在库文件夹中进行一些代码更改。上面的图片是微调的结果。以下是代码更改摘要:

Adafruit_ILI9341

该库已为ESP32板定义了SPI_DEFAULT_FREQ为40000000。您还可以在初始化时更改频率:

tft.begin(80000000);

TFT_eSPI

User_Setup.h

// #define SPI_FREQUENCY 27000000

// Actually sets it to 26.67MHz = 80/3

#define SPI_FREQUENCY 40000000 // Maximum to use SPIFFS

Ucglib

的src/CLIB/ucg_dev_ic_ili9341.c

UTFT-ESP

硬件/ESP/HW_ESP.h

步骤23:比较舍入

硬件

ST7735和ILI9341是最受欢迎的显示器,对于初学者来说,这2是更好的选择。您可能会注意到LCD有一个很大的缺点,可视角度大,在可视角度之外失去了一些颜色,屏幕变得不可读。如果您有足够的预算,则OLED或IPS LCD的可视角度要好得多。

软件

速度

TFT_eSPI的性能最好。

受欢迎程度

在大多数情况下,我们通过在网络上搜索示例来研究如何使用代码库。我已经尝试在Github中搜索四个库关键字,Adafruit最受欢迎,而UTFT则排名第二。

难度

只有Adafruit GFX系列可以在用户中完全配置代码级别,其他3个库需要在库文件夹中进行一些配置。而且Adafruit的门户网站也非常好,有很多详细的帖子可以教您如何使用其产品。

Round Up

ILI9341对于初学者来说应该是最有价值的展示。 Adafruit GFX库对于初学者来说应该是最容易使用的,并且由于TFT_eSPI具有非常相似的方法签名,因此稍后切换到更快的库非常容易。

步骤24:可选阅读:连接LCD而无需插线板

OLED需要14 V的电压才能点亮像素,因此不容易断开分支板的耦合。另一方面,LCD(也包括IPS LCD)通常在3.3 V电压下工作,与ESP32相同。在大多数情况下,LCD和ESP32之间仅需要LED控制电路,即晶体管和少量电阻

在决定不使用分线板之前,首先阅读数据表非常重要。引脚布局,引脚间距大小,示例电路连接和最大额定值都可以在数据手册中找到。最大电压尤为重要,您应遵循额定值,否则将炸毁LCD。该芯片可以在3.3 V的电压下工作,但LED可以在2.8-3.0 V的电压下工作,因此它需要中间的一些电子器件,大多数数据手册都带有采样电路。您可能会要求卖方将数据表的软拷贝发送给您,或者只是通过型号将其发送给Google。

我的特别提示:我喜欢焊接引脚间距与LCD相同的FPC电缆帮助与MCU的连接。我在以下这些指导中使用了此技术:

https://www.instructables.com/id/Connect-LCD-to-Ra 。..

https://www .instructables.com/id/Portable-WiFi-Ana 。..

步骤25:可选阅读:颜色深度

如果您通读彩色显示器的数据表,可能会发现大多数彩色显示器都可以支持18位色深(每个RGB通道为6位)。 18位色深可以提供比16位色深更好的图像质量(红色和蓝色通道为5位,绿色通道为6位)。但是,只有Ucglib实际上以18位色深(262,144色)运行,其他3个库都以16位色深(65,536色)运行。这是因为18位色深实际上要求每个像素传输3个字节(24位)的数据,这意味着传输和存储在内存中所需的数据量要多50%。这是Ucglib运行速度较慢,但图像质量更好的原因之一。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 显示器
    +关注

    关注

    21

    文章

    4737

    浏览量

    137861
  • ESP32
    +关注

    关注

    13

    文章

    896

    浏览量

    15810
收藏 人收藏

    评论

    相关推荐

    学习单片机ESP32与STM32,该如何选择

    从行业应用来说,STM32更加广泛,不管是工业控制,汽车电子,还是消费电子。 如果项目需要用到WiFi+蓝牙功能,那用ESP32会很合适。
    发表于 03-08 15:28 345次阅读
    学习单片机<b class='flag-5'>ESP32</b>与STM32,该如何<b class='flag-5'>选择</b>?

    【开源项目】Arduino ESP32 彩色电子气象站

    ,并结合 ESP32 微处理器。在我过去六年使用过的所有电子纸板中,这是最好的。 在显示屏上,我们显示温度、湿度、气压和天气预报。我们从两个传感器获取温度、湿度和气压,并从互联网上获取天气预报。 我们
    发表于 01-16 14:01

    ESP32开源项目

    电子发烧友网站提供《ESP32开源项目.zip》资料免费下载
    发表于 07-13 10:47 3次下载
    <b class='flag-5'>ESP32</b>开源<b class='flag-5'>项目</b>

    使用ESP32 NodeMCU网络和Blynk App 2022的物联网项目

    电子发烧友网站提供《使用ESP32 NodeMCU网络和Blynk App 2022的物联网项目.zip》资料免费下载
    发表于 06-26 09:44 0次下载
    使用<b class='flag-5'>ESP32</b> NodeMCU网络和Blynk App 2022的物联网<b class='flag-5'>项目</b>

    如何使用Visuino在M5StickC ESP32显示文本

    电子发烧友网站提供《如何使用Visuino在M5StickC ESP32显示文本.zip》资料免费下载
    发表于 06-16 15:22 0次下载
    如何使用Visuino在M5StickC <b class='flag-5'>ESP32</b>上<b class='flag-5'>显示</b>文本

    ESP32ESP32通过Internet进行通信

    电子发烧友网站提供《ESP32ESP32通过Internet进行通信.zip》资料免费下载
    发表于 06-15 09:58 2次下载
    <b class='flag-5'>ESP32</b>到<b class='flag-5'>ESP32</b>通过Internet进行通信

    ESP32 UWB室内定位测试开源项目

    电子发烧友网站提供《ESP32 UWB室内定位测试开源项目.zip》资料免费下载
    发表于 06-14 10:56 9次下载
    <b class='flag-5'>ESP32</b> UWB室内定位测试开源<b class='flag-5'>项目</b>

    基于MicroPython的ESP32开发板介绍

    前段时间,做项目又剩余了 30 余片的 ESP32,感觉也没什么用了,放那里闲置很是可惜。
    的头像 发表于 06-13 17:05 1779次阅读
    基于MicroPython的<b class='flag-5'>ESP32</b>开发板介绍

    [esp32教程] 5、UART使用

    基于Ubuntu下,利用esp-idf进行esp32开发的教程
    的头像 发表于 06-13 09:04 4370次阅读
    [<b class='flag-5'>esp32</b>教程] 5、UART使用

    ESP32C2 TCA6416A IO扩展驱动7段显示

    电子发烧友网站提供《ESP32C2 TCA6416A IO扩展驱动7段显示.zip》资料免费下载
    发表于 06-08 11:19 0次下载
    <b class='flag-5'>ESP32</b>C2 TCA6416A IO扩展驱动7段<b class='flag-5'>显示</b>

    [esp32教程] 4、LEDC使用

    基于Ubuntu下,利用esp-idf进行esp32开发的教程
    的头像 发表于 06-03 09:39 3130次阅读
    [<b class='flag-5'>esp32</b>教程] 4、LEDC使用

    基于ESP8266项目如何选择电池?

    以下是基于 ESP8266 项目的一些电池选择
    发表于 05-11 07:29

    [esp32教程]2、按键中断

    基于Ubuntu,利用esp-idf进行esp32的教学
    的头像 发表于 05-05 09:04 2206次阅读
    [<b class='flag-5'>esp32</b>教程]2、按键中断

    [esp32教程]1、点灯之术

    基于Ubuntu下,利用esp-idf进行esp32开发的教程
    的头像 发表于 04-30 18:11 2432次阅读
    [<b class='flag-5'>esp32</b>教程]1、点灯之术

    何为ESP32构建NodeMCU?

    ESP32 的 NodeMCU 进展顺利!新的贡献者帮助将可用模块的数量增加到约 30 个。 今天,构建您自己的固件也变得更加简单 - 即使您不是 Linux 用户。今天早上我发布了一个支持
    发表于 04-28 07:56