女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

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

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

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

基于ESP32的圓形顯示屏圣誕主題互動式雪球

電子發(fā)燒友論壇 ? 2025-04-15 11:48 ? 次閱讀



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

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

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

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

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

開發(fā)特點:

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

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

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

可定制背景:輕松添加自己的 PNG 圖像,對雪球進行個性化設置。

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

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

利用 TFT_eSPI 庫實現(xiàn)雙緩沖以呈現(xiàn)流暢動畫。

使用 lv_xiao_round_screen 庫處理觸摸輸入。

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

環(huán)境準備

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

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

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

PNGdec 庫。

更新 LVGL 庫(或者不安裝來自矽遞科技 GitHub 的那個版本)

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

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

準備圖像

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

1.打開圖像

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

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

3.將寬度和高度都設置為 240。由于 “保持比例” 選項(鏈條圖標所示)已被選中,一旦你更改了寬度,高度也會相應地改變。

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

4.點擊 “縮放” 按鈕。

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

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

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

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

注意:這些操作說明包含在 TFT_eSPI 庫的 Flash_PNG 示例當中。要創(chuàng)建閃存數(shù)組,進入 “文件轉 C 語言風格數(shù)組轉換器”。

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

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

2、我們需要設置一些選項

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

所有其他選項都會變灰(即不可用、無法進行設置操作)。

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

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

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

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

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

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

如果你選擇 “復制到剪貼板”,那么你需要點擊 Arduino 編輯器右側的三個點(省略號圖標),然后選擇 “新建標簽頁”。

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

給它取個名字(一般來說是你的圖像名加上.h 擴展名)。

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

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

代碼

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

頭文件與庫

我們首先引入一些庫:

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

(左右移動查看全部內(nèi)容)

請記住,你需要安裝矽遞科技(Seeed Studio)相關的庫。

背景圖像以下是管理背景圖像的函數(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)},};

(左右移動查看全部內(nèi)容)

結構體:每個背景圖像都作為一個 Background 結構體進行存儲,該結構體包含:

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

size:PNG 文件的大小。

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

雪花粒子模擬

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); ?}}

(左右移動查看全部內(nèi)容)

它使用隨機位置和速度來初始化 numParticles 個粒子。

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; // 向下移動 ? ?particles[i].x += random(-1, 2); ? ? ?// 風效影響 ? ?// 循環(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; }}

(左右移動查看全部內(nèi)容)

通過以下方式更新粒子位置:

下落效果:每個粒子向下移動。

風效影響:添加輕微的水平偏移。

循環(huán)機制:當粒子從底部離開時,重置到頂部。

3. 粒子渲染

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

(左右移動查看全部內(nèi)容)

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

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);

(左右移動查看全部內(nèi)容)

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

觸摸交互

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

(左右移動查看全部內(nèi)容)

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

設置與循環(huán)

設置部分:

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

(左右移動查看全部內(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幀每秒}

(左右移動查看全部內(nèi)容)

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

雙緩沖

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

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

本項目中的雙緩沖

在這個項目中,TFT_eSPI 庫的 TFT_eSprite 類實現(xiàn)了雙緩沖。

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

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

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

(左右移動查看全部內(nèi)容)

2. 繪制緩沖區(qū)

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

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

(左右移動查看全部內(nèi)容)

3. 更新顯示

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

sprite.pushSprite(0, 0);

(左右移動查看全部內(nèi)容)

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

4. 復用

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

sprite.fillScreen(TFT_BLACK);

(左右移動查看全部內(nèi)容)

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

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

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

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

總結

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

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

希望你們喜歡這個項目,為你們的圣誕節(jié)增添一點奇妙氛圍。

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

    關注

    5141

    文章

    19540

    瀏覽量

    315150
  • 顯示屏
    +關注

    關注

    28

    文章

    4575

    瀏覽量

    75939
  • 開發(fā)板
    +關注

    關注

    25

    文章

    5532

    瀏覽量

    102447
  • ESP32
    +關注

    關注

    20

    文章

    1007

    瀏覽量

    18852
收藏 人收藏

    評論

    相關推薦
    熱點推薦

    如何用esp32s3實現(xiàn)驅(qū)動rgb顯示屏

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

    開源項目!基于ESP32圓形顯示屏互動式圣誕雪球

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

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

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

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

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

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

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

    ESP32硬定時器可以用來掃描HUB75D的LED32*16的顯示屏嗎?

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

    InfoComm展:互動式觸摸走對了路

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

    圓形LED顯示屏的詳細介紹

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

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

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

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

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

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

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

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

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

    M5Stack圣誕雪球開源分享

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

    淺談LED圓形顯示屏

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

    解析影響開合——互動式滑軌顯示屏的價格因素

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