我无法在我的st7789v 2英寸waveshare显示器中渲染任何有意义的内容。
我已连接 pico(不是无线版本)和屏幕,如本页所示。果然,当我运行该页面中的代码时,它可以正常工作(丢弃这是一个接线问题)。
但是,当我尝试使用 ESPHome 时,我根本没有渲染任何内容(黑屏)。我认为这可能是驱动程序版本不匹配的问题,因此我开始基于 st7789v 平台编写自己的组件。我很快意识到 ESPHome 中的编码应该没问题,因为它遵循屏幕的规范。
然后我尝试渲染任何内容,因此在屏幕设置功能期间,我添加了以下行:
this->draw_filled_rect_(0, 0, 100, 100, 0x00FF);
这确实会在屏幕上呈现一个蓝色方块(忽略这是 GPIO 或 SPI 问题)。
由于它忽略了 lambda 内部的任何内容,我最后一次尝试是在 draw_absolute_pixel_internal 函数的末尾添加以下行:
this->write_display_data();
这使得屏幕呈现出一棵色彩缤纷的圣诞树(就像旧模拟电视中旧静态信号的彩色版本)。
由此,我只能得出结论,要么内部缓冲区没有正确填充,要么 lambda 根本不起作用,要么两者兼而有之。
我还尝试了 ESPHome 问题存储库中提出的每一个似乎模糊相关的解决方案以及强制的互联网搜索。都没有成功。
除此之外,我还尝试使用 st7735 组件来继续丢弃选项(在这种情况下,使用不同的实现,即使它有错误)。当然也没有成功。
郑重声明,这是我显示器的 YAML 配置(请记住,其余 ID 和组件也都存在。您可以在此处获取我的 YAML 文件的完整副本):
spi:
clk_pin: 14
mosi_pin: 15
display:
- platform: st7789v
model: Custom
height: 320
width: 240
offset_height: 0
offset_width: 0
cs_pin: 13
dc_pin: 12
reset_pin: 11
backlight_pin: 10
lambda: |-
it.print(0, 0, id(roboto_20), "Hello World!");
it.filled_rectangle(0, 0, 100, 100, id(my_yellow));
你们对我下一步可以尝试什么有什么建议吗?
我发现问题了!
ESPHome 似乎不够聪明,无法知道我正在使用 Raspberry Pi Pico(不是无线版本),因此当它看到网络组件时,它会很高兴地对其进行编译。目前我不知道这如何影响主板,但我的猜测是它设置了所有外围设备(这样我可以在设置过程中渲染蓝色方块),然后它尝试连接到某个网络,在我的情况下,它肯定失败了,所以不知何故卡住了。这也导致日志记录无法工作。
总而言之,删除
network
组件(这会迫使您也删除 ota
和 api
组件)可以修复问题,并且 lambda 可以完美执行。
我拥有这些组件的原因是因为当我选择 pico 板(而不是 W)时它们已经设置好了。
有趣的是,我用
2023.11.2
之前的版本创建了这个设备。在新版本中,新设备是使用 wifi
组件创建的。这个组件在非 Wi-Fi 设备上同样愚蠢,但至少它会导致固件编译失败,因此在运行时之前可以防止该问题(不理想,但比以前好得多)。