在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

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

ESP32驅(qū)動(dòng)ST7789觸摸屏開(kāi)發(fā)指南:LVGL主題設(shè)置與示波器面板

PCB56242069 ? 來(lái)源:PCB56242069 ? 作者:PCB56242069 ? 2025-04-28 18:07 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

一、項(xiàng)目概述

本文介紹如何使用ESP32微控制器驅(qū)動(dòng)ST7789 TFT液晶屏和XPT2046觸摸芯片,通過(guò)LVGL圖形庫(kù)實(shí)現(xiàn)主題切換功能,并開(kāi)發(fā)一個(gè)實(shí)用的觸摸屏示波器應(yīng)用。項(xiàng)目包含兩大核心功能:

LVGL多主題切換:支持8種不同風(fēng)格的UI主題

示波器功能
模擬/數(shù)字信號(hào)采集、觸摸控制面板、光標(biāo)測(cè)量系統(tǒng)、自動(dòng)頻率檢測(cè)

二、硬件準(zhǔn)備

組件 型號(hào) 說(shuō)明
主控 零知ESP32 雙核240MHz處理器
屏幕 ST7789 2.4寸 240×320分辨率
觸摸芯片 XPT2046 電阻式觸摸控制器
接線 SPI 使用硬件SPI接口

接線圖

wKgZPGgPE5iAVw_4AAWAWieXOA0976.png

三、環(huán)境搭建

1. 安裝庫(kù)

lv_arduino v3.0.1

TFT_eSPI

XPT2046_Touchscreen

2. TFT_eSPI配置(User_Setup.h):

?
?#define ST7789_DRIVER      // Full configuration option, define additional parameters below for this display

#define TFT_WIDTH  240 // ST7789 240 x 240
#define TFT_HEIGHT 320 // ST7789 240 x 320

#define TFT_MISO 19
#define TFT_MOSI 23   
#define TFT_SCLK 18
#define TFT_CS   15  Chip select control pin
#define TFT_DC   2   Data Command control pin
#define TFT_RST  4   Reset pin (could connect to RST pin)

四、核心代碼解析

4.1 LVGL主題設(shè)置

?
// 主題初始化
void setup() {
    lv_test_theme(); // 默認(rèn)主題
    // 可選主題:
    // lv_test_theme_1(lv_theme_night_init(210, NULL));
    // lv_test_theme_1(lv_theme_material_init(210, NULL));
}

// 顯示驅(qū)動(dòng)回調(diào)
void my_disp_flush(lv_disp_drv_t *disp, const lv_area_t *area, lv_color_t *color_p) {
    tft.setAddrWindow(area->x1, area->y1, area->x2, area->y2);
    for(int y=area->y1; y<=area-?>y2; y++){
        for(int x=area->x1; x<=area-?>x2; x++){
            tft.writeColor(color_p->full, 1);
            color_p++;
        }
    }
    lv_disp_flush_ready(disp);
}

4.2 觸摸驅(qū)動(dòng)(帶消抖)

?
bool my_touchpad_read(lv_indev_drv_t *indev, lv_indev_data_t *data) {
    static lv_coord_t last_x = 0, last_y = 0;
    bool is_touched = ts.touched();
    
    if(is_touched){
        TS_Point p = ts.getPoint();
        // 坐標(biāo)轉(zhuǎn)換與校準(zhǔn)
        last_x = map(p.x, cal_x_min, cal_x_max, 0, 320);
        last_y = map(p.y, cal_y_max, cal_y_min, 0, 240);
        
        // 滑動(dòng)檢測(cè)
        if(abs(last_x - prev_x) >5 || abs(last_y - prev_y) >5){
            is_sliding = true;
        }
        
        // 消抖處理
        if(!is_sliding && (millis()-last_touch_time)>CLICK_DEBOUNCE_MS){
            last_touch_time = millis();
        }
    }
    data->point.x = last_x;
    data->point.y = last_y;
    return false;
}

4.3 簡(jiǎn)易示波器核心邏輯

波形采樣:

?
void takeSample() {
    if(!digitalMode){ // 模擬模式
        uint16_t raw = analogRead(ADC_PIN);
        samplesBuffer[sampleIndex] = raw * amplitudeScale;
    }else{ // 數(shù)字模式
        bool state = digitalRead(DIGITAL_PIN);
        samplesBuffer[sampleIndex] = state ? 4095 : 0;
    }
    sampleIndex = (sampleIndex+1) % MAX_SAMPLES;
}

波形繪制:

?
void updateWaveform() {
    waveSprite.fillSprite(BG_COLOR);
    // 繪制網(wǎng)格
    for(int x=0; x

五、觸摸控制面板實(shí)現(xiàn)

?
void create_ui(){
    // 創(chuàng)建選項(xiàng)卡式控制面板
    lv_obj_t *tabview = lv_tabview_create(rightPanel, NULL);
    lv_obj_t *timeTab = lv_tabview_add_tab(tabview, "時(shí)基");
    
    // 時(shí)基選擇滾輪
    lv_obj_t *timebaseRoller = lv_roller_create(timeTab);
    lv_roller_set_options(timebaseRoller, "0.5msn1.0msn2.0ms", LV_ROLLER_MODE_NORMAL);
    
    // 幅度控制滑塊
    lv_obj_t *ampSlider = lv_slider_create(ampTab);
    lv_slider_set_range(ampSlider, 0, 400);
    
    // 模式切換開(kāi)關(guān)
    modeSwitch = lv_switch_create(controlPanel);
    lv_obj_set_event_cb(modeSwitch, mode_switch_event_cb);
}

六、性能優(yōu)化技巧

雙緩沖機(jī)制:使用TFT_eSPI的Sprite功能減少閃爍

異步采樣:在loop()中分離采樣和顯示邏輯

動(dòng)態(tài)刷新:根據(jù)時(shí)基自動(dòng)調(diào)整刷新率

內(nèi)存管理

?
static lv_color_t buf[LV_HOR_RES_MAX * 10]; // LVGL緩沖區(qū)
TFT_eSprite waveSprite = TFT_eSprite(&tft); // 波形緩沖

七、實(shí)測(cè)效果

7.1 LVGL不同主題切換

wKgZPGgPUXGAMURlAEDocwUkdmk964.png

演示視頻:
https://www.bilibili.com/video/BV1CwjAziEKj/?spm_id_from=888.80997.embed_other.whitelist&bvid=BV1CwjAziEKj&vd_source=a31e3d8d8ce008260eee442534c2f63d

7.2示波器觸控界面效果

wKgZO2gPUeWAH6IOAFIlaHG6FZY336.png

演示視頻:
https://www.bilibili.com/video/BV1FxjwzwEyF/?spm_id_from=888.80997.embed_other.whitelist&bvid=BV1FxjwzwEyF&vd_source=a31e3d8d8ce008260eee442534c2f63d

八、常見(jiàn)問(wèn)題解決

觸摸校準(zhǔn)異常

修改cal_x_min/max和cal_y_min/max值

使用校準(zhǔn)例程獲取實(shí)際參數(shù)

LVGL內(nèi)存不足

?// 修改lv_conf.h配置
#define LV_MEM_SIZE (48*1024)
#define LV_DISP_DEF_REFR_PERIOD 30

完整代碼獲取:

Github倉(cāng)庫(kù):https://github.com/Leeri1y/esp32-st7789

百度網(wǎng)盤(pán):https://pan.baidu.com/s/19TVS2PBJpYqExxsannnH3w?pwd=epyd 提取碼: epyd

互動(dòng)交流:歡迎在評(píng)論區(qū)留言討論,遇到問(wèn)題可提交Issues

附錄:關(guān)鍵函數(shù)速查表

函數(shù) 功能 調(diào)用示例
lv_btn_create() 創(chuàng)建按鈕 lv_obj_t * btn = lv_btn_create(parent, NULL);
lv_sw_get_state() 獲取開(kāi)關(guān)狀態(tài) bool state = lv_sw_get_state(sw);
lv_roller_set_options() 設(shè)置滾輪選項(xiàng) lv_roller_set_options(roller, "1n2n3", true);
waveSprite.pushSprite() 刷新顯示 waveSprite.pushSprite(0, 0);
ts.touched() 檢測(cè)觸摸 if(ts.touched()) { ... }

?動(dòng)手實(shí)踐建議

先運(yùn)行基礎(chǔ)顯示示例驗(yàn)證硬件連接

逐步添加功能模塊(先顯示后觸摸)

使用串口監(jiān)視器調(diào)試輸出

保存不同版本的代碼備份

審核編輯 黃宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(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)注

    113

    文章

    6633

    瀏覽量

    188687
  • ESP32
    +關(guān)注

    關(guān)注

    21

    文章

    1012

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

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

    泰克4系列MSO示波器觸摸屏操作、協(xié)議解碼與電源噪聲分析指南

    高速信號(hào)調(diào)試與復(fù)雜系統(tǒng)測(cè)試中的得力助手。本文將詳細(xì)介紹該示波器觸摸屏操作、協(xié)議解碼應(yīng)用及電源噪聲分析的具體方法,幫助用戶高效掌握其核心功能。 ? 一、觸摸屏操作指南:直觀交互與高效控
    的頭像 發(fā)表于 05-30 14:19 ?121次閱讀
    泰克4系列MSO<b class='flag-5'>示波器</b><b class='flag-5'>觸摸屏</b>操作、協(xié)議解碼與電源噪聲分析<b class='flag-5'>指南</b>

    ESP32驅(qū)動(dòng)ST7789觸摸屏開(kāi)發(fā)指南LVGL主題設(shè)置示波器面板

    一、項(xiàng)目概述本文介紹如何使用ESP32微控制器驅(qū)動(dòng)ST7789 TFT液晶和XPT2046觸摸芯片,通過(guò)
    發(fā)表于 04-29 10:20

    示波器觸控界面設(shè)計(jì) #ST7789 #嵌入式

    示波器
    PCB56242069
    發(fā)布于 :2025年04月29日 09:29:20

    LVGL主題切換 #ST7789 #嵌入式開(kāi)發(fā)

    嵌入式開(kāi)發(fā)
    PCB56242069
    發(fā)布于 :2025年04月29日 08:50:04

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

    用一款以圣誕為主題的互動(dòng)式雪球讓節(jié)日氛圍鮮活起來(lái)!項(xiàng)目使用矽遞科技(SeeedStudio)圓形顯示和(XIAO)ESP32S3開(kāi)發(fā)板打造出極具視覺(jué)吸引力的雪景動(dòng)畫(huà),包含動(dòng)態(tài)飄落的雪
    的頭像 發(fā)表于 04-15 11:48 ?385次閱讀
    基于<b class='flag-5'>ESP32</b>的圓形顯示<b class='flag-5'>屏</b>圣誕<b class='flag-5'>主題</b>互動(dòng)式雪球

    st7789軟件包不能添加是怎么回事?

    1、在UI界面上可以看到st7789,但在packages中沒(méi)有。 2、沒(méi)有看到對(duì)應(yīng)的下載信息。 3、在對(duì)應(yīng)github中可以正常下載。 4、RTT版本為5.1.0. 5、類似的ili9341的添加是正常的。
    發(fā)表于 03-20 07:51

    ESP32-P4方案4.3寸IPS觸摸屏強(qiáng)勢(shì)來(lái)襲!支持MIPI CSI攝像頭視覺(jué)擴(kuò)展

    啟明智顯全新推出的ESP32-P44.3寸IPS觸摸屏,搭載強(qiáng)大的雙核400MHzRISC-V處理器,配備32MBPSRAM和16MBFLASH,分辨率800*480,性能和視覺(jué)體驗(yàn)再次突破!核心
    的頭像 發(fā)表于 12-07 01:10 ?1211次閱讀
    <b class='flag-5'>ESP32</b>-P4方案4.3寸IPS<b class='flag-5'>觸摸屏</b>強(qiáng)勢(shì)來(lái)襲!支持MIPI CSI攝像頭視覺(jué)擴(kuò)展

    ESP32-P4方案4.3寸IPS觸摸屏上線!

    啟明智顯全新推出的ESP32-P4 4.3寸IPS觸摸屏,搭載強(qiáng)大的雙核400MHz RISC-V處理器,配備32MB PSRAM和16MB FLASH,分辨率800*480,性能和視覺(jué)體驗(yàn)再次突破!
    的頭像 發(fā)表于 12-06 16:26 ?1230次閱讀
    <b class='flag-5'>ESP32</b>-P4方案4.3寸IPS<b class='flag-5'>觸摸屏</b>上線!

    開(kāi)發(fā)觸摸屏驅(qū)動(dòng)板需要考慮哪些因素

    驅(qū)動(dòng)板是現(xiàn)代電子設(shè)備中不可或缺的一部分,它負(fù)責(zé)將用戶的觸摸操作轉(zhuǎn)化為設(shè)備可以理解的信號(hào)。觸摸屏驅(qū)動(dòng)板需要通過(guò)多個(gè)關(guān)鍵步驟來(lái)實(shí)現(xiàn)其功能,以
    的頭像 發(fā)表于 10-29 14:05 ?1623次閱讀

    LVGL開(kāi)發(fā)指南介紹

    電子發(fā)燒友網(wǎng)站提供《LVGL開(kāi)發(fā)指南介紹.pdf》資料免費(fèi)下載
    發(fā)表于 09-09 10:24 ?20次下載

    esp32用什么軟件編程

    ESP32是一款由樂(lè)鑫(Espressif)推出的低功耗、高性能的Wi-Fi和藍(lán)牙雙模微控制器,廣泛應(yīng)用于物聯(lián)網(wǎng)、智能家居、智能穿戴等領(lǐng)域。要對(duì)ESP32進(jìn)行編程,需要選擇合適的編程軟件和開(kāi)發(fā)環(huán)境
    的頭像 發(fā)表于 08-19 17:24 ?6595次閱讀

    LCD觸摸屏的PCB設(shè)計(jì)

    液晶顯示(LCD)和觸摸屏技術(shù)已經(jīng)成為各種電子設(shè)備的核心組成部分,從智能手機(jī)到電視和醫(yī)療設(shè)備。在這些設(shè)備中,PCB的設(shè)計(jì)對(duì)于LCD和觸摸屏的性能和可靠性至關(guān)重要。下面將討論LCD
    的頭像 發(fā)表于 07-18 11:17 ?3153次閱讀
    LCD<b class='flag-5'>屏</b>和<b class='flag-5'>觸摸屏</b>的PCB設(shè)計(jì)

    啟明智顯Model3A芯片方案7寸高清觸摸屏:開(kāi)箱、設(shè)置與實(shí)操全攻略指南

    一、背景本指南將詳細(xì)介紹啟明智顯的Model3A芯片方案下的7寸高清觸摸屏ZX7D00CM21S的開(kāi)箱步驟、基礎(chǔ)設(shè)置以及實(shí)操應(yīng)用。無(wú)論您是電子愛(ài)好者、開(kāi)發(fā)者還是工程師,這份
    的頭像 發(fā)表于 07-01 16:09 ?1842次閱讀
    啟明智顯Model3A芯片方案7寸高清<b class='flag-5'>觸摸屏</b>:開(kāi)箱、<b class='flag-5'>設(shè)置</b>與實(shí)操全攻略<b class='flag-5'>指南</b>

    觸摸屏和plc的程序怎么編寫(xiě)

    編寫(xiě)觸摸屏和PLC程序是一個(gè)復(fù)雜的過(guò)程,涉及到多個(gè)方面的知識(shí)。 一、觸摸屏和PLC概述 觸摸屏概述 觸摸屏是一種交互式輸入設(shè)備,用戶可以通過(guò)觸摸屏
    的頭像 發(fā)表于 07-01 14:46 ?4717次閱讀

    人機(jī)界面觸摸屏如何觸摸校正屏幕

    人機(jī)界面(Human-Machine Interface,簡(jiǎn)稱HMI)觸摸屏是一種廣泛應(yīng)用于工業(yè)自動(dòng)化、智能家居、醫(yī)療設(shè)備等領(lǐng)域的交互設(shè)備。觸摸屏的校正對(duì)于確保設(shè)備的正常運(yùn)行和提高用戶體驗(yàn)至關(guān)重要
    的頭像 發(fā)表于 07-01 14:36 ?2853次閱讀
    主站蜘蛛池模板: 欧美猛交xxx呻吟 | 欧美综合影院 | 年轻人影院www你懂的 | 日本美女视频网站 | 色激情综合网 | 亚洲黄色第一页 | 亚洲日本欧美日韩高观看 | 69pao强力打造在线 | 天天操天天做 | 婷婷丁香激情五月 | 久青草国产手机在线视频 | 成人a在线观看 | 欧美大色网 | 香蕉视频在线观看国产 | 噜噜色噜噜 | 99久久99久久免费精品蜜桃 | 午夜美女网站 | 免费观看片 | 性欧美欧美之巨大69 | 拍拍拍无档又黄又爽视频 | 欧美性白人极品1819hd | xx日本69| 李老汉和小花的性生生活 | 天天舔天天干天天操 | 精品国内视频 | 亚洲第一区精品日韩在线播放 | 在线视频永久在线视频 | 一久久| h视频免费高清在线观看 | 国产视频日本 | 视频在线h | 亚洲va久久久久综合 | 手机看片福利日韩 | 欧美女同在线观看 | 国产免费一区二区三区 | 手机看片1024国产基地 | 欧美成网 | 一区二区三区四区无限乱码在线观看 | 国产普通话一二三道 | 亚洲国产成人在人网站天堂 | 中文字幕欧美日韩 |