|
本帖最后由 topdog 于 2022-2-10 03:36 编辑
第24届冬季奥林匹克运动会(XXIV Olympic Winter Games),即2022年北京冬季奥运会,是由中国举办的国际性奥林匹克赛事,于2022年2月4日开幕,2月20日闭幕。北京冬奥会吉祥物“冰墩墩”,以熊猫为原型进行设计创作。冰,象征纯洁、坚强,是冬奥会的特点。墩墩,意喻敦厚、健康、活泼、可爱,契合熊猫的整体形象,象征着冬奥会运动员强壮的身体、坚韧的意志和鼓舞人心的奥林匹克精神。北京冬残奥会吉祥物“雪容融”以灯笼为原型进行设计创作。雪,象征洁白、美丽,是冰雪运动的特点;容,意喻包容、宽容,交流互鉴;融,意喻融合、温暖,相知相融。容融,表达了世界文明交流互鉴、和谐发展的理念,体现了通过残奥运动创造一个更加包容的世界和构建人类命运共同体的美好愿景。
用ESP32和2.4寸ILI9341驱动的LCD屏幕做一个吉祥物展示时钟,让奥林匹克的精神激励我们更好的读书吧。
首先下载吉祥物的照片,然后用photoshop软件将图片裁剪成320x240像素大小,再用lcd image converter将她转化成.C文件,最后使用Adafruit_ILI9341库把可爱的吉祥物展现在LCD屏幕上。
接线如下:
ILI9341 ESP32
CS1 15
DC 2
MOSI 23
CLK 18
RST 4
MISO 19
BLK 5
程序如下:
[pre]#include "SPI.h"
#include <Adafruit_ILI9341.h>
#include "WinterOlympicMascots.h"
#include <WiFi.h>
#include "time.h"
const char* ssid = "WiFi名称";
const char* password = "WiFi密码";
const char* ntpServer = "time2.cloud.tencent.com";
const long gmtOffset_sec = 28800;
const int daylightOffset_sec = 0;
const int TFT_CS = 15;
const int TFT_DC = 2;
const int TFT_MOSI = 23;
const int TFT_CLK = 18;
const int TFT_RST = 4;
const int TFT_MISO = 19;
const int TFT_BACKLIGHT = 5;
volatile unsigned long starttime;
#define background 0xFFFF
Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC, TFT_MOSI, TFT_CLK, TFT_RST, TFT_MISO);
void printLocalTime()
{
struct tm timeinfo;
if (!getLocalTime(&timeinfo)) {
Serial.println("Failed to obtain time");
return;
}
tft.setTextColor(ILI9341_BLACK);
tft.setTextSize(3);
tft.fillRoundRect(8, 8, 145, 25, 5, background); // 坐标x8,y8,画长145,宽25,圆角5的背景矩形
tft.setCursor(10, 10);
tft.println(&timeinfo, "%H:%M:%S");
tft.fillRoundRect(0, 220, 340, 20, 5, background);
tft.setCursor(0, 220);
tft.println(&timeinfo, "%A, %B %d %Y");
}
void setup() {
Serial.begin(115200);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
}
configTime(gmtOffset_sec, daylightOffset_sec, ntpServer);
printLocalTime();
WiFi.disconnect(true);
WiFi.mode(WIFI_OFF);
pinMode(TFT_BACKLIGHT, OUTPUT);
digitalWrite(TFT_BACKLIGHT, LOW);
delay(10);
digitalWrite(TFT_BACKLIGHT, HIGH);
tft.begin();
tft.setRotation(0);
tft.fillScreen(ILI9341_BLACK);
tft.drawRGBBitmap(0, 0, WinterOlympicMascots, 320, 240);
}
void loop() {
if (millis() - starttime >= 1000) {
printLocalTime();
starttime = millis();
}
}[/pre]
加了时间和日期后的效果图:
|
|