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

11 maart 2023

Project RGB LED Matrix

 Project RGB LED Matrix

Dit project zal niet gemakkelijk zijn omdat ik totaal geen ervaring heb bij het aansturen van zo'n 4096 RGB LED Matrix. Het werkt totaal anders dan de Matrixen die ik gewoon ben. Eerst alles solderen en monteren en daarna komt het programmeerwerk.

Wat ik daar wil mee maken, daar ben ik er nog niet aan uit, heb verschillende ideeën, maar door de complexiteit hiervan moet ik uitzoeken welk idee haalbaar is.

Deze blog wordt regelmatig aangevuld en je zult kunnen lezen of ik zal slagen of falen. Ik hoop alvast op het eerste. Ik heb al de nodige opzoekingen gedaan en ik kan alvast vertellen dat dit niet zo simpel is.

Dit zijn de basis onderdelen waarmee ik het project zal starten 🠯

Update 11 maart 2023 - 10:40

Het Adafruit matrixbordje heb ik gesoldeerd. Door de pijn ging het wat moeizaam, maar is me gelukt. Mijn ongeneeslijke ziekte zit me soms in de weg om alles vlot en perfect te doen, maar ik plooi niet 😉 Klik hieronder op het filmpje 🠯


 Update 11 maart 2023 - 11:25

De drivers geïnstalleerd, maar de demo draait niet zoals het moet, dus uitvlooien wat er fout is, zie het filmpje, op het einde de demo 🠯

 Update 11 maart 2023 - 12:05

De code aangepast voor mijn display, er zijn diverse soorten en ieder model heeft zo zijn instellingen. Het is wat verwarrend, maar ik kan de demo laten lopen. Zoals ik eerder had aangehaald, het is niet simpel en zal nog veel moeten leren voor ik zelf een project met deze Matrix zal kunnen maken, maar het zit er goed uit, maar via de camera zijn de kleuren niet optimaal, ik zie mooie heldere kleuren zonder enige storing. Zie het filmpje 🠯


 Update 11 maart 2023 - 20:19

Ik heb al gevloekt, het is serieus ingewikkeld. Tegen dat ik al de instructies zal kennen, denk ik dat we al aan Kerstmis zullen zitten. Nu is het me gelukt om op deze LED Matrix mijn foto te zetten. Beetje bij beetje kom ik er wel. Studeren tot ik erbij neerval.

Update 12 maart 2023 - 12:20

Ik begin dit systeem goed te kennen, het is veel studeerwerk maar het lukt al aardig. Gelukkig kon ik al redelijk goed programmeren in C++ en zo een voorsprong heb. Ik had eerst in Python geprobeerd, maar dat ligt me niet meer, hoewel ik vroeger vrijwel alles in Python had geprogrammeerd. Nu heb ik de gegevens van Twitter in kunnen verwerken, zodat ik zie hoeveel volgers ik heb. Dit is als test, want ik zal met dit Matrixpaneel iets veel nuttiger maken. Maar het is zondag vandaag en ruim de boel op en ga ontspannen een filmpje kijken.

Morgen doe ik eerst wat verder aan de montage, zodat alles mooi aan elkaar vast zal zitten, nu is het een rommeltje.

Update 13 maart 2023 - 18:25

Vandaag het één en het ander geprogrammeerd en alles lijkt goed te gaan. Hier en daar wel een foutje, maar dat haal ik er wel uit. Ik heb ondertussen voetjes en houder voor de Raspberry Pi geprint en al de bedrading zo netjes mogelijk gemonteerd. Ook een extra knop gemaakt om dit paneel op de correcte manier te kunnen afsluiten.

Hier nieuwe foto's van achterzijde en voorzijde.


Zoals je kunt zien op de onderste foto, dan kan je al weten welke weg ik zal opgaan. Dit doe ik enkel om alles te kunnen leren, dat paneeltje zal in de toekomst een heel andere bestemming krijgen.

Update 14 maart 2023 - 11:42 

Het eerste project is bijna klaar, het display werkt prima, het wordt een klein spelletjes systeem als leerstof voor mijn komend groot project met deze matrix. Nu ga ik een spelcontroller bouwen met een Pro Micro met Atmega32U4 Processor dat werkt op dit systeem. Alsook zal ik een kastje ontwerpen en printen met de benodigde knoppen.


Nog een klein beetje programmeren en dan grondig testen. Het eindresultaat zal ik filmen. 

 Update 14 maart 2023 - 17:55

Niet veel gedaan vandaag, ik had weer pijnaanvallen en moest plat gaan liggen. Maar heb alsnog gewerkt aan de controller. Beetje bij beetje komt het wel in orde 😌

In dit filmpje verzaag ik op een klungelachtige manier het Vero bord en soldeer de tactische knoppen en stel mijn  3D ontwerp van de behuizing van de controller voor. 

Update 15 maart 2023 - 11:50

Project slaat wat tegen. Door een pijnscheut liet ik de nieuw gemaakte controller uit mijn handen vallen en verloor mijn evenwicht en kwam er met mijn voet op te staan. Kastje gebroken en heb het verder moeten afbreken, ik had het goed dichtgekleefd. Nu een nieuw doosje printen en voorzichtiger zijn... 

Vandaag heb ik last van de wet van Murphy, alles slaat zowat tegen...

Update 15 maart 2023 - 15:52

Het is zo goed als af en heb veel geleerd en dat was de bedoeling. Ik heb beide manieren van programmeertalen getest Python en C++, C++ lag me het best, dus hiermee ben ik verder gegaan. Het zijn geen gemakkelijke panelen om te programmeren, gewone RGB Matrixen met WS2812b zijn veel gemakkelijker. Maar ik heb het nu goed onder de vingers en kan nu verder programmeren. Dit ga ik afbreken nadat ik eerst enkele demonstraties aan vrienden zal geven en dan begin ik hiermee een speciaal meettoestel te bouwen.

Het was een leuke bezigheid, maar heb ook wel ferm gevloekt op sommige momenten. De spelcontroller krijg ik niet goed werkend, ondanks alle code juist is. Er zal ergens een verborgen conflict zitten, maar ik heb nu andere zaken aan mijn hoofd en dit is niet belangrijk. Deze 4096 led's bevattende Matrix was de hoofdzaak om deze werkend te krijgen. 

Hieronder een korte demo. Helaas is de kwaliteit van het filmpje slecht en had geen zin om het opnieuw te maken. In het echt zijn de kleuren mooi scherp en helder. Let niet op mijn stotteren in het filmpje, ik zit verdomd weer met veel pijn. De medicijnen slaan niet goed aan.

Ik hoop dat ik jullie interesse heb gewekt om ook eens zo'n Matrix uit te proberen en zal graag jullie ondervindingen aanhoren.

Panelen zijn verkrijgbaar bij Adafruit:  https://www.adafruit.com/product/4732

De controller heb ik gekocht bij Kiwi-Elektronics: https://www.kiwi-electronics.com/en/adafruit-rgb-matrix-hat-plus-rtc-for-raspberry-pi-mini-kit-1650

En ik heb een Raspberry Pi gebruikt die ik nog in stock had. En als voeding heb ik een ruisvrije 12V-6A benuttigd.

 

 THE END


Chris de professor

08 maart 2023

Laptopperikelen

Probleemgeval: ASUS K735SV

 Lees de updates onderaan!

Ik ben begonnen om een laptop ASUS K73SV te herstellen en dit is het grootste probleemgeval wat ik in mijn lange carrière ben tegengekomen.

Problemen: laptop start zeer slecht op en komt in een lus te zitten.

Na inspectie en wat testen, kwam ik tot conclusie dat de harddisk totaal versleten was, ontelbare harde sectorfouten.

Na een test van het RAM-geheugen stelde ik corruptie vast in de geheugencellen.

Ik heb de harddisk vervangen door een nieuwe SSD en 8GB nieuwe ram gestoken.

Na het opnieuw installeren van Windows 10 zijn er fouten met de drivers voor de Intel HDGRAPHICS 3000 beeldkaart. Deze wordt gedeeld met een Nvidia GT-540M. De Nvidia kan ik niet als master instellen en de Intel kan niet uitgeschakeld worden. 

Alle mogelijke drivers geprobeerd, doch ik krijg het beeld maar maximum op 1024x768 en werkt tergend traag.

Ik probeer nu de oude harddisk te herstellen, maar de schade is heel erg. Ik heb alleen de drivers van die harddisk nodig en als het me lukt om deze af te halen, dan kan ik verder. De harddisk is nu al 20 uur aan het proberen, maar er is weinig hoop.

Ik zoek verder voor een oplossing en ik heb hoop dat ik het zal vinden. Onmogelijk staat niet in mijn woordenboek 😉

Update:  

6 maart 2023 12:20

Drivers en nog wat ander rommel van de kapotte harddisk kunnen redden. Helaas gemerkt dat die oude kapotte harddisk vol met virussen zat, die heb ik eerst moeten vernietigen. Nu kan ik verder om een nieuwe Windows op die SSD te zetten. Zal ik nu slagen?  

6 maart 2023 13:50

Hoera het is me gelukt, doch na een update van Windows 10 was het weer naar de knoppen. Nu moet ik zoeken hoe ik de update van de drivers kan tegenhouden, Windows maakt er een zootje van. Het wordt weer een werk van vele uren. Ik beleef er wel plezier aan, maar mijn moed begin in mijn schoenen te zakken. Ik geef niet op met dit stuk ongeluk 😄

6 maart 2023 15:10

Volledig opnieuw beginnen. Na veel opzoekwerk en honderden pagina's te hebben gelezen, heeft iedereen problemen met die laptop met Window 10. Het was een fantastische machine in 2011 en Windows 7 draait er perfect op, maar helaas na verloop van tijden zijn de drivers steeds verder geëvolueerd en die Asus wil dit niet meer slikken. Nu ben ik bezig met eerst opnieuw Windows 7 op dat ongeluksding te zetten en doe dan een upgrade met een oude versie van Windows 10 en voorkom dat het de drivers zal updaten. Ik ben bezig een script te schrijven die deze computer optimaal zal houden voor zijn levenstijd.

Ik hoop dat ik niet zal falen in mijn opdracht, anders is mijn reputatie van alles oplosser naar de vaantjes 😂

6 maart 2023 15:45

De laptop is nu perfect geïnstalleerd. Ik heb weliswaar een oudere versie van Windows 10 moeten gebruiken, maar alles lijkt goed te zijn. Ik heb een script geschreven dat bij update de drivers niet worden veranderd, want dan begint de miserie, je kan het niet terugdraaien.

Ik ga het nu zeer grondig uittesten en dan moet dat ding zo vlug mogelijk van onder mijn ogen, was me dat een ramptoestel 😆

Maar wat kan je verlangen van een stukje voorvaderse antiek, maar soit, al mijn moeite is niet voor niets geweest en heb er veel uit kunnen leren. 

6 maart 2023 17:15

The End 😊 De computer werkt nu perfect met Windows 10. Alle updates werken, uitgezonderd voor de beeldkaarten, want de updates hiervoor geven extreme problemen.

Het was een koppig beestje, maar ik ben nog koppiger. Snel opgeven is niet mijn ding, ik sterf liever dan te falen met zoiets.

Nu hopen dat ze daar niet zoals voorheen Norton Antivirus opzetten, dan is de boel op de kortste tijd weer verprutst. Ik raad ze de standaard Windows 10 beveiliging aan met als extra MalwareBytes Antimalware, dan zitten ze beter beveiligd dan die Norton troep.

Dat ding heeft het lang volgehouden, van 2011 tot nu. De harddisk en ram geheugen die hebben uiteindelijk begeven, maar de rest lijkt me allemaal nog in orde. Ik heb alle hardware grondig nagekeken en als ze daar niet veel aan prutsen, kan dit ding nog een tijdje mee.


 



Dit wordt niet meer vervolgd!

 

Chris de professor

Java en AI

Mijn vraag aan Nancy-AI, wat zij vindt van AI geprogrammeerd met Java. Nancy zegt: Java is een populaire programmeertaal die vaak wordt gebr...