Mateya oyo ezali eteni ya: ESP32-S3 Matrice ya LED RGB
Projet cool pona ko créer pona ba applications ya esengo pe ya pratique en utilisant module ESP32-S3 RGB Matrix. Ba liens ya ba vidéos misusu ezali na se ya article oyo.
Projet ESP32-S3 Matrice LED RVB 6 - Jeu Cible
Projɛ́ n°6 – Lidakala ya Nkɔ́mbɔ (Bongola Planche mpo na Kobɛ́tɛ Likingá)
Projɛ́ n°6 ezalí projɛ́ ya nsúka mpe ya mingi koleka oyo esálisaka na molongo óyo ya ESP32-S3 RGB LED Matrix. Na kosálela QMI8658C motion sensor oyo ezalí na kati, obongolaka planche mpo na komátisa likonzi na zingazinga ya 8×8 matrix. Likingá ya “zone ya nkɔ́mbɔ” ezalí na káti ya display. Ntángo likonzi na yɔ́ ekɔ́taka na likingá, langi ebóngwanaka mpe (soki olingi) buzzer ekɛ́tɛkɛ. Óyo esálaka lisano ya bobongoli/koordination ya malamu mpe ya kokamwa.
Ba projɛ́ nyonso motóbá emonisamaki na vidéo mɔ̌kɔ́ ya YouTube (oyo ezalí na lokásá lalúmu). Kode ya lisano mobimba elɛngɛtɛki na nsé ya lisolo óyo, mpe ba liens ya kosɔ́mbɔ module ezalí na nsé ya eteni ya kode.

Bokɛ́ngɛli ya Module ya ESP32-S3 RGB LED Matrix
Module óyo ezalí na:

- Microcontrôleur ESP32-S3 (Wi-Fi + BLE)
- Matrice ya RGB LED 8×8 (ba LED 64 oyo bakokí kokamba)
- Accéléromètre QMI8658C mpo na koyóka bobongoli mpe etaleli
- Port USB-C mpo na énɛ́lɛ́ktrisité mpe programmation
- Ba bouton Boot / Reset
- Ba pɛnɛ ya GPIO oyo ezalí mpo na kobakisa ba buzzer to ba capteurs
Mpo na lisano óyo, accéléromètre ezalí na tina mingi—ezalí koloba ntángo nyonso ba valɛ́ ya X/Y ya bobongoli, mpo likonzi elɛ́ngɛtɛkɛ na kolandela ngámbo ya planche. Eteni ya vidéo mpo na projɛ́ óyo emonisaka polele ndenge likonzi elɛ́ngɛtɛkɛ mpe eyanganaka ntángo obongolaka module na lobɔ́tɔ/lobali/libándá/likoló.:contentReference[oaicite:0]{index=0}

Ba Projɛ́ oyo Emonisami na Vidéo (Ba Heure)
- 00:00 – Bokɔ́tɔli
- 02:01 – Kotiya ba cartes ESP32
- 03:32 – Kotiya ba bibliothèques
- 05:32 – Projɛ́ 1: Likonzi oyo elɛ́ngɛtɛkɛ
- 11:11 – Projɛ́ 2: Bokomi oyo elɛ́ngɛtɛkɛ
- 12:59 – Projɛ́ 3: Mokanda ya HTTP
- 16:41 – Projɛ́ 4: Likonzi ya Bobongoli
- 18:55 – Projɛ́ 5: Flɛ́shɛ oyo elɛ́ngɛtɛkɛ na likoló
- 20:02 – Projɛ́ 6: Lisano ya Nkɔ́mbɔ (projɛ́ óyo)
Eteni óyo ya vidéo emonisaka mpe botamboli ya likonzi mpe logique ya koyóka likingá na mosala, mpo bókanga ndenge ba coordonnées ezalá.:contentReference[oaicite:1]{index=1}

Kotiya ba Cartes ESP32 na Arduino IDE
Soki osílá kosálela ba projɛ́ ya libosó, kotiya ya carte esálémá. Sókó te, landa:
Fichier > Préférences→ Bakisa URL ya carte ESP32.Outils > Carte > Gestionnaire de cartes…→ Tiya “ESP32”.- Pɔ́nɔ carte ya ESP32-S3 na
Outils > Carte. - Pɔ́nɔ port ya COM oyo ezalí na
Outils > Port.
Kotiya ba Bibliothèques oyo Esengelí
Lisano óyo esálelaka:
Adafruit NeoMatrixAdafruit NeoPixelAdafruit GFXQMI8658(capteur ya mouvement)
Tiya bango na:
Croquis > Inclure une bibliothèque > Gérer les bibliothèques…- Luka: NeoMatrix → Tiya
- Tiya ba dépendances (GFX + NeoPixel)
- Luka mpe tiya QMI8658
Ndenge Lisano ya Nkɔ́mbɔ Esálaka
Accéléromètre QMI8658C epɛsɛkɛ ba valɛ́ ya bobongoli ya X mpe Y. Ba valɛ́ óyo bakɛ́ngɛlɛkɛ na ba coordonnées ya LED (0–7 na ba ngámbo nyonso mibale). Likonzi na yɔ́ elɛ́ngɛtɛkɛ na matrice kolandela ngámbo ya planche.
Likingá (to anneau) ekomamɛ na display lokola “zone ya nkɔ́mbɔ.” Ozalí na “kobɛ́tɛ” ntángo nyonso likonzi na yɔ́ ekɔ́taka na likingá. Na ntángo wâná:
- Langi ya nkɔ́mbɔ ebóngwanaka (na ndenge ya bopɛ́tɛ́lɛ́ to oyo esílá)
- Buzzer ekɛ́tɛkɛ (soki ekɔ́tɛ́ki)
Lokola matrice ezalí mokɛ́, likingá ekomamɛ na kosálela vérification ya rayon. Lisano elandaka ntángo nyonso, mpo okokí kobongola planche mpo na kobɛ́tɛ likingá mbala na mbala.
Projɛ́ 6 – Ba Paramètres ya Kode (Lisano ya Nkɔ́mbɔ)
Na nsé, ezalí ba paramètres ya minɛ́nɛ oyo moto akokí kobóngola oyo ezalí na likoló ya croquis. Kode mobimba ezalí na nsé ya lisolo óyo.
Configuration ya Matrice
// Configuration ya matrice
const int MATRIX_PIN = 14;
const int MATRIX_WIDTH = 8;
const int MATRIX_HEIGHT = 8;
Matrice ya RGB ekɔ́tɛ́kɛ na GPIO 14—kobóngola yangó tɛ̂.
Bongengi
uint8_t matrixBrightness = 40; // 0–255
Mpo na kosálela na ndáko, 30–60 ezalí malamu.
Langi ya Likonzi
// Langi ya likonzi (R, G, B)
uint8_t dotRed = 255;
uint8_t dotGreen = 255;
uint8_t dotBlue = 255;
Óyo ezalí likonzi oyo obongolaka planche mpo na komátisa.
Langi ya Likingá (Bopɛ́tɛ́lɛ́ to Oyo Esílá)
// Langi ya likingá (nkɔ́mbɔ)
uint8_t circleRed = 0;
uint8_t circleGreen = 0;
uint8_t circleBlue = 255;
// Soki ezalí solo, pɔ́nɔ langi ya sika na bopɛ́tɛ́lɛ́ ntángo nyonso likonzi ekɔ́taka
bool randomCircleColor = true;
Tiya randomCircleColor = false; soki olingi langi oyo esílá.
Rayon ya Likingá
// Bola ya nkɔ́mbɔ (rayon)
int targetRadius = 3; // 3 ekɔ́kɔnɛ malamu na matrice ya 8×8
Ba rayon ya minɛ́nɛ esálisaka lisano ya mpási tɛ̂; ba mokɛ́ esálisaka ekomɛ mpási.
Bokɛ́ngɛli ya Bobongoli
// Bokɛ́ngɛli ya bobongoli ya carte
float tiltScale = 4.0f; // kobakisa = botamboli ya mbángu na écran
Soki likonzi elɛ́ngɛtɛkɛ mbángu mingi to elɛ́pɛlɛ, kitisa motángo óyo.
Ba Paramètres ya Buzzer (Oyo Esengelí Tɛ̂)
// Ebandeli ya buzzer (esengeli te)
int buzzerPin = 6; // kanga buzzer + na pin 6, – na GND
bool useBuzzer = true; // tia false mpo na kolongola makelele
Soki okangi buzzer te, tia kaka useBuzzer = false;
Liteya ya nsuká
Projet 6 esangisi makambo manso mayekolami na ba projets ya liboso: kotya bililingi, koyoka ba accéléromètre, koyangela ba couleurs, kokitisa bokengi ya mouvement, mpe makelele ya esengeli te. Kotingisa board ememisi esika ya libulu, mpe kobeta na zelasi ekitisi couleur na yango mpe (soki esengeli) epesi makelele ya buzzer. Ezali ndenge ya kosakana mpo na kotalela boyebi ya mouvement na écran RGB ya moké.
Kode ya mobimba ya “Target Game” emonisami automatiquement na nse ya lisolo oyo. Okoki mpe kotala eteni ya Projet 6 na vidéo mpo na komona ndenge libulu etambolaka mpe ndenge ba hits emonanaka. Soki olingi kosala lisano na yo moko, ba liens affiliés mpo na kosomba module ESP32-S3 RGB LED Matrix ezali na nse ya eteni ya kode.
Mateya oyo ezali eteni ya: ESP32-S3 Matrice ya LED RGB
- Projet ESP32-S3 Matrice LED RVB 1- Point de base
- Projet ESP32-S3 Matrice LED RVB 2 - Texte défilant
- Mokano ya ESP32-S3 RGB LED Matrix Projɛ́ 3 - Mokanda na phone ya mbɔ́kɔ
- Mpɔ́ngɔ́ ya ESP32-S3 RGB LED Matrix 4 - Tilt dot
- Projet ESP32-S3 Matrice LED RVB 5 - Flèche toujours vers le haut
- Mokano ya ESP32-S3 RGB LED Matrix Wi-Fi + NTP Time Clock -1 Saa ya Liboso
- Projet Horloge Internet à Matrice LED RGB ESP32-S3 - Affichage de l'Heure et de la Date en 2 Horloges Multicolores
- Projet ya Saa ya Intanɛti ya ESP32-S3 RGB LED Matrix - 3 Langi ya Butú elongo na Mokolo
- Projet ya Monganga ya Internet ya ESP32-S3 RGB LED Matrix - 5 Loni ya Rainbow
- Mosala ya ESP32-S3 RGB LED Matrix Internet Clock - Loni ya balabala ya 4
- ESP32-S3 RGB LED Matrix test for RGB, GRB setting
/*
Project 6: Tilt Circle Game – ESP32-S3 RGB LED Matrix (Waveshare)
This sketch reads tilt from the QMI8658C IMU and smoothly moves a dot
on the 8×8 RGB LED matrix based on board orientation.
▶️ Video Tutorial:
https://youtu.be/JKLuYrRcLMI
📚⬇️ Resources & Code Page:
https://robojax.com/RJT829
QMI8658_RGB_2
*/
#include <Arduino.h>
#include <math.h>
#include <Adafruit_GFX.h>
#include <Adafruit_NeoMatrix.h>
#include <Adafruit_NeoPixel.h>
#include <QMI8658.h> // by Lahav Gahali
// -------- LED MATRIX SETUP --------
#define MATRIX_PIN 14
#define MATRIX_WIDTH 8
#define MATRIX_HEIGHT 8
// Buzzer pin – change this to your actual buzzer GPIO.
const int BUZZER_PIN = 6; // TODO: set to your buzzer pin
// Matrix brightness (0–255)
const uint8_t MATRIX_BRIGHTNESS = 10;
Adafruit_NeoMatrix matrix = Adafruit_NeoMatrix(
MATRIX_WIDTH, MATRIX_HEIGHT, MATRIX_PIN,
NEO_MATRIX_TOP + NEO_MATRIX_LEFT +
NEO_MATRIX_ROWS + NEO_MATRIX_PROGRESSIVE,
NEO_GRB + NEO_KHZ800
);
// -------- IMU SETUP --------
QMI8658 imu;
// -------- GAME CONFIG --------
// How often the dot is allowed to move (ms).
// Bigger = slower movement.
const uint16_t MOVE_INTERVAL_MS = 150; // try 120–250
// How much tilt (m/s^2) before the dot moves.
// Increase if it feels too sensitive.
const float ACC_TILT_THRESHOLD = 2.0f; // about ~0.2 g
// Dot base color (RGB)
const uint8_t DOT_R = 255;
const uint8_t DOT_G = 255;
const uint8_t DOT_B = 255;
// Circle geometry (centered on 8x8)
const float CIRCLE_CENTER_X = (MATRIX_WIDTH - 1) / 2.0f; // 3.5
const float CIRCLE_CENTER_Y = (MATRIX_HEIGHT - 1) / 2.0f; // 3.5
const float CIRCLE_RADIUS = 3.0f;
const float CIRCLE_THICKNESS = 0.8f; // +- thickness around radius
// -------- GAME STATE --------
// Dot position on the 8x8 grid (0..7)
int dotX = 3;
int dotY = 3;
// Colors (16-bit NeoMatrix colors)
uint16_t dotColor;
uint16_t circleColor;
// To detect “just touched circle” vs “still on circle”
bool wasOnCircle = false;
// Timer for rate-limiting movement
unsigned long lastMoveTime = 0;
// -------- HELPER FUNCTIONS --------
// Classic NeoPixel color wheel (0-255 -> rainbow)
uint16_t wheel(byte pos) {
if (pos < 85) {
return matrix.Color(pos * 3, 255 - pos * 3, 0);
} else if (pos < 170) {
pos -= 85;
return matrix.Color(255 - pos * 3, 0, pos * 3);
} else {
pos -= 170;
return matrix.Color(0, pos * 3, 255 - pos * 3);
}
}
// Is a given pixel approximately on the circle?
bool isOnCircle(int x, int y) {
float dx = x - CIRCLE_CENTER_X;
float dy = y - CIRCLE_CENTER_Y;
float d2 = dx * dx + dy * dy;
float rMin = CIRCLE_RADIUS - CIRCLE_THICKNESS;
float rMax = CIRCLE_RADIUS + CIRCLE_THICKNESS;
return (d2 >= rMin * rMin) && (d2 <= rMax * rMax);
}
// Draw circle + dot
void drawScene() {
matrix.fillScreen(0);
// Draw circle
for (int y = 0; y < MATRIX_HEIGHT; y++) {
for (int x = 0; x < MATRIX_WIDTH; x++) {
if (isOnCircle(x, y)) {
matrix.drawPixel(x, y, circleColor);
}
}
}
// Draw dot (on top)
matrix.drawPixel(dotX, dotY, dotColor);
matrix.show();
}
// Simple blocking beep (short)
void buzzOnce() {
digitalWrite(BUZZER_PIN, HIGH);
delay(40);
digitalWrite(BUZZER_PIN, LOW);
}
// Use accelerometer to decide dot movement
void updateDotFromTilt(float ax, float ay) {
unsigned long now = millis();
if (now - lastMoveTime < MOVE_INTERVAL_MS) {
return; // too soon, wait
}
int dx = 0;
int dy = 0;
// On this board, Y tilt feels like "left/right" on the matrix,
// and X tilt feels like "up/down" → so we swap.
// --- Horizontal movement from AY (tilt left/right) ---
if (ay > ACC_TILT_THRESHOLD) {
dx = 1; // tilt to the right → move dot to the right
} else if (ay < -ACC_TILT_THRESHOLD) {
dx = -1; // tilt to the left → move dot to the left
}
// --- Vertical movement from AX (tilt forward/back) ---
// This was inverted. We flip the signs:
// ax > threshold = tilt "forward" (away) → move dot UP (dy = -1)
// ax < -threshold = tilt "back" (toward)→ move dot DOWN(dy = 1)
if (ax > ACC_TILT_THRESHOLD) {
dy = -1; // was +1 before
} else if (ax < -ACC_TILT_THRESHOLD) {
dy = 1; // was -1 before
}
if (dx != 0 || dy != 0) {
dotX = constrain(dotX + dx, 0, MATRIX_WIDTH - 1);
dotY = constrain(dotY + dy, 0, MATRIX_HEIGHT - 1);
lastMoveTime = now;
}
}
// -------- SETUP & LOOP --------
void setup() {
Serial.begin(115200);
delay(100);
// Matrix init
matrix.begin();
matrix.setBrightness(MATRIX_BRIGHTNESS);
matrix.fillScreen(0);
matrix.show();
// Buzzer init
pinMode(BUZZER_PIN, OUTPUT);
digitalWrite(BUZZER_PIN, LOW);
// IMU init
if (!imu.begin(11, 12)) {
Serial.println("Failed to initialize QMI8658!");
while (1) {
delay(100);
}
}
// Use m/s^2 and dps (optional, but nice)
imu.setAccelUnit_mps2(true);
imu.setGyroUnit_dps(true);
imu.setDisplayPrecision(3);
Serial.println("QMI8658 initialized.");
// Game initial state
randomSeed((uint32_t)micros());
dotX = MATRIX_WIDTH / 2;
dotY = MATRIX_HEIGHT / 2;
dotColor = matrix.Color(DOT_R, DOT_G, DOT_B);
circleColor = wheel(random(256));
drawScene();
}
void loop() {
// Read accelerometer
float ax, ay, az;
if (imu.readAccelMPS2(ax, ay, az)) {
// Debug if needed:
// Serial.print("AX: "); Serial.print(ax);
// Serial.print(" AY: "); Serial.print(ay);
// Serial.print(" AZ: "); Serial.println(az);
updateDotFromTilt(ax, ay);
}
// Check collision with circle
bool onCircle = isOnCircle(dotX, dotY);
if (onCircle && !wasOnCircle) {
// Just touched circle: change color + beep
circleColor = wheel(random(256));
buzzOnce();
}
wasOnCircle = onCircle;
// Redraw
drawScene();
// Small delay so we don’t hammer I2C too hard
delay(10);
}
Nko o na nki.
-
Amazon
-
eBay
-
AliExpressPurchase ESP32-S3 RGB matrix from AliExpresss.click.aliexpress.com
-
AliExpressPurchase ESP32-S3 RGB matrix from AliExpress (2)s.click.aliexpress.com
Mokili na bisika
-
Interno🎨 Color picker Toolrobojax.com
Fichiers📁
Fritzing File
-
esp32-S3-supermini-tht fritzing part
esp32-S3-supermini-tht.fzpz0.02 MB