91在线观看视频-91在线观看视频-91在线观看免费视频-91在线观看免费-欧美第二页-欧美第1页

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

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

3天內不再提示

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

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

掃碼添加小助手

加入工程師交流群



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

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

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

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

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

開發特點:

動態雪景動畫:模擬飄落的雪花顆粒,其速度和風效均可調節。

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

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

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

你將學到的內容:

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

利用 TFT_eSPI 庫實現雙緩沖以呈現流暢動畫。

使用 lv_xiao_round_screen 庫處理觸摸輸入。

模擬粒子效果以實現逼真的雪景動畫。

環境準備

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

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

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

PNGdec 庫。

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

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

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

準備圖像

調整圖像大小,我們的XIAO開發板圓形顯示屏分辨率為 240×240。我們需要對圖像進行尺寸調整。下面我將展示如何使用 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

現在圖像已經準備好了,讓我們來創建閃存數組吧。

創建閃存數組

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

創建數組的步驟如下:

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

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

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

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

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

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

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

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

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

5、現在你可以按下 “另存為文件” 按鈕來保存你的圖像,并將其添加到你的 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"

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

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

背景圖像以下是管理背景圖像的函數:

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

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

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

data:指向 PNG 數據的指針。

size:PNG 文件的大小。

數組:backgrounds 數組存儲了所有的背景圖像。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); ?}}

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

它使用隨機位置和速度來初始化 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); ? ? ?// 風效影響 ? ?// 循環邏輯 ? ?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; }}

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

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

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

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

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

3. 粒子渲染

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

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

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

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

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

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

觸摸交互

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

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

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

設置與循環

設置部分:

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

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

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

主循環:

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幀每秒}

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

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

雙緩沖

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

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

本項目中的雙緩沖

在這個項目中,TFT_eSPI 庫的 TFT_eSprite 類實現了雙緩沖。

1. 圖像緩存(sprite)創建

在 setup() 函數中創建圖像緩存(屏幕外緩沖區):

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

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

2. 繪制緩沖區

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

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

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

3. 更新顯示

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

sprite.pushSprite(0, 0);

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

這會立即將緩沖區的內容傳輸到屏幕上。

4. 復用

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

sprite.fillScreen(TFT_BLACK);

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

使用雙緩沖的優勢

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

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

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

總結

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

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

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

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

    關注

    5152

    文章

    19675

    瀏覽量

    317636
  • 顯示屏
    +關注

    關注

    28

    文章

    4605

    瀏覽量

    76422
  • 開發板
    +關注

    關注

    25

    文章

    5682

    瀏覽量

    104816
  • ESP32
    +關注

    關注

    21

    文章

    1017

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    如何用esp32s3實現驅動rgb顯示屏

    esp32s3實現驅動rgb顯示屏
    發表于 06-13 07:36

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

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

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

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

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

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

    深入解讀led互動地磚的原理與互動地磚和常規顯示屏的區別

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

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

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

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

    互動式標牌或專業顯示器,是與顯示器整合在一起的觸摸模組。這些顯示器主要用于教育領域,充當互動式
    發表于 07-01 08:58 ?652次閱讀

    圓形LED顯示屏的詳細介紹

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

    基于ESP32構建一個具有3.5英寸大顯示屏的互聯網廣播設備

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

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

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

    帶GPS和OLED顯示屏ESP32開發板

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

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

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

    M5Stack圣誕雪球開源分享

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

    淺談LED圓形顯示屏

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

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

    因人機交互的方式在不斷進步,其中,最具有互動式代表的開合,在各個領域中的應用也越來越廣泛,而其價格則因品牌、規格、技術等多方面因素而異。小編將從開合的基本概念、價格影響因素來進行詳細講解。 一
    的頭像 發表于 01-03 14:04 ?762次閱讀
    主站蜘蛛池模板: 特黄特色大片免费播放器9 特黄特色大片免费视频播放 | 日韩色网 | 一女被两男吃奶玩乳尖口述 | qyule亚洲精品 | 国产人成午夜免视频网站 | 天天操狠狠操夜夜操 | 亚洲国产tv| 日本在线视频一区二区 | 日本最好的免费影院 | 国产婷婷色一区二区三区深爱网 | 羞羞色院91精品网站 | 色综合视频在线观看 | 国产农村一一级特黄毛片 | 亚洲情a成黄在线观看 | 久久aa毛片免费播放嗯啊 | 欧美午夜视频一区二区三区 | 噜噜嘿| 91md天美精东蜜桃传媒在线 | 黄色的视频在线免费观看 | 亚洲综合激情丁香六月 | 欧美伦理一区 | 色综合激情 | 毛片官网 | 国内91视频 | 男啪女色黄无遮挡免费视频 | 久久久噜久噜久久综合 | 日本三级香港三级三级人!妇久 | 免费日韩毛片 | 日本特级黄色大片 | 国产精品一区二区三 | 四级毛片在线播放 | 99精品在免费线视频 | 天天看夜夜操 | 四虎在线视频观看 | 国产深夜福利在线观看网站 | 天堂在线观看中文字幕 | 一本大道高清在线视频 视频 | 手机看片1024免费视频 | japan日韩xxxx69hd jdav视频在线观看 | avtt加勒比手机版天堂网 | www.色.con|