步骤1:为什么添加显示器?
您可以完美运行各种物联网项目,无需任何显示。但是,某些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
发布评论请先 登录
相关推荐
评论