chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

基于ESP32的圓形顯示屏圣誕主題互動(dòng)式雪球

電子發(fā)燒友論壇 ? 2025-04-15 11:48 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群



用一款以圣誕為主題的互動(dòng)式雪球讓節(jié)日氛圍鮮活起來(lái)!項(xiàng)目使用矽遞科技(Seeed Studio)圓形顯示屏和(XIAO)ESP32S3開(kāi)發(fā)板打造出極具視覺(jué)吸引力的雪景動(dòng)畫,包含動(dòng)態(tài)飄落的雪花、風(fēng)效以及觸摸交互功能。憑借雙緩沖技術(shù)實(shí)現(xiàn)的流暢動(dòng)畫,該項(xiàng)目能提供專業(yè)且無(wú)閃爍的體驗(yàn)。

Seeed Studio XIAO系列是小型開(kāi)發(fā)板,共享類似的硬件結(jié)構(gòu),尺寸實(shí)際上是拇指大小。這里的代號(hào)“小”代表它的一半特征“小”,另一半將是“羊角面包”。

6efd2b06-19ac-11f0-9434-92fbcf53809c.jpg

Seeed Studio XIAO ESP32S3 Sense集成了攝像頭傳感器、數(shù)字麥克風(fēng)和SD卡支持。結(jié)合嵌入式ML計(jì)算能力和攝影能力,這款開(kāi)發(fā)板是使用智能語(yǔ)音和視覺(jué)AI的絕佳工具。

6f3464e0-19ac-11f0-9434-92fbcf53809c.png

開(kāi)發(fā)特點(diǎn):

動(dòng)態(tài)雪景動(dòng)畫:模擬飄落的雪花顆粒,其速度和風(fēng)效均可調(diào)節(jié)。

觸摸交互:只需輕觸屏幕,即可循環(huán)切換三張漂亮的圣誕主題背景圖。

流暢渲染:采用雙緩沖技術(shù)實(shí)現(xiàn)無(wú)縫視覺(jué)效果,無(wú)閃爍現(xiàn)象。

可定制背景:輕松添加自己的 PNG 圖像,對(duì)雪球進(jìn)行個(gè)性化設(shè)置。

你將學(xué)到的內(nèi)容:

如何將矽遞科技圓形顯示屏與xiao ESP32S3 開(kāi)發(fā)板配合使用。

利用 TFT_eSPI 庫(kù)實(shí)現(xiàn)雙緩沖以呈現(xiàn)流暢動(dòng)畫。

使用 lv_xiao_round_screen 庫(kù)處理觸摸輸入。

模擬粒子效果以實(shí)現(xiàn)逼真的雪景動(dòng)畫。

環(huán)境準(zhǔn)備

硬件:對(duì)于該項(xiàng)目,我們需要這些設(shè)備:適用于曉開(kāi)發(fā)板的矽遞科技圓形顯示屏、XIAO ESP32S3 開(kāi)發(fā)板,我選用xiao ESP32S3 開(kāi)發(fā)板是因?yàn)閮?nèi)存方面的考慮。PNGDEC(PNG 解碼庫(kù))運(yùn)行大約需要 40KB 的內(nèi)存。

軟件準(zhǔn)備:要使用圓形顯示屏,請(qǐng)前往 “曉開(kāi)發(fā)板圓形顯示屏入門” 頁(yè)面安裝必要的庫(kù)。嘗試運(yùn)行一些示例,看看一切是否運(yùn)行正常。

庫(kù):對(duì)于這個(gè)項(xiàng)目,我們將使用隨適用于曉開(kāi)發(fā)板的矽遞科技圓形顯示屏附帶的庫(kù)。按照 “曉開(kāi)發(fā)板圓形顯示屏入門” 教程中的規(guī)定安裝所有庫(kù)。之后,你還需要以下內(nèi)容:

PNGdec 庫(kù)。

更新 LVGL 庫(kù)(或者不安裝來(lái)自矽遞科技 GitHub 的那個(gè)版本)

圖像:我們的圖像是存儲(chǔ)在閃存數(shù)組中的 PNG 圖像,使用 PNGdec 庫(kù)進(jìn)行顯示。所有圖像都必須是 PNG 格式。以下是我使用過(guò)的圖像 —— 全部由人工智能生成。

我們需要準(zhǔn)備好背景圖像,以便 TFT_eSPI 庫(kù)能夠顯示它們,并且這些圖像能很好地適配曉開(kāi)發(fā)板的圓形顯示屏。

準(zhǔn)備圖像

調(diào)整圖像大小,我們的XIAO開(kāi)發(fā)板圓形顯示屏分辨率為 240×240。我們需要對(duì)圖像進(jìn)行尺寸調(diào)整。下面我將展示如何使用 GIMP(一款圖像處理軟件)來(lái)操作。

1.打開(kāi)圖像

2.選擇 “圖像”>“縮放圖像”

70156c6a-19ac-11f0-9434-92fbcf53809c.jpg

3.將寬度和高度都設(shè)置為 240。由于 “保持比例” 選項(xiàng)(鏈條圖標(biāo)所示)已被選中,一旦你更改了寬度,高度也會(huì)相應(yīng)地改變。

703e0ff8-19ac-11f0-9434-92fbcf53809c.jpg

4.點(diǎn)擊 “縮放” 按鈕。

5.保存圖像(我打算覆蓋原來(lái)的圖像)。

7071677c-19ac-11f0-9434-92fbcf53809c.jpg

現(xiàn)在圖像已經(jīng)準(zhǔn)備好了,讓我們來(lái)創(chuàng)建閃存數(shù)組吧。

創(chuàng)建閃存數(shù)組

注意:這些操作說(shuō)明包含在 TFT_eSPI 庫(kù)的 Flash_PNG 示例當(dāng)中。要?jiǎng)?chuàng)建閃存數(shù)組,進(jìn)入 “文件轉(zhuǎn) C 語(yǔ)言風(fēng)格數(shù)組轉(zhuǎn)換器”。

創(chuàng)建數(shù)組的步驟如下:

1、使用 “瀏覽” 功能上傳圖像。在上傳圖像之后……

2、我們需要設(shè)置一些選項(xiàng)

70bf3308-19ac-11f0-9434-92fbcf53809c.jpg

所有其他選項(xiàng)都會(huì)變灰(即不可用、無(wú)法進(jìn)行設(shè)置操作)。

70dba90c-19ac-11f0-9434-92fbcf53809c.jpg

3、讓我們將數(shù)據(jù)類型更改為字符型(char)。

71099d58-19ac-11f0-9434-92fbcf53809c.jpg

4、點(diǎn)擊 “轉(zhuǎn)換” 按鈕。這將會(huì)把圖像轉(zhuǎn)換為數(shù)組。

712a0aac-19ac-11f0-9434-92fbcf53809c.jpg

5、現(xiàn)在你可以按下 “另存為文件” 按鈕來(lái)保存你的圖像,并將其添加到你的 Arduino(開(kāi)源電子原型平臺(tái))代碼中,或者按下 “復(fù)制到剪貼板” 按鈕。

如果你選擇 “復(fù)制到剪貼板”,那么你需要點(diǎn)擊 Arduino 編輯器右側(cè)的三個(gè)點(diǎn)(省略號(hào)圖標(biāo)),然后選擇 “新建標(biāo)簽頁(yè)”。

7160c81c-19ac-11f0-9434-92fbcf53809c.jpg

給它取個(gè)名字(一般來(lái)說(shuō)是你的圖像名加上.h 擴(kuò)展名)。

717bdaee-19ac-11f0-9434-92fbcf53809c.jpg

最終你所有的圖像都會(huì)以.h 文件的形式存在。

代碼

以下是對(duì)代碼主要功能的一些解釋,代碼中也包含了一些注釋。

頭文件與庫(kù)

我們首先引入一些庫(kù):

#include #include #include
#include "background1.h"#include "background2.h"#include "background3.h"
#define USE_TFT_ESPI_LIBRARY#include "lv_xiao_round_screen.h"

(左右移動(dòng)查看全部?jī)?nèi)容)

請(qǐng)記住,你需要安裝矽遞科技(Seeed Studio)相關(guān)的庫(kù)。

背景圖像以下是管理背景圖像的函數(shù):

struct Background { const uint8_t *data; size_t size;};
const Background backgrounds[] = { {(const uint8_t *)background1, sizeof(background1)}, {(const uint8_t *)background2, sizeof(background2)}, {(const uint8_t *)background3, sizeof(background3)},};

(左右移動(dòng)查看全部?jī)?nèi)容)

結(jié)構(gòu)體:每個(gè)背景圖像都作為一個(gè) Background 結(jié)構(gòu)體進(jìn)行存儲(chǔ),該結(jié)構(gòu)體包含:

data:指向 PNG 數(shù)據(jù)的指針。

size:PNG 文件的大小。

數(shù)組:backgrounds 數(shù)組存儲(chǔ)了所有的背景圖像。currentBackground 變量用于追蹤當(dāng)前顯示的背景圖像。

雪花粒子模擬

1. 粒子初始化

void initParticles() { for (int i = 0; i < numParticles; i++) { ? ?particles[i].x = random(0, sprite.width()); ? ?particles[i].y = random(0, sprite.height()); ? ?particles[i].speed = random(3, 8); ?}}

(左右移動(dòng)查看全部?jī)?nèi)容)

它使用隨機(jī)位置和速度來(lái)初始化 numParticles 個(gè)粒子。

2. 粒子更新

void updateParticles() { for (int i = 0; i < numParticles; i++) { ? ?particles[i].speed += random(-1, 2); // 速度變化 ? ?particles[i].speed = constrain(particles[i].speed, 3, 8); ? ?particles[i].y += particles[i].speed; // 向下移動(dòng) ? ?particles[i].x += random(-1, 2); ? ? ?// 風(fēng)效影響 ? ?// 循環(huán)邏輯 ? ?if (particles[i].y > sprite.height()) { particles[i].y = 0; particles[i].x = random(0, sprite.width()); particles[i].speed = random(3, 8); } if (particles[i].x < 0) particles[i].x = sprite.width(); ? ?if (particles[i].x > sprite.width()) particles[i].x = 0; }}

(左右移動(dòng)查看全部?jī)?nèi)容)

通過(guò)以下方式更新粒子位置:

下落效果:每個(gè)粒子向下移動(dòng)。

風(fēng)效影響:添加輕微的水平偏移。

循環(huán)機(jī)制:當(dāng)粒子從底部離開(kāi)時(shí),重置到頂部。

3. 粒子渲染

void renderParticlesToSprite() { for (int i = 0; i < numParticles; i++) { ? ?sprite.fillCircle(particles[i].x, particles[i].y, 2, TFT_WHITE); ?}}

(左右移動(dòng)查看全部?jī)?nèi)容)

它將每個(gè)粒子渲染為一個(gè)小的白色圓圈。

PNG 解碼

int16_t rc = png.openFLASH((uint8_t *)backgrounds[currentBackground].data, backgrounds[currentBackground].size, pngDrawToSprite);if (rc!= PNG_SUCCESS) { Serial.println("Failed to open PNG file!"); return;}png.decode(NULL, 0);

(左右移動(dòng)查看全部?jī)?nèi)容)

使用 png.openFLASH() 函數(shù)加載并解碼當(dāng)前的背景 PNG 圖像。

觸摸交互

if (chsc6x_is_pressed()) { currentBackground = (currentBackground + 1) % numBackgrounds; // 循環(huán)切換背景 delay(300); // 去抖動(dòng)}

(左右移動(dòng)查看全部?jī)?nèi)容)

使用 chsc6x_is_pressed() 檢測(cè)觸摸事件,并通過(guò)遞增 currentBackground 變量來(lái)切換背景圖像。

設(shè)置與循環(huán)

設(shè)置部分:

void setup() { Serial.begin(115200); tft.begin(); tft.fillScreen(TFT_BLACK); sprite.createSprite(240, 240); // 匹配顯示屏尺寸 pinMode(TOUCH_INT, INPUT_PULLUP); Wire.begin(); initParticles();}

(左右移動(dòng)查看全部?jī)?nèi)容)

初始化顯示屏、觸摸輸入以及雪花粒子。

主循環(huán):

void loop() { sprite.fillScreen(TFT_BLACK); // 渲染背景和雪花 int16_t rc = png.openFLASH((uint8_t *)backgrounds[currentBackground].data, backgrounds[currentBackground].size, pngDrawToSprite); if (rc == PNG_SUCCESS) { png.decode(NULL, 0); updateParticles(); renderParticlesToSprite(); sprite.pushSprite(0, 0); } // 處理觸摸輸入 if (chsc6x_is_pressed()) { currentBackground = (currentBackground + 1) % numBackgrounds; delay(300); } delay(10); // 約100幀每秒}

(左右移動(dòng)查看全部?jī)?nèi)容)

清除圖像緩存(sprite),渲染當(dāng)前幀(背景 + 粒子),并檢查用戶輸入。

雙緩沖

為了減少雪花閃爍并提高動(dòng)畫的流暢度,我們使用雙緩沖技術(shù)。

這使得我們能夠在屏幕外的緩沖區(qū)進(jìn)行繪制,然后再將其顯示在屏幕上。

本項(xiàng)目中的雙緩沖

在這個(gè)項(xiàng)目中,TFT_eSPI 庫(kù)的 TFT_eSprite 類實(shí)現(xiàn)了雙緩沖。

1. 圖像緩存(sprite)創(chuàng)建

在 setup() 函數(shù)中創(chuàng)建圖像緩存(屏幕外緩沖區(qū)):

sprite.createSprite(240, 240); // 匹配顯示屏尺寸

(左右移動(dòng)查看全部?jī)?nèi)容)

2. 繪制緩沖區(qū)

所有繪制操作(背景渲染和雪花粒子動(dòng)畫)都在圖像緩存(sprite)上進(jìn)行:

sprite.fillScreen(TFT_BLACK); // 清除圖像緩存renderParticlesToSprite(); // 繪制雪花粒子

(左右移動(dòng)查看全部?jī)?nèi)容)

3. 更新顯示

在圖像緩存中完整繪制完一幀后,通過(guò)一次操作將其推送到顯示屏上:

sprite.pushSprite(0, 0);

(左右移動(dòng)查看全部?jī)?nèi)容)

這會(huì)立即將緩沖區(qū)的內(nèi)容傳輸?shù)狡聊簧稀?/p>

4. 復(fù)用

在循環(huán)開(kāi)始時(shí)清除圖像緩存,以便每一幀都能復(fù)用它:

sprite.fillScreen(TFT_BLACK);

(左右移動(dòng)查看全部?jī)?nèi)容)

使用雙緩沖的優(yōu)勢(shì)

流暢的雪花動(dòng)畫:下落的雪花粒子能夠無(wú)縫更新,不會(huì)出現(xiàn)閃爍現(xiàn)象。

動(dòng)態(tài)背景切換:觸摸觸發(fā)的背景切換能夠在無(wú)可見(jiàn)延遲或瑕疵的情況下完成。

高效渲染:在內(nèi)存(RAM)中進(jìn)行繪制比逐行直接更新顯示屏要快。

總結(jié)

我希望有人能制作一個(gè) 3D 球體,把適用于曉開(kāi)發(fā)板的矽遞科技圓形顯示屏放在里面,然后將其掛在圣誕樹(shù)上。

我也希望修改代碼,使其能從 SD 卡加載圖像,而不是使用閃存數(shù)組來(lái)存儲(chǔ)圖像。

希望你們喜歡這個(gè)項(xiàng)目,為你們的圣誕節(jié)增添一點(diǎn)奇妙氛圍。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 嵌入式
    +關(guān)注

    關(guān)注

    5173

    文章

    19967

    瀏覽量

    324222
  • 顯示屏
    +關(guān)注

    關(guān)注

    29

    文章

    4654

    瀏覽量

    78002
  • 開(kāi)發(fā)板
    +關(guān)注

    關(guān)注

    25

    文章

    5990

    瀏覽量

    109922
  • ESP32
    +關(guān)注

    關(guān)注

    21

    文章

    1042

    瀏覽量

    20278
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    如何用esp32s3實(shí)現(xiàn)驅(qū)動(dòng)rgb顯示屏

    esp32s3實(shí)現(xiàn)驅(qū)動(dòng)rgb顯示屏
    發(fā)表于 06-13 07:36

    開(kāi)源項(xiàng)目!基于ESP32圓形顯示屏互動(dòng)式圣誕雪球

    基于矽遞科技(Seeed Studio)圓形顯示屏互動(dòng)式圣誕雪球,借助互動(dòng)式
    發(fā)表于 12-16 14:24

    esp32cam和圓形顯示屏微雪1.28寸LCD #esp32 #lcd #顯示屏

    顯示屏
    學(xué)習(xí)電子知識(shí)
    發(fā)布于 :2023年06月26日 20:58:49

    互動(dòng)式LED光柱顯示控制系統(tǒng)設(shè)計(jì) 要怎么做出實(shí)物?!

    互動(dòng)式LED光柱顯示控制系統(tǒng)設(shè)計(jì)要怎么做出實(shí)物?!
    發(fā)表于 02-23 19:11

    深入解讀led互動(dòng)地磚的原理與互動(dòng)地磚和常規(guī)顯示屏的區(qū)別

    led互動(dòng)地磚的工作原理,想必業(yè)內(nèi)人士還是比較清楚的,但是對(duì)于用戶來(lái)說(shuō),未免有些模糊,它與傳統(tǒng)的led顯示屏有哪些區(qū)別呢?跟隨這個(gè)疑問(wèn),作為互動(dòng)地磚
    發(fā)表于 06-28 17:07

    ESP32硬定時(shí)器可以用來(lái)掃描HUB75D的LED32*16的顯示屏嗎?

    1,如題:ESP32硬定時(shí)器,可以用來(lái)掃描,HUB75D的LED32*16的顯示屏嗎?2,問(wèn)題,我使用ESP32來(lái)做一個(gè)時(shí)鐘產(chǎn)品,HUB75D的LED32*16的顯示屏,需要用一個(gè)定時(shí)
    發(fā)表于 02-14 07:43

    InfoComm展:互動(dòng)式觸摸走對(duì)了路

    互動(dòng)式標(biāo)牌或?qū)I(yè)顯示器,是與顯示器整合在一起的觸摸模組。這些顯示器主要用于教育領(lǐng)域,充當(dāng)互動(dòng)式
    發(fā)表于 07-01 08:58 ?690次閱讀

    圓形LED顯示屏的詳細(xì)介紹

    圓形是根據(jù)現(xiàn)場(chǎng)和客戶要求定制的一款異形LED顯示屏,進(jìn)行文字、圖片、視頻等信息播放,應(yīng)用在舞臺(tái)、演播室、酒店、機(jī)場(chǎng)、路燈廣告等LED場(chǎng)所,根據(jù)直徑要求,可做成戶外室內(nèi)全彩屏。不同點(diǎn)間距的LED
    發(fā)表于 07-05 11:22 ?4122次閱讀

    基于ESP32構(gòu)建一個(gè)具有3.5英寸大顯示屏的互聯(lián)網(wǎng)廣播設(shè)備

    在這個(gè)項(xiàng)目中,我將使用便宜的 ESP32 板構(gòu)建一個(gè)具有 3.5 英寸大顯示屏的互聯(lián)網(wǎng)廣播設(shè)備。
    發(fā)表于 07-21 17:05 ?3718次閱讀
    基于<b class='flag-5'>ESP32</b>構(gòu)建一個(gè)具有3.5英寸大<b class='flag-5'>顯示屏</b>的互聯(lián)網(wǎng)廣播設(shè)備

    帶有ESP32和OLED顯示屏的Instagram追隨者計(jì)數(shù)器

    電子發(fā)燒友網(wǎng)站提供《帶有ESP32和OLED顯示屏的Instagram追隨者計(jì)數(shù)器.zip》資料免費(fèi)下載
    發(fā)表于 12-14 09:55 ?1次下載
    帶有<b class='flag-5'>ESP32</b>和OLED<b class='flag-5'>顯示屏</b>的Instagram追隨者計(jì)數(shù)器

    帶GPS和OLED顯示屏ESP32開(kāi)發(fā)板

    電子發(fā)燒友網(wǎng)站提供《帶GPS和OLED顯示屏ESP32開(kāi)發(fā)板.zip》資料免費(fèi)下載
    發(fā)表于 12-28 09:43 ?2次下載
    帶GPS和OLED<b class='flag-5'>顯示屏</b>的<b class='flag-5'>ESP32</b>開(kāi)發(fā)板

    帶OLED顯示屏的LoRa節(jié)點(diǎn)和3個(gè)帶ESP32的繼電器

    電子發(fā)燒友網(wǎng)站提供《帶OLED顯示屏的LoRa節(jié)點(diǎn)和3個(gè)帶ESP32的繼電器.zip》資料免費(fèi)下載
    發(fā)表于 12-29 14:03 ?0次下載
    帶OLED<b class='flag-5'>顯示屏</b>的LoRa節(jié)點(diǎn)和3個(gè)帶<b class='flag-5'>ESP32</b>的繼電器

    M5Stack圣誕雪球開(kāi)源分享

    電子發(fā)燒友網(wǎng)站提供《M5Stack圣誕雪球開(kāi)源分享.zip》資料免費(fèi)下載
    發(fā)表于 06-28 10:26 ?0次下載
    M5Stack<b class='flag-5'>圣誕</b><b class='flag-5'>雪球</b>開(kāi)源分享

    淺談LED圓形顯示屏

    LED圓形顯示屏是異形的代表產(chǎn)品,亦被稱為L(zhǎng)ED圓盤或是圓餅,這種根據(jù)
    的頭像 發(fā)表于 07-21 19:20 ?5905次閱讀
    淺談LED<b class='flag-5'>圓形</b><b class='flag-5'>顯示屏</b>

    解析影響開(kāi)合——互動(dòng)式滑軌顯示屏的價(jià)格因素

    因人機(jī)交互的方式在不斷進(jìn)步,其中,最具有互動(dòng)式代表的開(kāi)合,在各個(gè)領(lǐng)域中的應(yīng)用也越來(lái)越廣泛,而其價(jià)格則因品牌、規(guī)格、技術(shù)等多方面因素而異。小編將從開(kāi)合的基本概念、價(jià)格影響因素來(lái)進(jìn)行詳細(xì)講解。 一
    的頭像 發(fā)表于 01-03 14:04 ?929次閱讀