Cookies op Tweakers

Tweakers maakt gebruik van cookies, onder andere om de website te analyseren, het gebruiksgemak te vergroten en advertenties te tonen. Door gebruik te maken van deze website, of door op 'Ga verder' te klikken, geef je toestemming voor het gebruik van cookies. Wil je meer informatie over cookies en hoe ze worden gebruikt, bekijk dan ons cookiebeleid.

Meer informatie

Hobbyist draait Pac-Man met ESP32 op wandvullend scherm van 123x48 leds

Een tweaker toont op Twitter hoe hij Pac-Man speelt op een groot scherm, opgebouwd uit ledstrips en aangestuurd door een ESP32-soc. De hobbyist heeft nog wat werk te verrichten aan de software.

De Fransman Yves Bazin demonstreert in een korte video het voorlopige resultaat van zijn werk om Pac-Man te draaien op een ESP32-module en ws2812b-ledstrips. Met de leds maakte hij een wandvullend scherm. Bij het spelen maakt hij gebruik van een NES-controller. Pac-Man werkt nog niet volledig; zo kan Pac-Man de spookjes nog niet vangen en omgekeerd ook niet.

Eerder toonde Bazin al aan 20.000 leds op 130fps aan te kunnen sturen met de ESP32. Voor zijn Pac-Man-project stuurt hij zestien ws2812b-strips met slechts zes pins van de ESP32 op 90fps aan. Hij baseert zich op werk van Bitluni's Lab. Hij heeft de driver voor virtuele pins voor parallelle output via de ESP32 op GitHub vrijgegeven.

Door Olaf van Miltenburg

Nieuwscoördinator

01-01-2020 • 14:56

67 Linkedin

Reacties (67)

Wijzig sortering
Bitluni regeert sowieso hij doet erg veel met esp's en rgb led strips hij heeft ook een leuk YouTube kanaal => https://www.youtube.com/user/bitlunislab/.
En een veel cooler project waar hij nu mee bezig is! met een camera ed!
Thanks. Leuk werk inderdaad.
Veel van de dingen die hij doet lijken goed zelf te doen. Ik bedoel: solderen, programmeren, boren zagen, etc. Maar toch om er dan iets moois van te maken vraagt een hoop creativiteit.

(ook mooi dat hij in filmpjes verwijst naar projecten die nooit zijn afgemaakt... dat klinkt mij heel erg bekend O-) )
gebruikt hij kleine of grote LEDs?
De WS2812 is een 5x5mm SMT LED (5050 formaat) met seriële aansturing (Datasheet (PDF)). Dit zijn de kant-en-klaar strips, zo te zien met 30 LEDs per meter (zijn er ook in 60 en 144 LEDs per meter). Deze strips vind je genoeg op eBay en Ali Express, toverwoorden WS2812 en strip.
Het lijkt me ook goed om te vermelden dat er inmiddels opvolgers zijn die makkelijker aan te sturen zijn (WS2813) en bovendien op 12V bruikbaar zijn (WS2815), wat de efficiency ten goede komt.
Thanks voor de info, ik ben een tijd met een projectje bezig geweest met WS2812B's maar daar moest wel een serieuze stroomsterkte doorheen op 5v, fijn dat er nu een 12v alternatief is.
je zou eigen 24volt willen gebruiken.
met ongeveer 6ct per led ben je alleen al aan leds ruim 390 euro kwijt {btw vrij}
Die Hub75 panelen zijn een stukje vriendelijker voor de portemonnee. Daar is het ongeveer 1,2ct/LED, toch al weer 1/5 van de prijs (prijs in NL). Alleen nog beroerder aan te sturen doordat je hele spul moet PWM-en en de kleurweergave hondsberoerd is zonder kalibratie, dat is met WS2812 een stuk makkelijker.
Ik heb met dezelfde ESP32 twee HUB75 panelen van 32x64 ongeveer op 60fps draaien, misschien kan ie nog meer LED's aan, maar dat heb ik niet getest, ik had 2 panelen en 60fps als streefsnelheid.
https://www.youtube.com/watch?v=ANfwb7ikn9g
Als alles door 1 SPI bus loopt, dan is de frequentie: 32 * 64 * 60 FPS * 24 (RGB) * 2 panelen = ~6 MHz. De ESP32 kan tot 40 MHz door zijn SPI bus lopen, dus daar zit wat ruimte in. Of je moet verschillende seriële bussen / pinnen gebruiken, dan kan je een hoop meer aansturen :)

[Reactie gewijzigd door mohf op 2 januari 2020 14:59]

De ESP moet hele spul PWM draaien, er is geen SPI: dus voor 24-bit kleur heb je veel meer dan 24 cycles nodig. Overigens draaien de panelen op 3 poorten, iedere kleur 1. Je hebt dan poorten nodig van 60MHz voor 0-255 niveaus per kleur.
Beetje hobby / leuk project mag wat centjes kosten toch?
Cool. Eens inlezen. Mijn 779 lange ledstrip (langs de goot) wordt nog aangedreven door een ESP8266. Alleen heeft ie met een string van die lengte wel moeite. Ik haal iets van 20-30 updates per seconden. Ben benieuwd hoeveel strings er gebruikt zijn voor dit formaat.
Ik snap ook werkelijk niet waarom iedereen zo'n fan is van de WS2812b, het protocol met een enkele pin heeft een vaste snelheid en vereist dus ook dat jou microcontroller deze timing afhandelt.

Meestal is de code hiervoor dus erg inefficiënt en gebruikt veel werkgeheugen. Bij de Arduino-Uno implementatie bijvoorbeeld moet je alle kleuren van elke pixel in het geheugen zetten en kan de microcontroller tijdens het schrijven niets anders uitvoeren omdat de code blocking is.

Bij een op SPI gebaseerde ledstrip, kun je hardware-spi gebruiken (of eenvoudiger bit-bangen in software), bepaal je zelf de overdrachtssnelheid en kun je zelfs pauzeren tussen het sturen om een andere taak tussendoor uit te voeren.

Hierdoor is een SPI-gebaseerde strip ook goed werkend te krijgen op een Raspberry Pi en kun je sneller en efficiënter data overdragen.
Daarnaast kun je runtime berekenen welke kleur de volgende pixel moet zijn, dus hoef je niet alle kleuren/pixels op te slaan in een grote array.

Hierdoor is het ook een stuk schaalbaarder met meerdere en langere strips, waarbij men bij de WS2812B kiest om gewoon meer hardware toe te voegen....
jij hebt er duidelijk kaas van gegeten, heb je een advies voor zo'n SPI-gebaseerde strip? Zijn die vergelijkbaar in prijs?
Hier een link naar een duidelijker verhaal:
https://cpldcpu.wordpress.com/2014/08/27/apa102/

Daar komt ook nog bij dat de PWM snelheid van de LED's zelf hoger is, dus minder "flikkert" (ook hij beweging).

je kunt het beste zoeken op APA102c of WS2813 (weet niet of het voordeel van PWM ook voor de tweede geld.

Ik kan eigenlijk niet terugvinden hoeveel ik betaald heb voor die strip (is al een tijd terug), maar het loont heel erg om veel verschillende (Chinese) webwinkels door te spitten. Als je in een Nederlandse webwinkel zo'n strip koopt, komt die eigenlijk ook altijd uit dezelfde fabriek, alleen dan een stuk duurder.
Ik denk dat ze iets duurder of moeilijker te vinden zijn, omdat ze minder gangbaar zijn, maar afhankelijk van je use-case zeker de moeite waard. Ik ben er zelf ook gewoon principieel op tegen om iets te gebruiken wat inefficiënt is, zeker met Arduino.

In mijn geval had ik niet genoeg bytes over om de hele WS2812b aan te sturen. Ook een eigen implementatie kan niet echt omdat je gebonden zit aan de vaste snelheid.
Toen ik een SPI strip gebruikte kon ik tijdens het schrijven de kleur van de volgende LED berekenen. Bijvoorbeeld simpelweg groen/rood afwisselende kleuren uit te sturen, in plaats de hele strip van tevoren in een array te zetten en dan uit te sturen.
Helder, dank! Op aliexpress kom ik vooral de SK9822 tegen, dat lijkt een kloon van de APA102 (ze zeggen zelf ook C, maar dat betwijfel ik).

De WS2813 noemde @Exirion ook; ik besefte niet dat die ook SPI doet. De 12V van de WS2815 klonk ook nuttig..
https://cpldcpu.wordpress...22-a-clone-of-the-apa102/ conclusie: de SK9822 is niet een exacte kloon van de APA102; er zijn een aantal interessante verschillen.
Misschien nog wat inspiratie opdoen bij Quindor?

Deze Nederlandse vlogger heeft ook veel eigenbouw op youtube gezet
https://quinled.info
Op de ESP wordt meestal ook gebruik gemaakt van hardware offloading met DMA via de I2S output: https://youtu.be/6zqGwxqJQnw
Aah, dat is de reden dat het überhaupt kan?

Vziw moet de processor soms wat tijd indelen om WiFi af te handelen en daarnaast vond ik het al apart dat ze zo'n strakke timing voor elkaar kregen.

Bij een ESP kan zo'n WS2812 inderdaad 'prima' voor Arduino (weinig geheugen), Raspberry Pi (niet realtime) of heel lange stukken (doorvoersnelheid van SPI kun je zelf bepalen), heb ik liever een SPI-gebaseerde strippen.
De ESPs hebben sowieso ook gewoon hardware SPI aan boord (zoals vrijwel iedere uC), maar de I2S/DMA variant voor de WS2812 is inderdaad een erg effectieve methode. Die wordt wel voor meer leuke dingen ge-/misbruikt (oa analoog TV signaal genereren).
Het ligt mijn inziens maar net aan de toepassing welke variant beter is (3 vs. 4 wire). Voor niet te grote aantallen (>~500 pixels per string) is meestal de 3 draads variant meer dan snel genoeg en werkt eenvoudiger voor veel mensen. Als je een project hebt waarbij de timing kritisch is en/of grotere aantallen pixels zou ik inderdaad voor de 4 pins variant gaan. Zoals altijd is er geen enkele perfect oplossing, maar bedenk wel dat de populariteit ergens vandaan moet komen :)
Ikzelf gebruik overigens graag de SK6812 variant die er ook in RGB(C/N/W)W is.
Vrijwel iedere Cortex-M microcontroller kan een PWM signaal genereren die dmv DMA met data wordt gevoerd en zo het WS2812 signaal genereert.
Op die manier heb je vrijwel 0 CPU kracht nodig om de LEDS op volle snelheid van data te voorzien, in tegenstelling tot jouw 'bitbanging' oplossing, SPI+DMA is vergelijkbaar qua CPU gebruik.

Qua RAM gebruik zul je wel meer nodig hebben omdat je een DMA buffer moet hebben van redelijke grootte.

Zie bv ook hier: https://hackaday.com/2013...o-drive-ws2812-led-pixels
Dat vertelde @Thedr hierboven inderdaad ook.

Maar dat neemt niet weg dat:
- Op andere platformen (ATmega) of omgevingen Raspberry Pi/Raspbian je (eenvoudig) toegang hebt tot DMA. SPI is vaak veel toegankelijker.
- SPI makkelijker te bit-bangen is (niet timing gerelateerd) en ook wanneer je tussendoor interrupts ontvangt/afhandeld. (Hiermee bedoel ik niet dat bitbangen beter is dan het in hardware oplossen; in tegendeel zelfs)
- Je met SPI nogsteed zelf de transmissiesnelheid kan bepalen; snellere CPU = sneller pixels pushen.

Echter weet ik niet of DMA op alle pins werkt waar (hardware) SPI niet altijd op alle pins werkt.
Voor grote installaties kun je gaan zuren dat het per strip ook 1 pin scheelt; maar bij SPI kun je voor al je LED's 1 clock-pin nemen en dan elke andere output-pin gebruiken als data voor al de aangesloten ledstrippen.
Het zou handig(er) zijn om een mogelijkheid te hebben de kleuren in een lookup table met (bijvoorbeeld) 256 posities te hebben. Dat zou bij grote strips veel ruimte besparen. Ik heb vluchtig in de neopixel bibliotheek gekeken, maar die is niet heel eenvoudig aan te passen.
D'r is niet echt een efficiëntere manier om 24-bits op te slaan in 3 bytes?
Maar inderdaad een goeie, je zou in theorie 256 unieke kleuren kunnen (en in 1byte per pixel) op kunnen slaan, dan snoep je simpelweg de minst significante bits weg?

Maar dat is exact mijn punt, omdat NeoPixel (1-wire/ws2812b) ledstrippen een protocol gebaseerd op timing hebben, verschilt de implementatie per hardware, waarin sommige in assembly een x-aantal NOP instructies hebben om de timing juist te krijgen (als het platform geen DMA ondersteunt).

Hierdoor is het moeilijk om de library aan te passen met dit soort optimisaties, terwijl je bij een SPI-gebaseerde strip rustig tijdens het berekenen van de pixels, ze uit kan sturen. (Of op een hogere snelheid uitsturen)
Is een ESP soc zoiets als Arduino? Of kan ik t vergelijken met een Raspberry Pi?
Het zit er een beetje tussenin.
Basis Arduino: 16MHz, 8 bit, 2kB RAM
ESP32: 160MHz, 32 bit, 512kB RAM
RPi, 1400 MHz, 32 bit, 1-4GB RAM.
Ok, interessant. Wat is t voordeel van zo'n chip tov een RPi bijv? Lager verbruik, meer hardware poorten?
Aantal IO pinnen is vergelijkbaar. Voordeel is prijs en afmeting, met standaard 2x20 pin header is ie ongeveer 27x55mm, kosten ongeveer 10€ maar in bulk/met 4 weken wachten gaat de prijs omlaag richting 2,5€. Maar heb je minder pinnen nodig: module zelf is maar 2x2 cm.

Ben trouwens ook fan van ItsyBitsy M4, die is nog kleiner, en ook behoorlijk krachtig.

[Reactie gewijzigd door blanka op 1 januari 2020 22:22]

a) wifi b) fractie van de prijs c) kleiner.
Ik heb er een paar voor klokjes, temperatuur metingen, klik-aan-klik-uit (maar dan via wifi) Met gebruik van de MQTT library kunnen ze makkelijk gegevens (leesbare tekst string) uitwisselen met een raspberry pi waar node-red / dashboard / mosquitto op draait. Of in het geval van de klokjes de tijd van de router halen.
Lagere kosten.
Kleinere afmetingen.
Geen (volwaardig) OS, blijft eindeloos draaien zonder onderhoud.
Veel beter realtime gedrag dan bij standaard Linux gebaseerde systemen.
Laag energieverbruik in low power modes, geschikt voor batterijgevoede apparatuur.
Ingebouwde ADC's en meerdere SPI/I2C/UART interfaces.
Arduino compatible.
Surface mountable op je eigen PCB's.
Veel van de ESP32's die je koopt zijn een 240mhz dual core. Voor die paar euro is het een behoorlijk beest van een ding met een hoop features (WLAN, BT, SPI, I2C, CAN controller en nog meer). Heb nog wel het idee dat de libraries wat meer buggy zijn dan voor de 8266 maar dat mag de pret doorgaans niet drukken.

Micropython is ook cool, maar daarmee kwam ik niet uit voor m'n laatste projectje (met GSM800L module geintegreerd op het bord voor 12 euro...bizar) :)
Draai zelf NodeMcu esp8266 V2 past makkelijker op breadboard. ESP +- 2 euries breadboard met snoertjes 3 euro. Bestel gewoon 3 of zo wat sensoren en je kunt leuk hobbien. Lijkt wel de oude Philips experimenteer dozen. Geen soldeerbout nodig. Verder draai ik er EspEasy op. Beetje juiste sensoren zoeken die het ondersteund draadjes erop, binnen 5 min heb je een weerstation beweging alarms sensor of wat je leuk vind. Display eraan kan ook voor +- 1,5 euries. Geweldig spul
Ho eens

Men kan niet 'zomaar' een Arduino vergelijken met een Raspberry Pi, dit zijn twee verschillende soorten systemen.

De Arduino is een Microcontroller(-ontwikkelingsbord 'platform'), deze heeft RAM/Flash, CPU en periphery in een enkele 'chip'. De Raspberry Pi is een "Single Board Computer" en combineert chips voor USB, RAM en processor op een printplaat.

De Raspberry Pi is dus een 'kleine computer' (wel gebaseerd op ARM; dus je draait er geen x64/86 programma's op). Veelal draait hier een variant van Linux op, het voordeel is dat je een heel OS hebt dat alle hardware afhandelt; en jij eenvoudig je Python/Java code kan draaien.
(D'r zijn mogelijkheden om een Raspberry Pi zonder OS 'barebones' te draaien, maar dat is niet zo triviaal)

Een Arduino is een ontwikkelingsbord/platform rondom verschillende microcontrollers, bijvoorbeeld de Atmega328P (of 32u4). Het voordeel van een microcontroller is dat het een op zichzelf draaiend systeem is, het heeft eigenlijk alleen een voeding nodig (in dit geval 5V, dus kan direct uit USB, soms ook direct via sommige combinaties aan batterijen).

Het voordeel van een microcontroller is:
- Enkel en klein component; makkelijk te plaatsen in een apparaat (bijvoorbeeld een afstandsbediening).
- Lage stukprijs; bijvoorbeeld voor plaatsen in commerciële "smart lamp"
- Geen aparte storage (SD kaart) o.i.d. nodig.
- Makkelijker "real time" te maken omdat je zelf de flow van het programma bepaald.

Het nadeel is natuurlijk dat het een stuk minder krachtige hardware is; maar omdat het geen overhead van een OS heeft; betekend dat JUIST NIET dat het langzaam is.

Overigens is "Arduino" de merknaam voor het ontwikkelingsbord, ontwikkelsoftware en (enigszins) de community er omheen. De door @blanka gegeven specs zijn dus ook specifiek voor de Arduino Uno (en een aantal andere), maar er zijn veel snellere varianten.
Eerder met Arduino. Ook te programmeren via Arduino IDE. Veel bordjes online te vinden, o.a. NodeMCU is een (door mij) veel gebruikt bord. Via o.a. AliExpress makkelijk en goedkoop te bestellen.
Goedkoop JA, makkelijk NEE. Die dingen haal je om de hoek voor amper meer dan direct uit China. ESP is ongeveer 10€ hier in NL.
Wemos ESP8266 bordjes incl. USB interface zijn nog geen 2 euro in China.
Programmeren kan met arduino.cc en de esp8266 library in C(++)
er zijn een hoop voorbeeld projecten te vinden.
Er zijn inmiddels ook voorgeprogrammeerde oplossingen met een webinterface die alleen wat configuratie vergen.
Dat is vooral leuk als je beetje vooruit kunt plannen. 4 weken verzendtijd wordt ik niet blij van. Betaal ook liever wat opslag voor lokale webshop, komt mijn geld zinniger terecht dan dat Chinezen krom moeten liggen voor hun tante-pos subsidie. Hoop ook echt dat EU Trump gaat volgen, die wil terecht die idiote internationale post-afspraken van tafel vegen.

[Reactie gewijzigd door blanka op 1 januari 2020 22:39]

Die chinezen sturen het per vrachtcontainer naar de luchthaven, dat de post.nl nou zo achterlijk duur is. Je lokale webshop besteld ze ook in China en betaald als het meezit wel BTW.

[Reactie gewijzigd door bouwfraude op 1 januari 2020 22:42]

En waarom zijn die zo duur? Die lopen gewoon het verlies op het afleveren van Chinese pakketjes te compenseren, daar krijgen ze geen cent voor. Je betaalt je goedkope Chinese post elders gewoon terug! Overigens kunnen deze dingen gewoon in envelop tot 20 gram, is qua verzend 1€.

[Reactie gewijzigd door blanka op 1 januari 2020 22:45]

Zoek maar eens op ESP8266 en ESP32 en er gaat een wereld voor je open. Een leuk adres om spul te bestellen en niet op verzending vanuit China te hoeven wachten: https://www.tinytronics.nl/
Daar kom ik ook graag. Overigens de naam goed letterlijk nemen. Iedere keer verbaast het met weer hoe klein de bestelling is....
Volgens mij kun je het het beste zien als een Arduino met ingebouwde WiFi. Als ik het me goed herinner kun je hem zelfs programmeren vanuit de Arduino IDE, maar ik verwacht dat iedereen die een beetje geavanceerde dingen wil doen zelfs een Arduino niet vanuit die IDE wil programmeren.

[Reactie gewijzigd door 84hannes op 2 januari 2020 08:56]

Ik zou voor Platformio kiezen. Even een drempeltje maar daarna zul je geen spijt hebben.
Heel erg gaaf dit.
Ik gebruik de esp's zelf ook en je kunt er heel erg veel mee.
... Slimme meter uitlezen en via mqtt versturen
.... Bel domoticaseren.
.... Ledstrips aansturen
en dan nog 1000en1 dingen die je maar kunt bedenken.
Leuk, laat ons een horen hoe jij de slimme meter met ESP uitleest. Gaaf.
je kan overigens ook "domme" digitale meters uitlezen door een puls teler op het ledje te zetten dat knippert bij verbruik, zie https://esphome.io/cookbook/power_meter.html
Top! Ik duik daar eens in.
Genoeg over P1 uitlezen te vinden op het forum hier trouwens
Zou hem eerder een "maker" noemen dan een "tweaker"
Je bedoelt omdat deze beste man niet op het Tweakers forum actief is?

Andersom zijn wel veel Tweakers-leden ook "makers", maar inderdaad relatief weinig "makers" ook daadwerkelijk Tweakers-leden.
Het wordt pas echt leuk als zodra de ESP port van Doom hiermee draait ;)
Een jaar of 25 geleden zag ik in Delft een flatgebouw waar Tetris met de galerijverlichting werd gespeeld. Geweldig leuke ervaring.
24 jaar geleden.
https://youtu.be/LwNQqePk8Kg
Tetris for buildings!
Super dat je dit hebt gevonden E-Flex!
Ja leuk! Bitluni is een coole slimme dude, aardige gozer en tevens grappig. Volg hem al een tijdje en het is verbazend geweldig wat hij uit zo'n ESP weet te 'persen' dankzij de I2S bus. Gooi geen oude monitoren weg, ben je handig kijk eerst naar zijn kanaal. Dat PacMan scherm is natuurlijk hartstikke leuk, leuk dat het kan en een leuke gimmick maar hoe vaak zal je het gebruiken. Is wel geinig op een maker-faire bijvoorbeeld. Uiteraard kun je met zo'n scherm ook andere dingen weergeven natuurlijk.

Waar ik echt van onder de indruk was, is de Odroid Go, dat een ESP32 gebruikt om allerlei (game-)platformen te emuleren (en zeker voor die prijs). Het kan zowel gebruikt worden als Arduino (pinheader/pin breakout aanwezig) of game 'console' - platform emulator, een leuke tool voor kinderen en oudere kinderen natuurlijk :9 :)
Oei, leuk, i, ga mij hier eens in verdiepen, leuk om oude arcade games zo te spelen :)

Op dit item kan niet meer gereageerd worden.


Apple iPhone SE (2020) Microsoft Xbox Series X LG CX Google Pixel 4a CES 2020 Samsung Galaxy S20 4G Sony PlayStation 5 Nintendo Switch Lite

'14 '15 '16 '17 2018

Tweakers vormt samen met Hardware Info, AutoTrack, Gaspedaal.nl, Nationale Vacaturebank, Intermediair en Independer DPG Online Services B.V.
Alle rechten voorbehouden © 1998 - 2020 Hosting door True