Hľadať kód

Projekt ESP32-S3 RGB LED matice 1 – Základná bodka

Projekt ESP32-S3 RGB LED matice 1 – Základná bodka

Projekt 1 – Animácia pohybujúcej sa bodky a srdca na ESP32-S3 RGB LED matici

V tomto projekte začneme s najjednoduchšou možnou animáciou na ESP32-S3 RGB LED matici: jedinou bodkou pohybujúcou sa cez 8×8 RGB displej. Navyše pridáme malú animáciu srdca, aby ste mohli zariadenie premeniť na malý dekoratívny displej, keď je zapnuté. Toto je skvelý prvý krok na oboznámenie sa s ovládaním jednotlivých pixelov, farieb a rýchlosti animácie na matici.

Všetkých šesť projektov v tejto sérii je predvedených a vysvetlených v jednom videu. Rovnaké video je vložené na tejto stránke, takže si môžete pozrieť celé podrobné vysvetlenie a živú ukážku animácií pohybujúcej sa bodky a srdca. Kompletný kód pre tento projekt sa automaticky načíta nižšie pod článkom a modul ESP32-S3 RGB LED Matrix si môžete zakúpiť z partnerských obchodov uvedených v sekcii kódu.

Ak s touto doskou práve začínate, tento projekt je perfektný spôsob, ako:

  • Overiť, že vaša doska ESP32-S3 a USB pripojenie fungujú.
  • Potvrdiť, že 8×8 RGB matica je zapojená na správny pin.
  • Experimentovať so základným načasovaním animácie, farbou a jasom.

Prehľad modulu ESP32-S3 RGB LED Matrix

Doska použitá v tomto projekte je založená na mikrokontroléri ESP32-S3, kombinovanom s 8×8 RGB LED maticou (64 jednotlivo adresovateľných RGB LED), snímačom pohybu QMI8658C na zadnej strane a USB portom pre napájanie a programovanie.:contentReference[oaicite:0]{index=0}

Kľúčové vlastnosti tohto modulu:

  • ESP32-S3 dvojjadrový mikrokontrolér s podporou Wi-Fi a Bluetooth.
  • 8×8 RGB LED matica (64 RGB LED) na prednej strane dosky, ideálna pre ikony, text a malé hry.
  • QMI8658C akcelerometer / snímač pohybu na zadnej strane, takže môžete detekovať náklon, pohyb a orientáciu pre interaktívne projekty.
  • USB port pre programovanie aj napájanie.
  • Prístupné piny po okrajoch, takže dosku možno stále používať ako bežný ESP32 pre iné IO projekty.
  • Tlačidlá Boot a Reset pre vstup do programovacieho režimu a reštartovanie vášho sketchu.

V tomto prvom projekte používame iba časť LED matice dosky, ale rovnaký hardvér je dostatočne výkonný na zobrazovanie textu, webovo ovládaných správ, hier ovládaných pohybom a ďalších vecí — ktoré sú pokryté v ďalších projektoch tejto série.

Projekty zahrnuté vo videu (Časové značky)

Všetkých šesť projektov zdieľa rovnaké YouTube video. Približné časové značky sú:

  • 00:00 – Úvod
  • 02:01 – Inštalácia ESP32 dosiek
  • 03:32 – Inštalácia knižníc
  • 05:32 – Projekt 1: Pohybujúca sa bodka (a základné nastavenia farieb / rýchlosti)
  • 11:11 – Projekt 2: Posúvanie textu
  • 12:59 – Projekt 3: HTTP text
  • 16:41 – Projekt 4: Náklon bodky
  • 18:55 – Projekt 5: Šípka hore
  • 20:02 – Projekt 6: Cieľová hra

Pre čo najlepšie pochopenie vám dôrazne odporúčame pozrieť si video pri čítaní tohto článku. Video ukazuje živé správanie bodky a srdca na matici, plus všetky kroky v Arduino IDE.

Inštalácia ESP32 dosiek v Arduino IDE

Pred nahratím akéhokoľvek kódu do ESP32-S3 musíte v Arduino IDE nainštalovať balík podpory pre ESP32 dosky. Vo videu je to demonštrované v sekcii „inštalácia dosiek“.

Všeobecné kroky:

  1. Otvorte Arduino IDE a prejdite na Súbor > Predvoľby.
  2. Do poľa „Additional Boards Manager URLs“ pridajte oficiálnu URL adresu pre ESP32 dosky.
  3. Otvorte Nástroje > Doska > Správca dosiek…, vyhľadajte ESP32 a nainštalujte balík pre ESP32 dosky.
  4. Po inštalácii prejdite na Nástroje > Doska a vyberte správny záznam dosky pre váš ESP32-S3 RGB Matrix modul.
  5. Pripojte dosku cez USB a vyberte jej sériový port pod Nástroje > Port.

Ak nie je vybratá správna doska a port, váš sketch sa nenahrá, aj keď je váš kód správny.

Inštalácia NeoMatrix a požadovaných knižníc

LED matica interne používa ovládač Adafruit NeoPixel a pre jednoduchšie 2D kreslenie používame knižnicu Adafruit NeoMatrix. Inštalácia NeoMatrix automaticky stiahne závislosti.

NeoMatrix a závislosti

Nainštalujte nasledujúce zo Správcu knižníc:

  • Adafruit NeoMatrix
  • Adafruit NeoPixel
  • Adafruit GFX Library

V Správcovi knižníc:

  1. Otvorte Sketch > Zahrnúť knižnicu > Spravovať knižnice….
  2. Vyhľadajte Adafruit NeoMatrix a kliknite na Inštalovať.
  3. Povoľte IDE nainštalovať všetky odporúčané závislosti (Adafruit GFX a Adafruit NeoPixel).

Knižnica snímača pohybu QMI8658C (Pre neskoršie projekty)

Projekt 1 nepoužíva akcelerometer priamo, ale je dobrý nápad nainštalovať knižnicu snímača pohybu už teraz, pretože bude potrebná pre Projekty 4, 5 a 6.

Zo Správcu knižníc:

  1. Vyhľadajte knižnicu QMI8658 podľa mena autora.
  2. Nainštalujte knižnicu, aby sa zobrazila pod Súbor > Príklady pre rýchle testovanie.

Projekt 1 – Nastavenia kódu (Pohybujúca sa bodka a srdce)

Plný náčrt, ktorý spúšťa Projekt 1, sa na webovej stránke automaticky načíta pod tento článok. Tu sa zameriame len na kľúčové nastavenia, ktoré pravdepodobne zmeníte: pin, počet pixelov, jas, farbu a rýchlosť animácie. Pri animácii srdca tiež ukážeme, ako ovládať farbu a či je srdce plné alebo len obrysové.

LED pin a počet pixelov

Na tomto module je 8×8 RGB matica pripojená na GPIO 14 čipu ESP32-S3. Celkový počet pixelov je 64 (8 × 8). Vo vašom kóde by ste mali vidieť niečo podobné:

 
// Pin pripojený k 8×8 RGB matici 
const int MATRIX_PIN = 14;
 // na tomto module musí byť 14 
// Celkový počet LED (8 × 8 matica) 
const int NUMPIXELS = 64; // zmeňte len ak používate inú veľkosť matice 

Ak omylom necháte NUMPIXELS na hodnote 16 (z pôvodného NeoPixel príkladu), využije sa len štvrtina matice a animácia nevyplní celú 8×8 obrazovku.

Poradie farieb a typ LED

Rôzne LED pásy a matice môžu používať rôzne poradie farieb (napríklad GRB namiesto RGB). Matica na tejto doske očakáva poradie RGB. V konštruktore NeoPixel alebo NeoMatrix sa uistite, že je typ farby nastavený správne:


 // Príklad pre objekt typu NeoPixel: 
Adafruit_NeoPixel pixels( NUMPIXELS, MATRIX_PIN, NEO_RGB + NEO_KHZ800 // uistite sa, že to zodpovedá poradiu farieb matice ); 

Ak si všimnete, že červená a zelená sú na displeji vymenené, skontrolujte najprv tento riadok a opravte poradie farieb.

Rýchlosť animácie (oneskorenie medzi krokmi)

Rýchlosť pohybujúcej sa bodky sa zvyčajne riadi jednoduchou hodnotou oneskorenia v milisekundách. Menšie oneskorenie znamená rýchlejší pohyb; väčšie oneskorenie znamená pomalší pohyb. Hľadajte premennú podobnú:

 
// Oneskorenie medzi pohybmi bodky (v milisekundách)
 int dotDelayMs = 50; // 50 ms je pomerne rýchle 

Typické úpravy:

  • Nastavte dotDelayMs = 20; pre veľmi rýchlo sa pohybujúcu bodku.
  • Nastavte dotDelayMs = 100; alebo vyššie pre pomalú, pokojnú animáciu.

Vo funkcii loop() sa táto hodnota zvyčajne odovzdáva funkcii delay(dotDelayMs); po každej aktualizácii snímky.

Farba bodky a jas

RGB farba pohybujúcej sa bodky sa riadi tromi hodnotami v rozsahu 0–255 (červená, zelená, modrá). Napríklad:

 
// Farba bodky (R, G, B) od 0–255 uint8_t dotRed = 255; // plná červená 
uint8_t dotGreen = 0; // žiadna zelená 
uint8_t dotBlue = 0; // žiadna modrá 

Toto vytvorí jasne červenú bodku. Niektoré užitočné kombinácie:

  • Čistá červená: (255, 0, 0)
  • Čistá zelená: (0, 255, 0)
  • Čistá modrá: (0, 0, 255)
  • Žltá: (255, 255, 0)
  • Biela: (255, 255, 255)

Celkový jas sa často riadi samostatnou funkciou jasu:

 
// Celkový jas matice (0–255) 
uint8_t matrixBrightness = 40; // držte ho nízko, aby ste predišli prílišnému oslneniu // V setup(): matrix.setBrightness(matrixBrightness); 

Hodnota okolo 30–60 je zvyčajne pohodlná pre vnútorné použitie.

Nastavenia tvaru srdca

Okrem pohybujúcej sa bodky môžete na matici zobraziť malé srdce, keď sa doska prvýkrát zapne. Vzorový kód článku (načítaný nižšie) obsahuje nastavenia podobné:

 
// Farba srdca (plné srdce) 
uint8_t heartRed = 255; 
uint8_t heartGreen = 0; 
uint8_t heartBlue = 0; 
// Voliteľné: dúhové alebo obrysové režimy 
bool showOutlinedHeart = false; 
// true = len obrys 
bool useRainbowHeart = false; 
// true = cyklické menenie farieb v čase 

Typické použitie:

  • Nastavte showOutlinedHeart = false; a useRainbowHeart = false; pre plné červené srdce.
  • Nastavte showOutlinedHeart = true; pre zobrazenie len obrysu srdca.
  • Nastavte useRainbowHeart = true; pre nepretržité cyklické menenie farby srdca cez dúhový efekt.

Srdce sa kreslí pomocou NeoMatrix súradnicových funkcií v kóde pod článkom. Na prispôsobenie jeho vzhľadu stačí zmeniť vyššie uvedené premenné.

Zhrnutie

Projekt 1 vám poskytuje jednoduchý, ale výkonný štartovací bod s ESP32-S3 RGB LED maticou: naučíte sa adresovať všetkých 64 pixelov, ovládať farbu, nastavovať jas a rýchlosť animácie. Tiež uvidíte, aké ľahké je prepnúť z pohybujúcej sa bodky na statické alebo animované srdce na rovnakom hardvéri.

Nezabudnite si pozrieť celé video vložené na tejto stránke pre kompletnú, krok za krokom demonštráciu pohybujúcej sa bodky a animácií srdca, spolu so zvyšnými piatimi projektmi. Plný zdrojový kód je dostupný nižšie v tomto článku a môžete podporiť budúce projekty zakúpením modulu cez affiliate odkazy uvedené pod sekciou s kódom.

Obrázky

ESP32 S3 Matrix  pin out
ESP32 S3 Matrix pin out
ESP32 S3 Matrix displaying green heart
ESP32 S3 Matrix displaying green heart
ESP32 S3 Matrix displaying rainbow heart
ESP32 S3 Matrix displaying rainbow heart
ESP32-S3 RGB Matrix- Mobile Phone Text
ESP32-S3 RGB Matrix- Mobile Phone Text
ESP32-S3-Mtrix - Alway Up
ESP32-S3-Mtrix - Alway Up
799-ESP32-S3 RGB LED Matrix Project 1 - Dot
Jazyk: C++
/* 
  Project 1: the Dot – ESP32-S3 RGB LED Matrix (Waveshare)

  dialysis a dot on scree and moves it
  
  ▶️ Video Tutorial:
  https://youtu.be/JKLuYrRcLMI

  📚⬇️ Resources & Code Page:
  https://robojax.com/RJT829

  QMI8658_RGB_2
*/

#include <Adafruit_NeoPixel.h>
#ifdef __AVR__
 #include <avr/power.h> // Required for 16 MHz Adafruit Trinket
#endif

// Which pin on the Arduino is connected to the NeoPixels?
#define PIN        14 // On Trinket or Gemma, suggest changing this to 1

// How many NeoPixels are attached to the Arduino?
#define NUMPIXELS 64 // Popular NeoPixel ring size

// When setting up the NeoPixel library, we tell it how many pixels,
// and which pin to use to send signals. Note that for older NeoPixel
// strips you might need to change the third parameter -- see the
// strandtest example for more information on possible values.
Adafruit_NeoPixel pixels(NUMPIXELS, PIN, NEO_RGB + NEO_KHZ800);

#define DELAYVAL 50 // Time (in milliseconds) to pause between pixels

void setup() {
  // These lines are specifically to support the Adafruit Trinket 5V 16 MHz.
  // Any other board, you can remove this part (but no harm leaving it):
#if defined(__AVR_ATtiny85__) && (F_CPU == 16000000)
  clock_prescale_set(clock_div_1);
#endif
  // END of Trinket-specific code.

  pixels.begin(); // INITIALIZE NeoPixel strip object (REQUIRED)
}

void loop() {
  pixels.clear(); // Set all pixel colors to 'off'

  // The first NeoPixel in a strand is #0, second is 1, all the way up
  // to the count of pixels minus one.
  for(int i=0; i<NUMPIXELS; i++) { // For each pixel...

    // pixels.Color() takes RGB values, from 0,0,0 up to 255,255,255
    // Here we're using a moderately bright green color:
    pixels.setPixelColor(i, pixels.Color(255, 255, 0));

    pixels.show();   // Send the updated pixel colors to the hardware.

    delay(DELAYVAL); // Pause before next pass through loop
    pixels.clear();
  }



}

Veci, ktoré by ste mohli potrebovať

Zdroje a referencie

Súbory📁

Súbor Fritzing