基于ESP8266,1.44 tft的时间天气显示成功案例
复刻声明:
本demo在其它案例上复刻实现,demo效果相关参考文档见如下链接:
-
ESP8266入门教程:推荐太极创客系列教程,ps:真心感谢太极创客团队的老师,系列视频之后有效的帮我快速了解了诸如http协议、jason语法、arduino入门、网站API使用方法及ESP8266使用方法等干货内容
链接:太极创客网站 -
ESP32+1.44tft 案例:本demo主要参考此案例复刻(请注意,参考案例开发板为ESP32,同时其blog评论中有小伙伴用同样的硬件,无法成功复刻,出现反复重启的故障;同时参考案例中对tft显示内容的坐标设置是有问题的;下文会给出解决方案):
链接:参考案例 -
tft相关库的使用方法教程:可参考如下链接进行学习了解:
- 根据tft ic型号,配置TFT_eSPI文件,链接:tft配置
- tft库函数使用方法,链接:tft API使用说明
demo实现所用配置
- ESP8266开发板 + 1.44 tft,商品链接
- 接线说明:标准SPI使用4线制,ESP8266驱动tft只用3线即可,显示屏接收数据和指令即可,无需返回数据,即MOSI,对应需使用CLK、SDI、CS引脚
TFT | ESP8266 |
---|---|
VCC | 3.3V |
GND | G |
LED | 3.3v |
CLK | D5 |
SDI | D7 |
RS | D3 |
RST | D4 |
CS | D8 |
3. miscro-usb数据线,arduino开发环境(我用的1.8.19)
代码功能简介
- WiFI连接
- 连接心知天气、阿里云网站:请求实况天气和时间,解析上述网站反馈回的jason信息
- 汉字库创建:Myfont_1.h
- 图片库创建:pic.h(图片在心知天气网站下载链接)
- tft显示:将时间天气信息输出显示在tft液晶屏幕上
复刻过程问题及解决方法记录
- usb数据线问题:这个很容易小阴沟里翻船的,有的usb数据线只有供电功能,不具备串口功能,一定要使用带串口功能的数据线(另外,我买的这个esp8266开发板上串口芯片用的是CH340,如果您购买的开发板串口芯片用的cp2102,要下载对应的驱动才可以通讯);同时arduino中选择的串口即波特率要与实际使用的电脑端口一致
Display_Time()
函数中,存储格林威治时间(gmt)的变量epochTime
必须为全局变量,否则在tft屏幕上显示会出问题(调试发现:如果将epochTime
作为局部变量,则解析出的时间一直是错误的)
void Display_Time() {
timeClient.update();
// unsigned long epochTime = timeClient.getEpochTime();//epochTime必须作为全局变量,否则结果不正确
epochTime = timeClient.getEpochTime();
...
}
- 参考案例ESP32+1.44 tft的工程代码中,对于显示内容的坐标设置是有问题的,本demo工程代码进行了优化,可实现文章开头的图片效果
Myfont_1.h
和pic.h
文件包含时,要采用如下方式,不能使用<>,原因为:#include<库文件>
,#include"所有文件"
,Myfont_1.h
和pic.h
文件不是库文件
#include <WiFiUdp.h>
#include "MyFont_1.h"//中文字符库,需要使用汉字取模软件PCtoLCD2002.exe
#include "pic.h"//天气图标库,需要使用图片取模软件ImageConverter565.exe
- 字库文件创建时,为了节约RAM,将字库文件加载到flash中,即使用
PROGMEM
,PROGMEM
放置位置需要如下方所示,有的arduino版本不支持下方注释掉的方式
//const unsigned char hz_Evening PROGMEM[] =
const unsigned char hz_Evening[] PROGMEM =
{
0x00,0x80,0x00,0x80,0x79,0xF8,0x4A,0x08,0x4C,0x10,0x4B,0xFC,0x4A,0x44,0x7A,0x44,
0x4A,0x44,0x4B,0xFC,0x48,0xA0,0x48,0xA0,0x79,0x22,0x49,0x22,0x02,0x1E,0x04,0x00/*"晚",54*/
};
- 字库文件中,汉字常量结构体数组不能加
PROGMEM
//PROGMEM const FNT_HZ hanzi[] =
const Font_CN CHINESE[] =
{
{"周", hz_zhou,16}, {"一", hz_Mon,16}, {"二", hz_Tue,16}, {"三", hz_Wed,16}, {"四", hz_Thu,16},
...
};
工程源文件下载地址:
链接:工程源代码
提取码:0116
const char* ssid = "xxx"; // 连接WiFi名 ,改为自己的
const char* password = "xxx"; // 连接WiFi密码,改为自己的
// 心知天气HTTP请求所需信息
String reqUserKey = "xxx"; // 心知天气私钥,改为自己的
尾声:
- 本demo代码比较凌乱,因本人只是为了娱乐,没有进行梳理
- 本demo没有做自动配网的设置,您可以自己实现
- 如在复刻过程中遇到问题,欢迎留言讨论
- 致谢:感谢太极创客团队的良心教程,感谢引用到的文章作者的无私分享