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

    文章

    4934

    浏览量

    139765
  • ESP32
    +关注

    关注

    17

    文章

    952

    浏览量

    17017
收藏 人收藏

    评论

    相关推荐

    ESP32 微控制器系列指南

    。 对于工程师或制造商来说,熟悉各种 ESP32 硬件平台和软件包可能是一艰巨的任务。本指南将提供与 ESP32 微控制器生态系统相关的技术规格、开
    的头像 发表于 10-02 18:21 1682次阅读
    <b class='flag-5'>ESP32</b> 微控制器系列指南

    esp8266和esp32区别是什么

    以下是关于ESP8266和ESP32的主要区别: 处理器和架构 : ESP8266 :使用一个Tensilica L106 80MHz的处理器,属于Xtensa架构。 ESP32 :使
    的头像 发表于 08-19 18:16 3937次阅读

    esp32用什么软件编程

    ESP32是一款由乐鑫(Espressif)推出的低功耗、高性能的Wi-Fi和蓝牙双模微控制器,广泛应用于物联网、智能家居、智能穿戴等领域。要对ESP32进行编程,需要选择合适的编程软件和开发环境
    的头像 发表于 08-19 17:24 2530次阅读

    STM32项目分享:智能家居(机智云)系统

    STM32项目分享:智能家居(机智云)系统
    的头像 发表于 07-28 08:10 1425次阅读
    STM32<b class='flag-5'>项目</b>分享:智能家居(机智云)系统

    ESP32-WROOM-32E、ESP32-WROOM-32D、ESP32-WROOM-32U 有什么区别?ESP32-WROOM-32 后缀字母代表的意思是?

    相信很多人心里都有这样的疑问,今天就教大家怎么区分它们。 32D和32U是同一个芯片ESP32-D0WD的模组,主要区别的天线模式,分别是板载和IPEX外接天线。 32E是用的升级版的芯片
    的头像 发表于 07-17 10:09 7129次阅读
    <b class='flag-5'>ESP32</b>-WROOM-32E、<b class='flag-5'>ESP32</b>-WROOM-32D、<b class='flag-5'>ESP32</b>-WROOM-32U  有什么区别?<b class='flag-5'>ESP32</b>-WROOM-32 后缀字母代表的意思是?

    ESP32能取代STM32吗?哪个更好?

    STM32,以及在何种情况下选择哪个更好。对比一下ESP32和STM32两种单片机ESP32ESP32是由乐鑫公司(EspressifSystems)推出的一款集
    的头像 发表于 07-06 08:04 7459次阅读
    <b class='flag-5'>ESP32</b>能取代STM32吗?哪个更好?

    Ardunio IDE如何选择ESP32板类型?

    ESP32 Ardunio”中有很多,我应该选择哪一个呢? 猜测是不是应该是“ESP32 Wrover Module” 谢谢。
    发表于 06-24 09:06

    何为ESP32实现软重启?

    ;TESTTEST.ino': Exit with code=1 命令没作用Arduino: Rebuild IntelliSense Configuration 如何为 ESP32 实现软重启?
    发表于 06-18 06:38

    BLE-Mesh的ESP32C3项目运行时报错是什么原因导致的?

    将基于ESP32的BLE-Mesh工程移植到ESP32C3上,ESP32C3运行时报以下错误: [0;31mE (22190) BT_HCI: CC evt: op=0x2008, status
    发表于 06-12 06:46

    esp32c3项目采用wss_server例程,把wifi断开的话esp32c3会重启,为什么?

    esp32c3项目采用wss_server 例程,运行后连接WiFi正常,但是如果之后把wifi断开的话,esp32c3会重启,监视器显示“assert failed: tlsf_fr
    发表于 06-06 07:29

    分享6个实用的ESP32-S3物联网项目:从智能设备到安全创新

    开发人员友好特性和超低功耗,使其在可穿戴设备到智能家居等领域备受推崇。本篇文章分享了6个ESP32-S3 DIY项目,例如智能手表、植物生长监测系统和使用行空板和FireBeetle 2 ESP32S3构建
    的头像 发表于 05-17 10:15 693次阅读

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

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

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

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

    ESP32-PICO系列技术规格书

    ESP32-PICO 系列是基于 ESP32 芯片 的系统级封装 (SiP) 产品。ESP32-PICO 系列产品包括 ESP32-PICO-D4、
    发表于 12-12 16:56 0次下载
    <b class='flag-5'>ESP32</b>-PICO系列技术规格书

    用了ESP32后,我的Arduino都积灰了,专为零基础新手准备的ESP32入门指南,为什么我不再使用Arduino

    是热衷于创客教学的老师、渴望参加智能设计比赛的学生,还是任何对技术充满好奇心的爱好者,ESP32都是一个绝佳的选择。其低成本、学习门槛的开发板,为你打开了通往智能设计领域的大门。"   ESP32
    的头像 发表于 11-20 11:20 1.7w次阅读
    用了<b class='flag-5'>ESP32</b>后,我的Arduino都积灰了,专为零基础新手准备的<b class='flag-5'>ESP32</b>入门指南,为什么我不再使用Arduino