esp32制作小电视学习笔记

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

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

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

*注意:我买的屏幕型号是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,打开。

https://xenolies-blog-images.oss-cn-hangzhou.aliyuncs.com/Pics/image-30.png

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

https://xenolies-blog-images.oss-cn-hangzhou.aliyuncs.com/Pics/屏幕截图-2022-02-12-163850-1024x382.webp

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

然后重新烧录进去程序。

这样就显示正常了。

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

色彩显示错误

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

解决办法:

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

https://xenolies-blog-images.oss-cn-hangzhou.aliyuncs.com/Pics/image-30.png

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

https://xenolies-blog-images.oss-cn-hangzhou.aliyuncs.com/Pics/屏幕截图-2022-02-12-164705.webp

完成以后就是这样子

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

显示不全

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

我这里把调好的放在下面

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
/*******************天气界面显示****************/
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的引脚那里,性质相同 ,都是数据选择功能

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

屏幕引脚标注 开发板引脚标注 功能
VCC VIN 正极
GND GND 负极
CS D27 片选信号
RESET D26 复位信号
A0(DC) D25 寄存器/数据选择信号
SDA D23 SPI 总线写数据信号
SCK D18 SPI 总线时钟信号
LED 3V3 背光

其他

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

0%