20 maart 2023

Project RGB Matrix - ESP versie

 ESP32 + P3 ADAFRUIT RGB Matrix display 

In mijn vorige post was ik aan het experimenteren met een Raspberry Pi om dit Matrix paneel aan te sluiten. Maar ik voelde me mij daar niet goed bij omdat ik de laatste tijd meer met Arduino's bezig ben. Het programmeren met Arduino ligt me beter, ken het systeem heel goed en is gemakkelijker voor mij om software te schrijven voor iets aan te sturen.

De ESP32 behoort tot de Arduino klasse en is een krachtige microcontroller en system-on-chip (SoC) die veel wordt gebruikt op het gebied van embedded systemen en IoT (Internet of Things) ontwikkeling. Hij is ontwikkeld door Espressif Systems, een Chinees bedrijf dat gespecialiseerd is in de productie van draadloze communicatiechips en -modules met een laag vermogen.

De ESP32 is gebaseerd op de Xtensa LX6 microprocessor, die twee kernen heeft die tot 240 MHz kunnen draaien. Hij bevat ook een reeks on-chip randapparatuur, zoals Wi-Fi en Bluetooth connectiviteit, digitaal-naar-analoog converters (DAC's), analoog-naar-digitaal converters (ADC's), aanraaksensoren en meer.

Zijn lage stroomverbruik en kleine vormfactor maken het een populaire keuze voor apparaten op batterijen, en zijn ingebouwde draadloze connectiviteitsopties maken het gemakkelijk om verbinding te maken met andere apparaten of het internet.

Zoals de standaard Arduino, bestaat ook de ESP32 uit verschillende modellen. De pinout kan heel verschillend zijn en zelfs de gebruikte code kan afwijkend zijn. Ik gebruik voor mijn projecten DEVKIT1 en WROOM. Ik heb al andere types gehad, maar voor mijn toepassingen blijf ik bij de bovenstaande twee.
 







 

Op het internet vind ik veel democode voor andere types van ESP32, maar niet voor wat ik in huis heb. Na veel ESP32 bijbels te hebben gelezen ben ik er toch aan uit geraakt om mijn versies te gebruiken, al was het niet simpel.

Hier zal ik beschrijven hoe ik te werk ben gegaan en hoe je vrijwel op elke ESP32 die P3 Adafruit RGB 64x64 led Matrixen kunt op aansluiten en te programmeren.

Update 21 maart 2023 7:45

RGB LED Matrix panelen heb je in allerlei groottes en pixeldichtheid. Je kunt ze overal kopen en de prijzen liggen soms ver uit elkaar. Bij AliExpress worden ze goedkoop aangeboden, maar die zijn niet bruikbaar in dit project. De meesten van deze matrix panelen aldaar zijn gemaakt met goedkopere andere soorten chips en led's en de comptabiliteit laat soms te wensen over.
Mijn project is met een Adafruit,  64x64 RGB LED Matrix - 3mm Pitch. Een stevig paneel met gelijkmatige 4096 led's en goede helderheid.

               https://www.adafruit.com/product/4732

Dan heb je nog bij sommige matrixen het probleem dat de aansluitconnector niet is gestandaardiseerd. Een HUB75 durft soms afwijkende aansluitingen hebben.
Bij Matrixen van 32x64 is het anders dan bij de 64x64 versies, maar sommige Chinese versies van 64x64 Matrixen hebben de aansluiting zoals de 32x64 modellen en daar bestaan er dan ook weer afwijkingen van. Het is een soep met balletjes.
Op onderstaande afbeelding zijn de 2 meestgebruikte HUB75 aansluitpunten te zien. Voor dit Adafruit 64x64 RGB Matrix is het HUB75E.

Dan is er het probleem van de library's. Er zijn tientallen die zulke panelen kunnen aansturen, maar voor deze Adafruit RGB Matrix vind ik de library van mrfaptastic het beste. Deze vind je hier: 

https://github.com/mrfaptastic/ESP32-HUB75-MatrixPanel-DMA

 Ik had alle aansluitingen gesoldeerd


maar toen zag ik dat ik dit voor de verkeerde HUB75 had gedaan, dus weer afbreken en opnieuw doen

Tenslotte is alles goedgekomen


Hieronder heb je de aansluitcodes voor de HUB75E. Let wel op, dit zijn de standaardaansluitingen om met
mrfaptastic library te werken. Ze staan echter wel verkeerd vermeld op de website. Ook als je code van iemand anders wil gebruiken, moet je de code aanpassen naar deze aansluitingen. 

De voeding moet minimaal 4 ampère bij 5 volt bedragen. Deze sluit je aan via de dikke bedrading op het paneel en aan de ESP32, zoals op onderstaande afbeeldingen:




Hoe je de ESP32 moet programmeren en library's moet toevoegen laat ik hier achterwege. Hiervoor zijn voldoende instructies te vinden op het internet.

Zodra alles correct is aangesloten, kan je het testen met deze korte ESP32 code, die je met de Arduino IDE kunt opladen.

 // Code start hier >----------------------------------------------------------------------------

 
// Een testcode om te zien of alles goed is aangesloten
// door Chris de professor
//
#include <ESP32-HUB75-MatrixPanel-I2S-DMA.h>

#define PANEL_RES_X 64     
#define PANEL_RES_Y 64     
#define PANEL_CHAIN 1      
 
MatrixPanel_I2S_DMA *dma_display = nullptr;

uint16_t ZWART = dma_display->color565(0, 0, 0);
uint16_t WIT = dma_display->color565(255, 255, 255);
uint16_t ROOD = dma_display->color565(255, 0, 0);
uint16_t GROEN = dma_display->color565(0, 255, 0);
uint16_t BLAUW = dma_display->color565(0, 0, 255);

uint16_t colorWheel(uint8_t pos) {
  if(pos < 85) {
    return dma_display->color565(pos * 3, 255 - pos * 3, 0);
  } else if(pos < 170) {
    pos -= 85;
    return dma_display->color565(255 - pos * 3, 0, pos * 3);
  } else {
    pos -= 170;
    return dma_display->color565(0, pos * 3, 255 - pos * 3);
  }
}

void drawText(int colorWheelOffset)
{
  dma_display->setTextSize(1);     
  dma_display->setTextWrap(false);
  dma_display->setCursor(8, 0);    
  uint8_t w = 0;
  const char *str = "Chris de";
  for (w=0; w<strlen(str); w++) {
  dma_display->setTextColor(colorWheel((w*8)+colorWheelOffset));
  dma_display->print(str[w]);
  }
  dma_display->setTextSize(1);     
  dma_display->setTextWrap(false);
  dma_display->setCursor(5, 10);   
  const char *str1 = "professor";
  for (w=0; w<strlen(str1); w++) {
  dma_display->setTextColor(colorWheel((w*64)+colorWheelOffset));
  dma_display->print(str1[w]);
  }
  dma_display->setTextSize(2);
  dma_display->setCursor(8,24);
  dma_display->setTextColor(dma_display->color444(0,8,15));
  dma_display->print('T');
  dma_display->setTextColor(dma_display->color444(15,4,0));
  dma_display->print('E');
  dma_display->setTextColor(dma_display->color444(15,15,0));
  dma_display->print('S');
  dma_display->setTextColor(dma_display->color444(8,15,0));
  dma_display->print('T');
 
  dma_display->setTextColor(dma_display->color444(0,15,15));
  dma_display->setTextSize(1);
  dma_display->setCursor(14,40);
  dma_display->setTextColor(dma_display->color444(8,0,0));
  dma_display->print('M');
  dma_display->setTextColor(dma_display->color444(15,12,8));
  dma_display->print('A');
  dma_display->setTextColor(dma_display->color444(8,0,15));
  dma_display->print('T');
  dma_display->setTextColor(dma_display->color444(15,15,0));
  dma_display->print('R');
  dma_display->setTextColor(dma_display->color444(8,15,15));
  dma_display->print('I');
  dma_display->setTextColor(dma_display->color444(25,8,25));
  dma_display->print('X');
  dma_display->setTextSize(1);   
  dma_display->setTextWrap(false);
  dma_display->setCursor(6, 52);    
  const char *str2 = "GESLAAGD!";
  for (w=0; w<strlen(str2); w++) {
  dma_display->setTextColor(colorWheel((w*64)+colorWheelOffset));
  dma_display->print(str2[w]);
  }

}

void setup() {
 
  HUB75_I2S_CFG mxconfig(
    PANEL_RES_X,   
    PANEL_RES_Y,   
    PANEL_CHAIN   
  );

  mxconfig.gpio.e = 18;
  mxconfig.clkphase = false;

  dma_display = new MatrixPanel_I2S_DMA(mxconfig);
  dma_display->begin();
  dma_display->setBrightness8(90); //0-255
  dma_display->clearScreen();

  dma_display->fillScreen(dma_display->color444(0, 0, 0));

}

uint8_t wheelval = 0;
void loop() {

    drawText(wheelval);
    wheelval +=1;

    delay(20);

 }

//Code eindigt hier<----------------------------------------------------------------------------------------- 

Dit zou het resultaat moeten zijn als alles correct is aangesloten:

 
 
Wil je enkele leuke klokken uitproberen op dit systeem, surf naar: 

https://github.com/jnthas/clockwise 

en volg de instructies. Je kan deze volautomatisch programmeren en werkt met Google Chrome en  Microsoft Edge.

Pacman Klok


 

Meer vragen? Ga naar Twitter en vraag maar op:https://twitter.com/chrisnovitsj


Chris de professor

Geen opmerkingen:

Een reactie posten

Opmerking: Alleen leden van deze blog kunnen een reactie posten.

Galvo Fiber Laser

Mijn beste investering ooit, een GALVO FIBER LASER. Voor ik enkele van mijn beginnende experimentjes met deze machine zal tonen, eerst een w...