ESP32-C6驅(qū)動TFT屏幕:從Arduino環(huán)境搭建到圖形界面開發(fā)實戰(zhàn)
1. 開箱與初識FireBeetle 2 Board ESP32 C6的硬件魅力拿到一塊新的開發(fā)板就像拿到一個新玩具總想第一時間點亮它看看里面藏著什么驚喜。這次的主角是DFRobot的FireBeetle 2 Board ESP32 C6。對于熟悉ESP32系列的朋友來說C6這個后綴可能有點陌生它其實是樂鑫在ESP32-C3基礎(chǔ)上融合了Wi-Fi 6和藍牙5.0LE的新一代RISC-V內(nèi)核芯片。而FireBeetle 2 Board作為它的載體設(shè)計上延續(xù)了DFRobot一貫的緊湊和實用風格。拆開包裝板子比想象中更小巧精致。正面最顯眼的是那塊彩色的TFT屏幕接口這是一個FPC連接器專門用來接插那種帶驅(qū)動芯片的SPI TFT屏省去了你自己飛線接一堆IO口的麻煩對新手和快速原型開發(fā)非常友好。板載的Type-C接口現(xiàn)在是標配了供電和編程一體旁邊還有一個物理復(fù)位按鍵和一個用戶自定義按鍵BOOT。翻到背面能看到板載的天線以及一些測試點。我特別留意了一下電源部分FireBeetle 2 Board支持3.3V~5V的寬電壓輸入這意味著你可以用常見的USB充電器、移動電源或者鋰電池給它供電靈活性很高。對于第一次接觸這塊板子的朋友有幾個硬件細節(jié)值得注意。首先它的核心ESP32-C6芯片是一顆32位的RISC-V單核處理器主頻高達160MHz性能對于物聯(lián)網(wǎng)設(shè)備和帶屏應(yīng)用來說是綽綽有余的。其次它支持Wi-Fi 6802.11ax和藍牙5.0 LE在無線連接的速率、功耗和抗干擾能力上比老款的ESP32有顯著提升這對于需要穩(wěn)定傳輸數(shù)據(jù)或者低功耗待機的項目來說是個大利好。最后也是我們這篇文章的重點那個TFT屏幕接口。它通常對應(yīng)板子上一組固定的SPI引腳如SCK, MOSI, DC, CS, RST這意味著在軟件層面我們不需要再去糾結(jié)引腳映射庫文件通常會為我們處理好大大降低了入門門檻。那么為什么選擇Arduino來作為初體驗的環(huán)境呢原因很簡單生態(tài)成熟、上手快。雖然ESP-IDF是樂鑫官方的開發(fā)框架功能更強大也更底層但對于快速驗證硬件、實現(xiàn)一個“點亮屏幕”這樣的基礎(chǔ)功能來說Arduino IDE及其龐大的庫生態(tài)無疑是更友好的選擇。你不需要去配置復(fù)雜的編譯鏈不需要深入理解FreeRTOS只需要安裝好板卡支持包找到合適的屏幕驅(qū)動庫寫幾十行代碼就能看到成果這種即時反饋對保持學習熱情至關(guān)重要。接下來我們就從零開始搭建這個能讓屏幕亮起來的環(huán)境。2. 環(huán)境搭建為ESP32 C6配置Arduino IDE工欲善其事必先利其器。要讓Arduino IDE認識我們這塊FireBeetle 2 Board ESP32 C6第一步就是安裝對應(yīng)的板卡支持包。打開Arduino IDE我使用的是2.3.x版本1.8.x版本步驟類似點擊“文件”-“首選項”。在“附加開發(fā)板管理器網(wǎng)址”一欄我們需要添加樂鑫的板卡支持包地址。如果你之前玩過ESP32這里可能已經(jīng)有其他地址了沒關(guān)系可以同時存在。對于ESP32-C6我們需要添加這個URLhttps://espressif.github.io/arduino-esp32/package_esp32_index.json。添加完成后點擊“好”保存。接下來打開“工具”-“開發(fā)板”-“開發(fā)板管理器”。在頂部的搜索框中輸入“esp32”。在搜索結(jié)果里你應(yīng)該能看到由“Espressif Systems”發(fā)布的“esp32”平臺。注意這里顯示的版本號很重要。由于ESP32-C6是比較新的芯片你需要確保安裝的版本足夠新建議不低于3.0.0。點擊“安裝”按鈕IDE就會開始下載并安裝整個ESP32系列的開發(fā)包這個過程需要一些時間取決于你的網(wǎng)絡(luò)速度。安裝完成后關(guān)閉開發(fā)板管理器?,F(xiàn)在再次點擊“工具”-“開發(fā)板”你應(yīng)該能在列表里找到一個名為“ESP32 Arduino”的分類展開它我們需要找到我們的具體板型。FireBeetle 2 Board ESP32 C6可能不會直接出現(xiàn)在列表里這是很常見的情況。通常我們可以選擇一個引腳定義和功能最接近的通用板型。對于ESP32-C6一個可靠的選擇是“ESP32-C6-DevKitC-1”。選擇它因為大多數(shù)C6開發(fā)板的通用引腳定義是相似的FireBeetle 2 Board也基本兼容。注意如果后續(xù)編譯或上傳時出現(xiàn)與分區(qū)表Partition Table相關(guān)的錯誤你可能需要在“工具”菜單下找到“Partition Scheme”并嘗試選擇不同的方案例如“Huge APP”來獲得更大的程序空間。板子選好后我們還需要配置兩個關(guān)鍵參數(shù)“Upload Speed”和“Flash Frequency”。為了獲得更穩(wěn)定可靠的上傳體驗建議將“Upload Speed”設(shè)置為“921600”“Flash Frequency”設(shè)置為“80MHz”。端口Port的選擇要等到你用USB線將板子連接到電腦之后系統(tǒng)會自動識別出一個新的串口在Windows設(shè)備管理器中顯示為COMx在macOS/Linux下顯示為/dev/cu.usbserial-xxx在Arduino IDE中選擇它即可。環(huán)境配置的最后一步是安裝TFT屏幕的驅(qū)動庫。我們將使用一個非常流行且強大的庫TFT_eSPI。這個庫支持眾多基于SPI和并行接口的TFT屏幕并且通過配置文件來適配不同的板和屏幕非常靈活。在Arduino IDE中點擊“項目”-“加載庫”-“管理庫”打開庫管理器。搜索“TFT_eSPI”找到由Bodmer開發(fā)的版本并安裝。安裝完成后我們還需要對其進行配置這是讓庫認識我們硬件組合的關(guān)鍵一步我們留到下一節(jié)詳細展開。3. 核心環(huán)節(jié)配置TFT_eSPI庫與硬件連接庫安裝好了但還不能直接用。TFT_eSPI庫的精髓在于它的用戶配置文件。它本身帶有一大堆針對不同開發(fā)板和屏幕的預(yù)定義設(shè)置但我們的FireBeetle 2 Board ESP32 C6加上你的特定屏幕很可能不在默認列表里。這就需要我們手動配置。首先找到TFT_eSPI庫的安裝目錄。在Arduino IDE中你可以通過“文件”-“首選項”查看“項目文件夾位置”庫通常就安裝在其中的libraries文件夾里。找到TFT_eSPI文件夾里面有一個名為User_Setup.h的文件。不過更推薦的做法是不要直接修改這個文件而是在同一目錄下找到User_Setup_Select.h文件。打開User_Setup_Select.h你會看到很多被注釋掉的#include語句每一行都對應(yīng)一種特定的開發(fā)板或屏幕組合。我們的任務(wù)是在文件的末尾或者任意一個未被使用的區(qū)域添加我們自己的配置。但更簡單的方法是直接啟用一個最接近的配置然后根據(jù)需要進行微調(diào)。例如我們可以先嘗試啟用針對ESP32和通用SPI屏幕的配置。找到類似下面這行可能行號不同//#include User_Setups/Setup25_TTGO_T_Display.h // Setup file for ESP32 and TTGO T-Display ST7789V SPI bus TFT復(fù)制一份并取消其注釋同時修改引用為我們自己的設(shè)置文件。但為了清晰起見我建議新建一個文件。在TFT_eSPI庫目錄下有一個User_Setups文件夾。我們可以復(fù)制里面任何一個現(xiàn)有的.h文件例如Setup1_GC9A01.h重命名為Setup_FireBeetle2_C6.h然后打開它進行編輯。這個文件里的內(nèi)容決定了庫如何驅(qū)動你的屏幕。你需要修改的關(guān)鍵部分如下定義驅(qū)動芯片根據(jù)你的TFT屏驅(qū)動芯片來修改。常見的1.14寸、1.3寸SPI屏很多使用ST7789或ST7735。你需要查看屏幕的產(chǎn)品說明書或背面小芯片上的型號。假設(shè)你的屏幕是ST7789那么就需要確保有#define ST7789_DRIVER這一行并且注釋掉其他不相關(guān)的驅(qū)動定義。定義屏幕尺寸設(shè)置你屏幕的分辨率例如240x240的正方形屏或240x135的長方形屏。#define TFT_WIDTH 240 #define TFT_HEIGHT 240定義引腳這是最關(guān)鍵的一步。你需要將庫里的引腳定義映射到FireBeetle 2 Board ESP32 C6的實際引腳上。通常板載的TFT接口已經(jīng)固定連接到了ESP32-C6的某些GPIO。你需要查閱FireBeetle 2 Board的官方原理圖或引腳定義圖。假設(shè)其連接如下請務(wù)必以你的實際板子資料為準此處為示例TFT_SCK - GPIO 6TFT_MOSI - GPIO 7TFT_CS - GPIO 10TFT_DC - GPIO 11TFT_RST - GPIO 12TFT_BL - GPIO 13 (背光控制如果有的話)那么在配置文件中就應(yīng)該這樣定義#define TFT_CS 10 // Chip select control pin #define TFT_DC 11 // Data Command control pin #define TFT_RST 12 // Reset pin (could connect to Arduino RESET pin if you don’t have a spare) #define TFT_BL 13 // LED back-light control pin #define TFT_SCLK 6 // SPI clock pin #define TFT_MOSI 7 // SPI Data input pin // MISO引腳對于純輸出的屏幕通常不需要定義除非你要讀屏幕狀態(tài)。定義SPI頻率可以設(shè)置SPI通信的速度更高的速度意味著更快的刷新率但可能受屏幕和布線質(zhì)量限制。可以從#define SPI_FREQUENCY 27000000開始嘗試。其他設(shè)置如顏色順序TFT_RGB_ORDER、是否使用硬件SPIUSE_HSPI_PORT等通??梢韵缺3帜J或根據(jù)屏幕規(guī)格書調(diào)整。配置文件修改保存后回到User_Setup_Select.h文件在末尾添加一行來包含我們自己的配置#include User_Setups/Setup_FireBeetle2_C6.h并確保其他所有的#include User_Setups/Setup...都被注釋掉了只保留我們剛添加的這一行。硬件連接反而簡單了。因為使用的是板載的FPC接口你只需要將TFT屏幕的排線按照正確的方向通常屏幕排線金手指一面朝向板子外側(cè)插入插座然后鎖緊卡扣即可。確保連接牢固接觸不良是導(dǎo)致白屏、花屏最常見的原因。如果屏幕有獨立的背光供電引腳也需要根據(jù)板子設(shè)計決定是否需要額外連接。4. 編寫首個測試程序從“Hello World”到圖形繪制環(huán)境配好了線接好了現(xiàn)在讓我們寫代碼讓屏幕活過來。打開Arduino IDE新建一個草圖。首先我們需要包含必要的頭文件并創(chuàng)建屏幕對象。#include TFT_eSPI.h // 包含圖形和字體功能庫 TFT_eSPI tft TFT_eSPI(); // 創(chuàng)建TFT對象在setup()函數(shù)中我們需要初始化屏幕。這個過程通常包括初始化SPI、重置屏幕、設(shè)置屏幕方向等。void setup() { Serial.begin(115200); // 初始化串口方便調(diào)試輸出 Serial.println(FireBeetle 2 ESP32-C6 TFT Test); tft.init(); // 初始化屏幕 tft.setRotation(1); // 設(shè)置屏幕方向 (0-3)根據(jù)你的安裝方式調(diào)整 tft.fillScreen(TFT_BLACK); // 清屏為黑色 // 如果屏幕有背光控制引腳并且你在配置文件中定義了TFT_BL可以在這里打開背光 // pinMode(TFT_BL, OUTPUT); // digitalWrite(TFT_BL, HIGH); }接下來在loop()函數(shù)里我們就可以盡情地在屏幕上繪制內(nèi)容了。讓我們從一個經(jīng)典的“Hello World”文本開始。void loop() { // 1. 顯示文本 tft.setTextColor(TFT_WHITE, TFT_BLACK); // 設(shè)置文本顏色前景色和背景色 tft.setTextSize(2); // 設(shè)置文本大小1是最小 tft.setCursor(10, 10); // 設(shè)置文本起始坐標 (x, y) tft.println(Hello FireBeetle!); // 2. 畫一些圖形 delay(1000); tft.fillScreen(TFT_BLACK); // 清屏 // 畫一個紅色的矩形 tft.fillRect(20, 20, 80, 60, TFT_RED); // 畫一個綠色的圓角矩形邊框 tft.drawRoundRect(120, 20, 80, 60, 10, TFT_GREEN); // 畫一條藍色的線 tft.drawLine(20, 100, 200, 100, TFT_BLUE); // 畫一個黃色的圓 tft.fillCircle(60, 150, 20, TFT_YELLOW); // 畫一個粉色的三角形 tft.fillTriangle(140, 130, 160, 180, 120, 180, TFT_PINK); // 3. 顯示不同大小的文字 tft.setTextColor(TFT_CYAN); tft.setCursor(10, 200); tft.setTextSize(1); tft.println(Size 1); tft.setTextSize(2); tft.println(Size 2); tft.setTextSize(3); tft.println(Size 3); delay(3000); // 等待3秒 tft.fillScreen(TFT_BLACK); // 再次清屏準備下一次循環(huán) }將代碼上傳到你的FireBeetle 2 Board。點擊上傳按鈕后Arduino IDE會先編譯代碼然后通過串口將程序燒錄到板子的Flash中。上傳成功后板子會自動復(fù)位運行。如果你的配置和連接都正確你應(yīng)該能看到屏幕先顯示“Hello FireBeetle!”然后清屏接著依次畫出紅色矩形、綠色圓角矩形框、藍色橫線、黃色實心圓和粉色三角形最后在底部顯示三行不同大小的文字。提示如果上傳失敗首先檢查端口是否選擇正確其次檢查開發(fā)板類型是否選對ESP32-C6-DevKitC-1。如果編譯失敗很可能是TFT_eSPI庫的配置文件有語法錯誤或者引腳定義沖突請仔細檢查Setup_FireBeetle2_C6.h文件中的每一行。這個簡單的測試程序驗證了幾個關(guān)鍵點屏幕驅(qū)動初始化成功、SPI通信正常、圖形和文本基礎(chǔ)API工作正常。你可能已經(jīng)注意到刷新復(fù)雜的圖形時屏幕會有明顯的刷新過程這是因為SPI接口的速度和屏幕內(nèi)部GRAM更新需要時間。在后續(xù)的深入使用中我們可以通過局部刷新、雙緩沖如果芯片RAM足夠等技巧來優(yōu)化顯示流暢度。5. 問題排查與性能初探當屏幕沒有如約亮起第一次嘗試屏幕沒有亮起或者顯示異常這太正常了。別慌我們按步驟來排查。首先確保最基本的物理連接USB線是否插緊Type-C口有沒有松動屏幕排線是否完全插入卡槽并被鎖扣固定背光是否需要額外供電有些屏幕的背光和邏輯電源是分開的如果連接無誤接下來就是軟件層面。第一步打開Arduino IDE的串口監(jiān)視器工具-串口監(jiān)視器設(shè)置波特率為115200。在setup()函數(shù)里我們加了Serial.begin(115200)和打印語句。重新上傳程序后觀察串口監(jiān)視器。如果能看到“FireBeetle 2 ESP32-C6 TFT Test”這行輸出說明芯片本身是好的程序在運行。如果看不到那問題可能出在板卡選擇、上傳端口或者更基礎(chǔ)的Bootloader上。如果串口有輸出但屏幕是白屏、花屏或者完全沒反應(yīng)那么問題幾乎可以肯定出在TFT_eSPI的配置上。請按以下清單逐一核對驅(qū)動芯片型號這是頭號殺手。你的屏幕到底是ST7789、ST7735、ILI9341還是其他買屏幕時的商品頁面、屏幕背面貼的標簽或者驅(qū)動芯片本身上的絲印是唯一權(quán)威的信息源。配錯了驅(qū)動屏幕肯定無法正常初始化。引腳定義這是二號殺手。FireBeetle 2 Board的TFT接口到底對應(yīng)哪幾個GPIO你必須找到官方文檔或原理圖。絕對不能想當然。常見的錯誤是把ESP32的Dx編號如D1 D2和實際的GPIO編號如GPIO1 GPIO2混淆。在Arduino環(huán)境下我們使用的數(shù)字就是GPIO編號。SPI頻率初始測試時可以嘗試把SPI_FREQUENCY設(shè)低一點比如2000000020MHz排除因布線或屏幕體質(zhì)導(dǎo)致的高速通信不穩(wěn)定。電源屏幕工作時需要一定的電流。雖然ESP32-C6的3.3V引腳可以提供一些電流但如果屏幕功耗較大尤其是點亮背光時可能會導(dǎo)致電壓被拉低使得芯片和屏幕工作不穩(wěn)定。嘗試用外部穩(wěn)定的3.3V電源同時給板子和屏幕供電測試。復(fù)位時序有些屏幕對復(fù)位信號RST的時序要求比較嚴格。在配置文件中可以嘗試取消TFT_RST的定義注釋掉#define TFT_RST然后將屏幕的RST引腳直接連接到板子的RESET引腳讓板子和屏幕同時上電復(fù)位?;蛘咴趕etup()里手動控制一下復(fù)位引腳pinMode(TFT_RST, OUTPUT); digitalWrite(TFT_RST, LOW); delay(50); digitalWrite(TFT_RST, HIGH); delay(150); // 等待屏幕復(fù)位完成 tft.init();解決了顯示問題我們可以簡單感受一下ESP32-C6的性能。嘗試在loop()里快速連續(xù)地畫很多小圖形或滾動文字觀察刷新速度。你可以用millis()函數(shù)來計算繪制一幀所需的時間。由于我們使用的是軟件SPI模擬除非你配置了硬件SPI端口并且TFT_eSPI庫本身為了兼容性做了很多抽象其速度可能無法完全發(fā)揮硬件潛力。但對于顯示UI、圖表、傳感器數(shù)據(jù)等應(yīng)用這個性能已經(jīng)足夠。一個常見的性能瓶頸是fillScreen()它需要更新整個屏幕的GRAM耗時較長。在需要頻繁更新的場景下應(yīng)盡量避免全屏清空而是只更新需要改變的區(qū)域。例如要更新一個數(shù)字可以先在舊數(shù)字的位置用背景色畫一個矩形覆蓋再畫上新數(shù)字而不是每次都fillScreen()。6. 深入功能探索觸摸、字體與動畫基礎(chǔ)顯示搞定后我們可以玩點更高級的。很多SPI TFT屏還集成了觸摸功能通常是電阻屏或電容屏通過額外的XPT2046或FT6236等芯片。如果你的屏幕帶觸摸那么恭喜你可玩性又上了一個臺階。首先你需要確認觸摸芯片型號并在TFT_eSPI的配置文件中啟用對應(yīng)的驅(qū)動。例如對于XPT2046電阻觸摸芯片你需要定義TOUCH_CS引腳并確保有#define XPT2046_DRIVER。然后庫會提供getTouch()之類的函數(shù)來獲取觸摸坐標。你可以編寫代碼來檢測觸摸事件并在觸摸點畫一個小點或?qū)崿F(xiàn)簡單的按鈕交互。#include TFT_eSPI.h #include SPI.h TFT_eSPI tft TFT_eSPI(); uint16_t x, y; void setup() { tft.init(); tft.setRotation(1); tft.fillScreen(TFT_BLACK); tft.setTextColor(TFT_WHITE); tft.setTextSize(2); } void loop() { // 檢測觸摸 bool touched tft.getTouch(x, y); if (touched) { Serial.printf(Touch: (%d, %d)\n, x, y); // 在觸摸點畫一個白色小圓 tft.fillCircle(x, y, 5, TFT_WHITE); } delay(20); // 降低檢測頻率 }其次是字體。TFT_eSPI庫支持顯示自定義的矢量字體這能讓你的界面瞬間變得專業(yè)。你需要先將.vlw格式的字體文件放入項目文件夾或Arduino的libraries目錄下的某個指定位置。然后在代碼中加載并使用它#include TFT_eSPI.h #include “my_font.vlw.h” // 假設(shè)你生成了字體文件并包含進來 // 實際上更常用的方法是使用庫的字體加載函數(shù)這里簡化說明 tft.loadFont(my_font); // 加載字體 tft.setTextColor(TFT_WHITE); tft.setCursor(10, 50); tft.println(“Custom Font!”); tft.unloadFont(); // 使用后卸載以釋放內(nèi)存生成.vlw字體文件可以使用Arduino IDE的“工具”-“創(chuàng)建字模”功能或者一些在線工具。注意中文字體文件會非常大需要謹慎選擇字號和字符集否則會耗盡ESP32-C6的寶貴內(nèi)存。最后是動畫?;趌oop()函數(shù)和delay()可以實現(xiàn)簡單的動畫但這不是最佳實踐因為delay()會阻塞整個程序。更好的方法是使用狀態(tài)機和基于時間的非阻塞控制。例如實現(xiàn)一個平滑移動的小球int ballX 10; int ballY 10; int ballVx 2; int ballVy 1; unsigned long previousMillis 0; const long interval 16; // 約60FPS void loop() { unsigned long currentMillis millis(); if (currentMillis - previousMillis interval) { previousMillis currentMillis; // 清除上一幀的小球用背景色畫一個圓 tft.fillCircle(ballX, ballY, 10, TFT_BLACK); // 更新小球位置 ballX ballVx; ballY ballVy; // 邊界碰撞檢測 if (ballX 10 || ballX 230) ballVx -ballVx; if (ballY 10 || ballY 230) ballVy -ballVy; // 繪制新位置的小球 tft.fillCircle(ballX, ballY, 10, TFT_BLUE); } // 這里可以執(zhí)行其他任務(wù)不會被delay阻塞 }這種方法讓CPU在等待下一次重繪的間隙可以處理其他任務(wù)比如讀取傳感器、響應(yīng)網(wǎng)絡(luò)請求等是實現(xiàn)復(fù)雜、響應(yīng)式項目的基礎(chǔ)。7. 項目構(gòu)思與資源指引從點亮到創(chuàng)造至此你已經(jīng)成功點亮了FireBeetle 2 Board ESP32 C6上的TFT屏幕并掌握了繪圖、文本、觸摸甚至動畫的基礎(chǔ)。這塊板子的潛力遠不止于此。結(jié)合ESP32-C6的Wi-Fi 6和藍牙5.0你可以輕松打造聯(lián)網(wǎng)的顯示設(shè)備。一個簡單的想法是網(wǎng)絡(luò)天氣站讓板子連接家里的Wi-Fi定期從天氣API如OpenWeatherMap獲取數(shù)據(jù)然后在TFT屏幕上以美觀的格式顯示溫度、濕度、天氣圖標和預(yù)報。這涉及到HTTP請求、JSON解析和UI布局是一個綜合性的小項目。另一個方向是藍牙信息顯示器將板子作為藍牙外設(shè)讓你的手機通過藍牙向其發(fā)送文字或圖片并顯示在屏幕上。可以做一個簡單的藍牙遙控留言板。對于更復(fù)雜的圖形界面你可以探索LVGL這個開源圖形庫。它有Arduino的移植版本提供了按鈕、滑塊、圖表、列表等豐富的控件可以構(gòu)建出類似智能手機應(yīng)用的交互界面。不過LVGL對內(nèi)存和性能的要求更高需要更精細的優(yōu)化。在資源獲取上DFRobot的官方Wiki和產(chǎn)品頁面是查找FireBeetle 2 Board引腳圖、原理圖的第一站。對于TFT_eSPI庫Bodmer在GitHub上的倉庫有最詳細的文檔和示例。遇到具體問題時在Arduino論壇、ESP32官方論壇或相關(guān)的開源硬件社區(qū)搜索通常能找到解決方案?;仡櫿麄€“點亮”過程最深的體會就是“配置決定成敗”。無論是Arduino的板卡支持包、TFT_eSPI的用戶配置文件還是代碼中的引腳定義任何一個環(huán)節(jié)的錯配都會導(dǎo)致失敗。耐心閱讀文檔、仔細核對硬件信息、利用串口打印調(diào)試信息這三條是搞定嵌入式顯示項目的通用法則。FireBeetle 2 Board ESP32 C6加上一塊SPI TFT屏這個組合為你打開了一扇通往物聯(lián)網(wǎng)可視化項目的大門接下來的創(chuàng)造就取決于你的想象力了。

相關(guān)新聞

一個信號分析處理對比工具

一個信號分析處理對比工具

我是做振動篩在線監(jiān)測系統(tǒng)的 最近的工作就是把加速度傳感器的原始加速度信號轉(zhuǎn)換成速度、位移。 在振動篩在線監(jiān)測項目中,需要通過加速度傳感器采集設(shè)備振動信號,并進一步計算速度和位移指標,用于設(shè)備狀態(tài)判斷和故障分析。 由于現(xiàn)場采集的…

2026/7/29 2:15:59 閱讀更多
樹莓派新手入門指南:從選型到系統(tǒng)部署的完整實踐

樹莓派新手入門指南:從選型到系統(tǒng)部署的完整實踐

1. 從“玩具”到“生產(chǎn)力”:重新認識樹莓派如果你在搜索引擎里輸入“Raspberry Pi”,大概率會看到一堆關(guān)于“最便宜的電腦”、“學生教育工具”或者“極客玩具”的描述。這些標簽都對,但又不完全對。作為一個從初代Model B就開始折騰的老玩家…

2026/7/29 2:05:59 閱讀更多
騰訊機器人X團隊打造“會思考也會想象“的機器人大腦——RxBrain

騰訊機器人X團隊打造“會思考也會想象“的機器人大腦——RxBrain

這項由騰訊機器人X團隊、富田實驗室與騰訊混元團隊聯(lián)合發(fā)布的研究,于2026年7月15日以預(yù)印本形式公開,論文編號為arXiv:2607.14187。感興趣的讀者可以通過該編號在arXiv平臺查閱完整論文。**研究概要**教一個機器人完成任務(wù),遠比教一個孩子學騎…

2026/7/29 2:05:59 閱讀更多
主流 JDK 發(fā)行版 的詳細對比

主流 JDK 發(fā)行版 的詳細對比

一、基礎(chǔ)關(guān)系圖 OpenJDK(開源上游)│├── Oracle JDK(商業(yè)發(fā)行版,基于 OpenJDK 閉源增強)├── Eclipse Temurin(社區(qū)中立,TCK 認證,廣泛兼容)├── Amazon Corrett…

2026/7/29 3:26:01 閱讀更多
物聯(lián)網(wǎng)設(shè)備硬件安全防護與SE050安全元件應(yīng)用

物聯(lián)網(wǎng)設(shè)備硬件安全防護與SE050安全元件應(yīng)用

1. 為什么物聯(lián)網(wǎng)設(shè)備需要硬件級安全防護在2023年某智能家居廠商的數(shù)據(jù)泄露事件中,攻擊者通過入侵溫控器設(shè)備獲取了超過50萬用戶的家庭網(wǎng)絡(luò)憑證。這個典型案例揭示了物聯(lián)網(wǎng)設(shè)備面臨的三大安全挑戰(zhàn):資源受限環(huán)境:多數(shù)物聯(lián)網(wǎng)終端采用MCU方案&…

2026/7/29 3:26:01 閱讀更多
面試官大笑:“一個任務(wù)拆給 5 個 Subagent 并行跑,不比 1 個快 5 倍?“我搖頭:“快不了,還可能更慢“

面試官大笑:“一個任務(wù)拆給 5 個 Subagent 并行跑,不比 1 個快 5 倍?“我搖頭:“快不了,還可能更慢“

前兩個月,我在重構(gòu) AlgoMooc 網(wǎng)站過程中,發(fā)現(xiàn)一個問題:在 Claude Code 里把一個任務(wù)拆給 5 個 Subagent 并行跑,結(jié)果可能比 1 個 agent 從頭干到尾還慢? 大多數(shù)人的第一反應(yīng)是反過來的:活是并行干的&#…

2026/7/29 0:15:24 閱讀更多
# 鴻蒙 HarmonyOS 應(yīng)用開發(fā)實戰(zhàn)(第25期)|骰子(Dice Roller)— Unicode 符號與動畫渲染精講

# 鴻蒙 HarmonyOS 應(yīng)用開發(fā)實戰(zhàn)(第25期)|骰子(Dice Roller)— Unicode 符號與動畫渲染精講

一、應(yīng)用概述 骰子(Dice Roller) 是一款經(jīng)典的休閑娛樂應(yīng)用,模擬了真實擲骰子的過程。應(yīng)用投擲兩個骰子(六面標準骰),使用 Unicode 骰面符號直觀展示每個骰子的點數(shù),并伴有快速滾動的動畫效果?!?/p>

2026/7/29 0:15:24 閱讀更多