ili9431液晶 tft_espi图形库演示 时钟、天气、滚动、气象图标

米思齐tft_spi模块库演示程序。心知天气、阿里云时钟、WiFi信号强度检测、1分钟滚屏、更新天气时间为15分钟、加入天气图标。更新天气次数。断网检测 。此程序为tft_eSPI图形库演示、如感觉好可以自行优化。

ili9431tft_espi库是用于ESP32和ESP8266芯片的TFT LCD驱动程序库,可用于控制ILI9341和ILI9431 TFT显示屏。以下是配置ili9431tft_espi库的步骤:

  1. 下载并安装Arduino IDE。

  2. 在Arduino IDE中,导航到“文件”>“首选项”>“附加开发板管理器网址”并输入以下网址:

    https://dl.espressif.com/dl/package_esp32_index.json,http://arduino.esp8266.com/stable/package_esp8266com_index.json

  3. 点击“确定”按钮,关闭“首选项”窗口。

  4. 导航到“工具”>“开发板”>“开发板管理器”。

  5. 在搜索栏中输入“ESP32”或“ESP8266”,然后选择相应的开发板并安装。

  6. 连接ILI9341或ILI9431 TFT显示屏到ESP32或ESP8266芯片。

  7. 在Arduino IDE中,打开一个示例程序(例如:ILI9431test)。

  8. 在示例程序中,确保指定正确的引脚连接和显示屏类型:

    #define TFT_DC 15
    #define TFT_CS 14
    #define TFT_RST -1
    #define TFT_MOSI 23
    #define TFT_CLK 18
    #define TFT_MISO -1

    ESP_ILI9341 tft = ESP_ILI9341(TFT_CS, TFT_DC, TFT_RST, TFT_MOSI, TFT_CLK, TFT_MISO);

  9. 上传示例程序到开发板。

  10. 测试ILI9341或ILI9431 TFT显示屏是否能够正常工作。

程序图

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

完整代码如下:

#include <zh_font20.h>
#include <FxLED_32.h>
#include <weathz.h>
#include <textmatrix.h>
#include <SPI.h>
#include <TFT_eSPI.h>
#include <ESP8266WiFi.h>
#include <TimeLib.h>
#include <NtpClientLib.h>
#include <TJpg_Decoder.h>
#include <ESP8266HTTPClient.h>
#include <ArduinoJson.h>volatile int shu;
volatile int start_xz;
volatile unsigned long dingshi_xz;
volatile unsigned long now_xz;
volatile int code_day;
volatile int code_ye;
volatile bool clear;
int8_t timeZone = 8;
const PROGMEM char *ntpServer = "ntp1.aliyun.com";char x_map[4] = "" ;
char x_night[12] = "" ;
char code_night[4] = "" ;
char x_day[12] = "" ;
char iconday[4] = "" ;
char x_wdhigh[6] = "" ;
char x_wdlow[6] = "" ;
char x_humidity[5] = "" ;
char x_wind_direction[20] = "" ;
char x_direction_degree[5] = "" ;
char x_scale[3] = "" ;
char x_speed[5] = "" ;
char x_rainfall[6] = "" ;
char x_precip[6] = "" ;
TFT_eSPI tft = TFT_eSPI();
bool tft_output(int16_t x, int16_t y, uint16_t w, uint16_t h, uint16_t* bitmap)
{if (y >= tft.height()) return 0;tft.pushImage(x, y, w, h, bitmap);return 1;
}void dispaly_clear() {if (clear == false) {tft.fillScreen(TFT_BLACK);clear = true;}
}void nowifi() {int num = 0;while (!(WiFi.status() == WL_CONNECTED)) {dispaly_clear();tft.drawRect(28,98,180,11,TFT_WHITE);tft.fillRect(30,100,num,7,TFT_YELLOW);tft.loadFont(zh_font20);tft.setCursor(70,120);tft.setTextColor(TFT_GREEN,TFT_BLACK);tft.println("网络失败!!");tft.setCursor(60,150);tft.print("请配置网络!!!");tft.unloadFont();//卸载字库占用内存delay(80);num++;if (num >= 178) {num = 0;tft.fillScreen(TFT_BLACK);}if (WiFi.status() == WL_CONNECTED == 1) {tft.fillScreen(TFT_BLACK);break;}}
}void shibai() {tft.fillScreen(TFT_BLACK);tft.loadFont(zh_font20);tft.setCursor(30,120);tft.setTextColor(TFT_PURPLE,TFT_BLACK);tft.print("请配置 wifi  网络");tft.unloadFont();//卸载字库占用内存
}String getzhenshu(int zhs) {String s = "";if (zhs < 10) {s = String("0") + String(zhs);} else {s = zhs;}return s;
}uint8_t getwifiriis() {uint32_t db = WiFi.RSSI();if (db <= -100) {return 0;} else if (db >= -50) {return 100;} else {return (2 * (db + 100));}return db;
}String getday_yyr() {String s = "";s = String(NTP.getDateYear()) + String("年") + String(getzhenshu(NTP.getDateMonth())) + String("月") + String(getzhenshu(NTP.getDateDay())) + String("日");return s;
}String gettime_m() {String s = "";s = String(getzhenshu(NTP.getTimeSecond()));return s;
}String gettime_hf() {String s = "";s = String(getzhenshu(NTP.getTimeHour24())) + String(":") + String(getzhenshu(NTP.getTimeMinute()));return s;
}String getweek() {String s = "";switch (NTP.getDateWeekday()) {case 1:s = "星期一";break;case 2:s = "星期二";break;case 3:s = "星期三";break;case 4:s = "星期四";break;case 5:s = "星期五";break;case 6:s = "星期六";break;case 7:s = "星期日";break;default:break;}return s;
}TFT_eSprite spr = TFT_eSprite(&tft);
TFT_eSprite clk = TFT_eSprite(&tft);
void tft_weathr() {tft.setTextColor(TFT_SILVER ,TFT_BLACK);tft.setCursor(0,1,1);tft.print(String("up data:") + String(shu));tft.loadFont(zh_font20);tft.setTextColor(TFT_YELLOW,TFT_BLACK);tft.drawString(String("白天:") + String(x_day),1,155);tft.drawString(String("夜间:") + String(x_night),120,155);tft.drawString(String("高温:") + String(String(x_wdhigh) + String("℃")),1,176);tft.drawString(String("低温:") + String(String(x_wdlow) + String("℃")),120,176);tft.drawString(String("湿度:") + String(x_humidity),1,197);tft.drawString(String("等级:") + String(x_scale),120,197);tft.drawString(String("风速:") + String(x_speed),1,218);tft.drawString(String("角度:") + String(x_direction_degree),120,218);tft.drawString(String("雨量:") + String(x_rainfall),1,239);tft.drawString(String("雨概率:") + String(x_precip),120,239);tft.drawString(String("风向:") + String(x_wind_direction),1,260);tft.unloadFont();//卸载字库占用内存TJpgDec.drawJpg(15,96,weatherico(code_day), sizeof(wico10));TJpgDec.drawJpg(130,96,weatherico(code_ye), sizeof(wico10));
}void weathr_up() {// 40分钟更新一次if (millis() - dingshi_xz > 1500000 || start_xz == 0) {dingshi_xz = millis();shu++;String weather;WiFiClient client;HTTPClient http;BearSSL::WiFiClientSecure wificlient;wificlient.setInsecure();http.begin(client,"http://api.seniverse.com/v3/weather/daily.json?key=你的心知天气密钥&location=ip&language=zh-Hans&unit=c&start=0&days=1");int httpCode = http.GET();if (httpCode > 0) {Serial.printf("[HTTP] GET... code: %d", httpCode);Serial.println();if (httpCode == HTTP_CODE_OK) {String payload = http.getString();weather += payload;}}http.end();delay(10);StaticJsonDocument<1024> doc;DeserializationError error = deserializeJson(doc,weather);if (error) {Serial.print(F("deserializeJson() failed: "));Serial.println(error.f_str());return;}JsonObject results_0 = doc["results"][0];;JsonObject results_0_location = results_0["location"];;strcpy(x_map , results_0_location["name"]);JsonObject results_0_daily_0 = results_0["daily"][0];;strcpy(x_day , results_0_daily_0["text_day"]);strcpy(iconday , results_0_daily_0["code_day"]);strcpy(x_night , results_0_daily_0["text_night"]);strcpy(code_night , results_0_daily_0["code_night"]);strcpy(x_wdhigh , results_0_daily_0["high"]);strcpy(x_wdlow , results_0_daily_0["low"]);strcpy(x_humidity , results_0_daily_0["humidity"]);// 风向 东南西北风// 风向文字strcpy(x_wind_direction , results_0_daily_0["wind_direction"]);// 风向角度,范围0~360strcpy(x_direction_degree , results_0_daily_0["wind_direction_degree"]);// 风力等级strcpy(x_scale , results_0_daily_0["wind_scale"]);// 风速/mstrcpy(x_speed , results_0_daily_0["wind_speed"]);// 降水量,0.00 单位mmstrcpy(x_rainfall , results_0_daily_0["rainfall"]);// 降水量,0.00 单位mmstrcpy(x_precip , results_0_daily_0["precip"]);tft.fillScreen(TFT_BLACK);start_xz = 1;if (NTP.getTimeHour24() == 0) {shu = 0;}}
}void time_man() {clk.setColorDepth(8);clk.loadFont(zh_font20);clk.createSprite(140,21);clk.fillSprite(TFT_BLACK);clk.setTextDatum(CC_DATUM);clk.setTextColor(TFT_YELLOW,TFT_BLACK);clk.drawString((getday_yyr()),68,11);clk.pushSprite(50,14);clk.deleteSprite();clk.unloadFont();clk.setColorDepth(8);clk.setTextFont(7);clk.createSprite(135,48);clk.fillSprite(TFT_BLACK);clk.setTextDatum(CC_DATUM);clk.setTextColor(TFT_GREEN,TFT_BLACK);clk.drawString((gettime_hf()),67,24);clk.pushSprite(20,42);clk.deleteSprite();clk.unloadFont();clk.setColorDepth(8);clk.loadFont(zh_font20);clk.createSprite(61,21);clk.fillSprite(TFT_BLACK);clk.setTextDatum(CC_DATUM);clk.setTextColor(TFT_WHITE,TFT_BLACK);clk.drawString((getweek()),30,11);clk.pushSprite(173,40);clk.deleteSprite();clk.unloadFont();clk.setColorDepth(8);clk.loadFont(FxLED_32);clk.createSprite(38,30);clk.fillSprite(TFT_BLACK);clk.setTextDatum(CC_DATUM);clk.setTextColor(TFT_ORANGE,TFT_BLACK);clk.drawString((gettime_m()),19,16);clk.pushSprite(160,59);clk.deleteSprite();clk.unloadFont();
}void wifi_riis() {spr.setColorDepth(8);spr.createSprite(10,10);spr.fillSprite(TFT_BLACK);spr.setTextDatum(CC_DATUM);for(int i = 0;i<4;i ++){for(int j = 0;j<(2 * (i + 1));j++){if (getwifiriis() > i * 25 || j == 0) {spr.drawPixel((2 + 2 * i),(8 - j),TFT_GREEN);}}}spr.pushSprite(231,1);spr.deleteSprite();clk.setColorDepth(8);clk.setTextFont(1);clk.createSprite(22,10);clk.fillSprite(TFT_BLACK);clk.setTextDatum(CC_DATUM);clk.setTextColor(TFT_WHITE,TFT_BLACK);clk.drawString(String(((String)(getwifiriis()))) + String("%"),11,5);clk.pushSprite(207,1);clk.deleteSprite();clk.unloadFont();
}void setup(){shu = 0;start_xz = 0;dingshi_xz = 0;now_xz = 0;code_day = 0;code_ye = 0;clear = false;Serial.begin(9600);tft.begin();tft.setRotation(0);tft.fillScreen(TFT_BLACK);tfts.init();setupScrollArea(TOP_FIXED_AREA, BOT_FIXED_AREA);WiFi.mode(WIFI_STA);int cnt = 0;while (WiFi.status() != WL_CONNECTED) {delay(500);Serial.print(".");if (cnt++ >= 10){WiFi.beginSmartConfig();while (1) {delay(1000);if (WiFi.smartConfigDone()) {Serial.println();Serial.println("SmartConfig: Success");break;}Serial.print("|");shibai();//无判断条件:可不创建函数。加判断条件:请创建shibai();。}}}WiFi.printDiag(Serial);Serial.println(WiFi.localIP());Serial.println("网络配置成功。可以上网啦!");NTP.setInterval (600);NTP.setNTPTimeout (1500);NTP.begin (ntpServer, timeZone, false);TJpgDec.setJpgScale(1);TJpgDec.setSwapBytes(true);TJpgDec.setCallback(tft_output);}void loop(){code_day = atoi(iconday);code_ye = atoi(code_night);nowifi();wifi_riis();weathr_up();time_man();tft_weathr();clear = false;if (String((gettime_m())).equals(String("00"))) {scroll_slow(62,30);}}

效果演示

在这里插入图片描述

#include <zh_font20.h> //自制中文字库

#include <FxLED_32.h>//段码时间小字库

#include <weathz.h> //气象图标

#include <textmatrix.h>//滚屏

#include <TJpg_Decoder.h>//图片库

如用arduino IDE需将上边库文件放到一个文件夹下即可编译。

如用mixly 米思齐编译器 上边文件必须放在这安装目录下。如:D:\Mixly1.20back\arduino\portable\sketchbook\libraries\Fonts 。Fonts这为新建文件夹名字。

在这里插入图片描述

总之比较麻烦,按步骤操作。打包送喜欢爱折腾的你。

注意这里: http.begin(client,“http://api.seniverse.com/v3/weather/daily.json?key=你的心知天气密钥&location=ip&language=zh-Hans&unit=c&start=0&days=1”);

下载地址:https://download.csdn.net/download/lnwqh/88388748

有问题可以私信或留言,没事点点赞或留个言多交流。哈哈哈

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/146902.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

基于Java的厨艺交流平台设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序&#xff08;小蔡coding&#xff09;有保障的售后福利 代码参考源码获取 前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作…

初级篇—第一章初识数据库

文章目录 为什么要使用数据库数据库与数据库管理系统数据库的相关概念数据库与数据库管理系统的关系 常用的数据库为什么如此多的厂商要选用MySQL&#xff1f;MySQL的目录 RDBMS 与 非RDBMS关系型数据库(RDBMS)非关系型数据库(非RDBMS) 关系型数据库设计规则表、记录、字段表的…

mathtype如何嵌入到word中?详细mathtype安装步骤教程

mathtype是一款功能特别强大的数学方式编辑软件&#xff0c;为用户提供各种强大的数学公式符号帮助用户进行计算&#xff0c;并且速度很快。有小伙伴知道mathtype如何嵌入到word中吗&#xff0c;这里小编就给大家详细介绍一下mathtype嵌入到word中的方法&#xff0c;有需要的小…

【JVM】第五篇 垃圾收集器G1和ZGC详解

导航 一. G1垃圾收集算法详解1. 大对象Humongous说明2. G1收集器执行一次GC运行的过程步骤3. G1垃圾收集分类4. G1垃圾收集器参数设置5. G1垃圾收集器的优化建议6. 适合使用G1垃圾收集器的场景?二. ZGC垃圾收集器详解1. NUMA与UMA2. 颜色指针3. ZGC的运作过程4. ZGC垃圾收集器…

【源码】hamcrest 源码阅读及空对象模式、模板方法模式的应用

文章目录 前言1. 类图概览2. 源码阅读2.1 抽象类 BaseMatcher2.1 接口 Description提炼模式&#xff1a;空对象模式 2. 接口 Description 与 SelfDescribing 配合使用提炼模式 模板方法 后记 前言 hamcrest &#xff0c;一个被多个测试框架依赖的包。听说 hamcrest 的源码质量…

flutter开发实战-webview插件flutter_inappwebview使用

flutter开发实战-webview插件flutter_inappwebview使用 在开发过程中&#xff0c;经常遇到需要使用WebView&#xff0c;Webview需要调用原生的插件来实现。常见的flutter的webview插件是webview_flutter&#xff0c;flutter_inappwebview。之前整理了一下webview_flutter&…

OpenCV之直线曲线拟合

直线拟合fitLine void fitLine( InputArray points, OutputArray line, int distType,double param, double reps, double aeps ); points:二维点的数组或vector line:输出直线,Vec4f (2d)或Vec6f (3d)的vector distType:距离类型 param:距离参数 reps:径向的精度参数 a…

多线程学习笔记(一)

文章目录 1 线程基础知识复习2 CompletableFuture1、Future和Callable接口2、FutureTask3、对Future的改进4、案例精讲——电商5、常用方法6、CompetableFutureWithThreadPool【重要】 3 锁1、乐观锁和悲观锁2、synchronized 8锁案例3、公平锁和非公平锁4、可重入锁5、死锁及排…

微服务moleculer01

1.官网地址&#xff1a; Moleculer - Progressive microservices framework for Node.js 2. github代码地址&#xff1a; GitHub - moleculerjs/moleculer: :rocket: Progressive microservices framework for Node.js Moleculer是基于Node.js的一款快速、多功能的微服务框…

【c++随笔07】常量、变量、static

【c随笔07】常量、变量、static 1、常量、变量1.1、声明变量1.2、使用常量 2、static介绍2.1、static 局部变量2.2、static 全局变量2.3、C static静态成员变量2.4、C static静态成员函数详解 原创地址&#xff0c;https://zhengjunxue.blog.csdn.net/article/details/13167770…

如何保持终身学习

文章目录 2.1. 了解你的大脑2.2 学习是对神经元网络的塑造2.3 大脑的一生 3.学习的心里基础3.1 固定思维与成长思维3.2 我们为什么要学习 4. 学习路径4.1 构建知识模块4.2 大脑是如何使用注意力的4.3 提高专注力4.4 放松一下&#xff0c;学的更好4.5 巩固你的学习痕迹4.6 被动学…

毛玻璃跟随鼠标移动

效果展示 页面结构组成 从上述的效果图可以看出&#xff0c;此页面的布局比较简单&#xff0c;采用常规的布局就可以实现 CSS / JavaScript 知识点 backdrop-filter 属性回顾mousemove 事件 实现页面布局 <section><h2>Frosted Glass</h2><div class…

Ae 效果:CC Slant

扭曲/CC Slant Distort/CC Slant CC Slant &#xff08;CC 倾斜&#xff09;主要用于创建图像的倾斜效果&#xff0c;可以改变图像的视觉角度&#xff0c;使得图像看起来像是被倾斜或者拉伸。 ◆ ◆ ◆ 效果属性说明 Slant 倾斜 用于控制倾斜源图像的程度。 默认值为 0&#…

【OSCAR开源产业大会分论坛】开源大模型走向何方?

再过俩月&#xff0c;ChatGPT 即将迎来推出一周年纪念日。作为开历史先河的 AI 大模型&#xff0c;ChatGPT 像一针猛戳进千行百业中枢神经的兴奋剂&#xff0c;在全球掀起空前绝后的 AI 军备竞赛热潮。 近一年来&#xff0c;我们看到 GPT-3.5 完成向多模态的 GPT-4 进化&#x…

网络基础入门(认识网络 网络传输 概念举例详解)

本篇文章主要是对网络初学的概念进行解释&#xff0c;可以让你对网络有一个大概整体的认知。 文章目录 一、简单认识网络 1、1 什么是网络 1、2 网络分类 二、网络模型 2、1OSI七层模型 2、1、1 简单认识协议 2、1、2 OSI七层模型解释 2、2 TCP/IP五层(或四层)模型 三、网络传…

常用接口测试工具

首先&#xff0c;什么是接口呢&#xff1f; 接口一般来说有两种&#xff0c;一种是程序内部的接口&#xff0c;一种是系统对外的接口。 系统对外的接口&#xff1a;比如你要从别的网站或服务器上获取资源或信息&#xff0c;别人肯定不会把数据库共享给你&#xff0c;他只能给你…

BiMPM实战文本匹配【上】

引言 今天来实现BiMPM模型进行文本匹配&#xff0c;数据集采用的是中文文本匹配数据集。内容较长&#xff0c;分为上下两部分。 数据准备 数据准备这里和之前的模型有些区别&#xff0c;主要是因为它同时有字符词表和单词词表。 from collections import defaultdict from …

二、局域网联机

目录 1.下载资源包 2.配置NetworkManager 3.编写测试UI 1.下载资源包 2.配置NetworkManager &#xff08;1&#xff09;在Assets/Prefabs下创建Network Prefabs List 相应设置如下&#xff1a; &#xff08;2&#xff09; 创建空物体“NetworkManager”并挂载NetworkMan…

Java编程技巧:跨域

目录 1、跨域概念2、后端CORS&#xff08;跨域资源共享&#xff09;配置原理3、既然请求跨域了&#xff0c;那么请求到底发出去没有&#xff1f;4、通过后端CORS&#xff08;跨域资源共享&#xff09;配置解决跨域问题代码4.1、SpringBoot&#xff08;FilterRegistrationBean&a…

重新认识mysql

title: “重新认识mysql” createTime: 2022-03-06T15:52:4108:00 updateTime: 2022-03-06T15:52:4108:00 draft: false author: “ggball” tags: [“mysql”] categories: [“db”] description: “” 文章目录 title: "重新认识mysql" createTime: 2022-03-06T15:…