步骤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运行速度较慢,但图像质量更好的原因之一。
架构设计之 CAP 定理
悠易互通CDP荣获【2021科睿创新奖年度影响力平台】
首都网络安全日在北京展览馆拉开帷幕 网络安全同担网络生活共享
人工智能如何造就抗疫的神器
oppor11s和iphone7哪个好? 配置参数对比分析
如何为ESP32项目选择彩色显示
发展新能源和新能源汽车是大势所趋 氢燃料电池发展面临多重机遇和挑战
霍尔接近开关计数器
关于导热塑料的6大性能之间的比较
FreeRTOS信号量的使用与实例
热电偶是温度传感器吗 温度传感器热电阻和热电偶的区别
曲道奎:汽车销量下滑影响工业机器人发展,未来机器人替代率将达30%
骏成科技夫妻两人控股超过95%,上市前解除对赌协议
华为Mate10什么时候上市?华为Mate10最新消息:全屏幕,麒麟970,拍照提升
苹果的远程电容接口专利曝光,一种用于iPad键盘的新设计
对话Intel工程师|DDR6与USB4.0 Gen4展望
wifi6是5gwifi吗 5gwifi和wifi6区别
突发!50亿美元芯片订单被取消?!
Harwin公司针对2mm间距连接器的母端电源触点连接器
英飞特DALI驱动电源满足不同时段照明需求