跳过正文
  1. Posts/

esp32制作小电视学习笔记

·207 字·1 分钟

假期闲来无事,与其虚度,不如做点事干 你信吗?我不信 ( ̄ε(# ̄)☆╰╮o( ̄皿 ̄///)。于是就买了个开发板,正好借此学一学C语言。

于是,就立马买了需要的东西,清单如下所示:

物品价格数量备注
Esp32 DevKit v1 30pin开发板21.51有30pin和36pin的版本
40P彩排杜邦线2.811母对母
1.8寸 彩色TFT屏幕201不带触摸
开发板连接线00家里找的

*注意:我买的屏幕型号是MSP1803,需要连接背光才能显示 *

一共44.31块,还行吧。

之后就找了个做小电视的视频就开始学了。

然后我懵了,我没学过单片机,大一只学过Python和HTML入门,我看不懂商家给的资料,也看不懂UP给的教程。

然后鼓捣了好久。玩了好久,才想起来有个单片机。

现在才整的有些样子,现在基本完成了,那么我就把我一路上踩过的坑说一下。

获取Chip ID报错
#

报错显示 “ exec: ‘cmd’: executable file not found in %PATH% 为开发板 ESP32 Dev Module 编译时出错。”

提示没有配置环境变量,配置完成,问题解决。

屏幕显示问题
#

屏幕不显示
#

检查自己的屏幕,教程里面是不接背光的,可以烧录进去,然后接背光试试。我今天(2022.2.12)才发现我的屏幕是一定要接背光的,我还搞了好久。

图片显示不正常,且有小部分花屏
#

有的人可能烧录进去以后发现屏幕是这个样子:

https://xenolies-blog-images.oss-cn-hangzhou.aliyuncs.com/Pics/IMG20220212145658-768x1024.webp

图片显示非常不正常,还有花屏的情况。

根据这个帖子的说法,是设计问题,可以通过切换配置文件的参数解决 。解决方法来自这个帖子

按照这样的路径(.\arduino\arduino-nightly\hardware\espressif\esp32\libraries\TFT_eSPI)打开TFT_eSPI,找到User_Setup.h,打开。

找到这样的地方,并且把原来的#define ST7735_GREENTAB2注释掉,把#define ST7735_REDTAB解除注释,就显示正常了。

此方法选择的参数有可能其他屏幕无效,可以在几个参数切换试试看

然后重新烧录进去程序。

这样就显示正常了。

色彩显示错误
#

烧录进去了程序,有可能出现这样的情况:本该显示蓝色的地方显示了黄色。这是因为UP的程序里使用的是BGR,而你的屏幕是RGB,这样导致的色彩问题。

解决办法:

按照这样的路径(.\arduino\arduino-nightly\hardware\espressif\esp32\libraries\TFT_eSPI)打开TFT_eSPI,找到User_Setup.h,打开。

找到#define TFT_RGB_ORDER TFT_BGR 这样的一行,将其注释掉,启用上面的define TFT_RGB_ORDER TFT_RGB。

完成以后就是这样子

显示不全
#

UP的代码烧录进去以后会发现有个问题,就是在天气页面,如果显示三个字的地名或者显示风向为“东北风‘的时候会显示不全,这时候就要调整一下显示的位置:

我这里把调好的放在下面

/*******************天气界面显示****************/
void show_weather(uint16_t fg,uint16_t bg)
{
    
    tft.setSwapBytes(true);             //使图片颜色由RGB->BGR
    tft.pushImage(0, 0,  64, 64, weather[ph]);

    showMyFonts(75, 25, now_address.c_str(), TFT_WHITE);//因为图片大小的限制,如果是四个字的地名的话需要调整图片大小,还有本行调小X轴数值(数字75所在的位置)
    showMyFonts(75, 45, now_wea, TFT_WHITE);//天气

    tft.pushImage(0 , 65, 30, 30, temIcon);
    tft.pushImage(0, 95, 30, 30, humIcon);;//湿度
    tft.pushImage(50, 65, 30, 30, rainIcon);//雨
    tft.pushImage(45, 95, 30, 30, windIcon);//风
    
    showtext(25,75,1,1,fg,bg,now_high_tem + "/" + now_low_tem);//低温高温
     showtext(25,75,1,1,fg,bg,now_high_tem + "/" + now_low_tem);//低温高温
    showtext(85,75,1,1,fg,bg,now_rainfall +"mm");//降水量
    showtext(25,105,1,1,fg,bg,now_hum+"%");//湿度
    String now_wind = now_wind_direction + "风";//什么风
    showMyFonts(75, 100, now_wind.c_str(), TFT_WHITE);
    get_weather();// 再次运行获取天气的函数,保证天气更新

}

接线问题
#

有的屏幕的A0引脚接那里?
#

可以接到DC的引脚那里,性质相同 ,都是数据选择功能

其他的引脚接哪里?以我的为例。

屏幕引脚标注开发板引脚标注功能
VCCVIN正极
GNDGND负极
CSD27片选信号
RESETD26复位信号
A0(DC)D25寄存器/数据选择信号
SDAD23SPI 总线写数据信号
SCKD18SPI 总线时钟信号
LED3V3背光

其他
#

1.8寸的TFT屏幕,型号是MSP1803的相关的资料:

http://www.lcdwiki.com/res/MSP1803/1.8inch_SPI_Module_MSP1803_User_Manual_CN.pdf

30引脚的DOIT Esp32 Dev Kit v1开发板的引脚图,可以参考下:

https://www.electronicshub.org/esp32-pinout/

Esp32 DevKit v1的30引脚和36引脚的对比:

https://cloud.tencent.com/developer/article/1749032

Xenolies
作者
Xenolies
Keep On Keeping On