ESP32 DevKit: Alice in Wonderland oftewel eerste vingeroefeningen en lessen.

marcob

Golden Member

Op internet zijn genoeg voorbeelden van programma's die gebruiken maken van de dual core. Het ging mij er ook niet om dat je processor capaciteit te kort kwam, maar ter leering en vermaak. En het kan gewoon in de Arduino IDE.

voorbeeld: https://circuitdigest.com/microcontroller-projects/esp32-dual-core-pro…

People tend to overestimate what can be done in one year and to underestimate what can be done in five or ten years

Op 11 maart 2023 15:16:43 schreef Paulinha_B:
Maar hoe kan men daarmee experimenteren? Is er een manier om te maken dat bepaalde code enkel op de ene core draait, en andere code op de andere? Als men een operating system heeft dan kan men zich verlaten op de task switcher oftewel run queue handler of hoe het ook moge heten; maar hier hebben we toch helemaal geen O/S?

Je hebt op de ESP wel een OS, FreeRTOS. Met de Arduino-omgeving kun je die negeren, maar je kunt er ook gewoon bij. Alle functies van de "Gesofistikeerde" ESP-IDF omgeving kun je gewoon bereiken uit de Arduino-omgeving.

Uitleg: https://randomnerdtutorials.com/esp32-dual-core-arduino-ide/

Zit een leuk voorbeeld bij waarmee je twee leds door twee cores laat knipperen. Soort Blink-Kwadraat :-)

Edit: En ik zie nu dat marcob hetzelfde artikel op een andere plek gelinkt heeft....

Hehe, ik wist wel dat ik veel te ontdekken had, maar dat het zoveel ging zijn dat had ik toch niet verwacht. Allen bedankt, ik denk dat ik voor een hele poos mijn handen vol heb. Vooral dat FreeRTOS benieuwt me - wat niet mag verbazen, terugdenkende aan mijn bescheiden carriere als Unix-sysadmin.

Die blink-kwadraat is op het allereerste zicht precies het soort voorbeeld waar ik benieuwd naar was!

[Bericht gewijzigd door Paulinha_B op zaterdag 11 maart 2023 20:14:54 (15%)

De ESP32 vind ik echt wel een prachtige µ-controller met veel power voor weinig geld. Ook freeRTOS is bijzonder handig : in mijn toepassing gebruik ik een "blocking" Arduino library (e-paper aansturing), maar met RTOS is dit geen enkel probleem, dit wordt gewoon in een aparte "thread" afgehandeld. Een linkje naar mijn project met de ESP32(GPS-logger voor speedsurfen) :https://github.com/RP6conrad/ESP-GPS-Logger/blob/master/README.md

Ik zou van dat OS verhaal voorlopig nog maar ver blijven. In de controller wereld heb je dat zelden nodig. Tuurlijk, in sommige gevallen handig en als je er aan toe bent zeker leuk om mee te klooien, maar voorlopig niet doen. Er zijn genoeg leukere dingen voor eerst :-)

"We cannot solve our problems with the same thinking we used when we created them" - Albert Einstein

OS krijg je er bij de ESP32 gratis bij.
Het is lastiger (slechter gedocumenteerd, geen kant-en-klare IDE) om bare-metal op een ESP32 te doen dan om gewoon het voorgebakken FreeRTOS te gebruiken.

Natuurlijk kun je daar heel veel van vinden (een compleet OS, dat in sommige opzichten krachtiger is dan MS-DOS ooit geweest is, om een LEDje te laten knipperen), maargoed, das dezelfde discussie waarom je die LED niet met een 555 laat knipperen.

(Waarom heb je in hemelsnaam een compleet IC nodig om een led te laten knipperen, het kan toch ook met een transistor!)

((Waarom heb je uberhaupt een halfgeleider nodig, een clignoteur-relais werkt toch ook!!!))

(((Ja, ik weet dat een clignoteur niet werkt met een gewone LED. Wel met een 100W LED-chip, en dat is ook gaaf)))

((((En als je die 100W LED chip nu met een ESP32 op internet zit, kun je lol hebben. Wel een webcam installeren :-) ))))

Het vervelende van dat OS is dat het potentieel met het real-time gedrag van je microcontroller gaat rommelen. Juist daarom kan het zo handig zijn dat het ding 2 cores heeft; laat één core alle niet-real-time dingen, als Bluetooth, Wifi, USB, CAN, etc. doen, en gebruik de andere core voor de real-time processen. Dit is dan bijna hetzelfde als 2 aparte microcontrollers gebruiken, behalve dat deze 2 cores veel gemakkelijker en sneller kunnen communiceren, via gedeeld geheugen (met de gebruikelijke valkuilen, uiteraard).

Een manager is iemand die denkt dat negen vrouwen in één maand een kind kunnen maken
benleentje

Golden Member

Ik probeer jou en andere er op te wijzen dat bepaalde eigenschappen niet zo zijn als je zo kunnen verwachten,

Ik had me een tijdje terug al een beetje ingelezen vooral betreffende de ADC in deze modules, die is dus dramatiesch slecht,

Daarom moet je ook altijd wel als je iets wilt gaan gebruiken je er een klein beetje in verdiepen. Dan bedoel ik eigenlijk alleen voor hetgeen je op dat moment nodig hebt, want als je geen SPI gaat gebruiken moet je dat ook niet te weten. Niet elke pin heeft bijvoorbeeld PWM of een ADC of kan je voor interrupt gebruiken. Er zijn soms zelf pinnen die open collector zijn, die word dan als uitgang wel laag maar met hoog komt er niets uit en kan je niet direct iets mee aansturen. En soms hebben analoge ingangen ook zo hun beperkingen en kun je ze niet altijd als uitgang gebruiken. Als je iets gaat maken waarvoor veel IO nodig is kun je dit beter van te voren goed uitzoeken want het kan ook zijn dat wat je wilt gaan gebruiken ongeschikt is.

Voor zover ik weet was de ADC van ESP2866 dramatisch slecht en is die van de ESP32 een stuk beter en zoals sparkyGSX ook zegt wel bruikbaar.

De ADC in de ESP is dermate gammel dat ik niet weet of ik dat wel in een commecieel product zou willen hebben.

Dat vind ik ook wel erg overdreven. Dat is gewoon een kwestie van ermee gaan testen maar ik denk dat je nog de ADC van ESP2866 in je hoofd hebt die is wel heel erg slecht.

Het leuk in dit topic is dat iedereen gelijk heeft! ;). Wat voor de een goed is met zijn applicatie is het dat niet voor een ander.

Let wel, ik gebruik totnogtoe de Arduino IDE, en behalve de "gewohnungsbeduerftige" editor bevalt me dat best. Misschien is stoeien met de aparte cores enkel mogelijk vanuit een iets gesofistikeerder werktuig?

Ik denk om de cores apart te kunnen gebruiken je daarvoor gewoon een librarie moet hebben die dat voor je doet. Maar ik denk ook dat je dan veel meer van C++ moet afweten en hoe je goede software maakt.

Mensen zijn soms net als een gelijkrichter, ze willen graag hun gelijk hebben.
JoWi

Special Member

Op 13 maart 2023 16:30:19 schreef SparkyGSX:
Het vervelende van dat OS is dat het potentieel met het real-time gedrag van je microcontroller gaat rommelen.

Laat ik nu altijd gedacht hebben dat in FreeRTOS de letters RTOS staan voor Real Time Operating System. :)

Ignorance is bliss

Klopt, maar een systeem met een real-time OS waarvan een groot deel een black box is, is alsnog onvoorspelbaar.

Vertel me even wat de worst-case latency is van een ESP32?

Een manager is iemand die denkt dat negen vrouwen in één maand een kind kunnen maken
JoWi

Special Member

Op 14 maart 2023 08:16:26 schreef SparkyGSX:
Klopt, maar een systeem met een real-time OS waarvan een groot deel een black box is, is alsnog onvoorspelbaar.

Vertel me even wat de worst-case latency is van een ESP32?

Geen idee, niet veel gedaan met een ESP32.
Maar bij FreeRTOS is de maximum lantency gelijk aan de latency van de processor als je een interrupt hoger dan MAX_SYSCALL_INTERRUPT_PRIORITY kiest.
Daaronder is ie een stuk groter, maar wel voorspelbaar.
Dat is een van de eigenschappen van een RealTime OS. En dan maakt het niet uit of je een ESP32 of bijvoorbeeld een Cortex gebruikt.

Ignorance is bliss

Op 14 maart 2023 08:16:26 schreef SparkyGSX:
Klopt, maar een systeem met een real-time OS waarvan een groot deel een black box is, is alsnog onvoorspelbaar.

FreeRTOS is weinig black box, de source zit er gewoon bij.

Of het geschikt is voor je doel, tja, dat is een heel andere vraag. Maar als je zoals TS met de Arduino IDE werkt, dan denk ik dat het Real-Time gedrag niet je grootste zorg is.

Op 13 maart 2023 21:55:33 schreef benleentje:
Ik denk om de cores apart te kunnen gebruiken je daarvoor gewoon een librarie moet hebben die dat voor je doet. Maar ik denk ook dat je dan veel meer van C++ moet afweten en hoe je goede software maakt.

Die library zit er sowieso bij, ook als je met de Arduino IDE werkt kun je iedere functie van de ESP-IDF gebruiken.

Of je moet weten hoe je goede software maakt... Om te experimenteren hoef je geen kennis te hebben, het idee is toch dat je ervan leert?

Natuurlijk kun je je met twee cores nog veel makkelijker in je voet schieten dan met een multitasking systeem op 1 core, maar wat is het ergste dat kan gebeuren? Dat je LED niet gaat branden?

Gewoon proberen, en vergeet niet dat ook jij vatbaar bent voor het Dunning-Kruger effect :-)

blackdog

Golden Member

Hi,

Voorbeeldje van een deel van het "Error Budget"
Er zijn zeer grote verschillen bij de ADC's van allerlei typen Arduino en vergelijkbare microcontrollers.
De door mij veel toegepaste Teensy controllers zijn vaak goed wat de ADC betreft, maar hebben ook bij verschillende modellen(SAR ADC) een erg lage ingang impedantie!
Rond de 4K b.v bij sommige modellen, die kan je bijna niet gebruiken zonder er een opamp voor te zetten.

Voor mijn project met 4 en 8 NTC weerstanden die ik moet uitlezen, zijn geen van de ADC's in de microcontrollers die ik hier heb, goed geschikt.
Ze zijn allemaal te laag wat ingang impedantie betreft, uiteindelijk wordt het 2x een ADS1115 die een paar Mega Ohm is bij de door mij gebruikte instelling.

Waarom te laag? nog een stukje "Error Budget", om de dissipatie in de NTC laag te houden(zelfopwarming) wil je dat er weinig stroom loopt door de NTC en dus daarom zou ik graag b.v. een 50K NTC gebruiken.
Met deze 50K doet de weerstand b.v. van de aansluitkabel eigenlijk niet meer mee in het Error Budget,
maar loop je tegen de ingang impedantie van je ADC aan, welke bij het +-2,5V bereik van de ADS115 rond de 5Meg is.
Uiteindelijk kan dat wel, omdat voor deze toepassing geen grote precisie en resolutie van belang is en de vervang weerstand van de 50K NTC met zijn Pull Up weerstand minder is dan 1% van de ADC ingang impedantie.

Die 5Meg staat dus parallel aan de NTC en zijn instel weerstand. stel je nu de situatie voor dat je een microcontroller hebt, die 5 of zeg 18K heeft als ingang impedantie...
Met deze lage ingang impedantie is nooit goed een NTC mee uit te lezen, de instelweerstand samen met de NTC waarde voor een bepaalde temperatuur word dan te zwaar belast door de ingang impedantie van de ADC, hierdoor krijg je grote fouten in de af te lezen temperatuur.
Oja, nu niet gaan zeggen, dan neem je toch een digitale sensor of een LM35, daar gaat het hier niet om, dit is alleen om te laten zien waar je allemaal tegenaan loopt bij bepaalde toepassingen.
En dit zijn maar twee stukjes uit het totale "Error Budget"

De lineairiteit van de ADC en de te kiezen schaalfactor is dan nog niet besproken, ruis van de ADC, Referentie spanning stabiliteit, ik kan nog wel even door gaan. :+
Deze afwegingen wat betreft de ADC, gelden trouwens voor iedere microcontroller.

Zijn het langzame signalen, dan kan je om de ADC goed te laten werken, een condensator parallel aan die ingang gezet worden,
dit voor typen microcontrolers die een capacitieve ADC hebben en een relatieve hoge aanstuur bronimpedantie hebben.

Ik hoop dat dit voorbeeld wat inzicht geeft.

Groet,
Bram

You have your way. I have my way. As for the right way, the correct way, and the only way, it does not exist.

Ik ken geen microcontrollers met een ingangsimpedantie van "een paar k". De STM32F4 bijvoorbeeld, heeft een sampling switch resistance van 6k, maar dat is NIET de ingangsimpedantie!

Voor NTCs kun je sowieso een capje vlak bij de microcontroller pin zetten, om de S&H condensator vlotter vol te krijgen, daarmee minder afhankelijk te zijn van een lange sample tijd, en andere ruis weg te filteren. Daarbij zou je ook NTCs met een lagere weerstand kunnen gebruiken, en de voeding daarvan schakelen met een MOSFET, zodat er maar een klein deel van de tijd stroom loopt, en op die manier de eigen opwarming beperken.

Je doet nu weer alsof jouw oplossing de enige of beste oplossing is, terwijl de probleemstelling naar mijn idee al niet deugt. Als je nou stelt dat je die 16 bits nodig hebt, is dat natuurlijk een legitieme reden om een externe ADC te gebruiken, en in veel gevallen zal een externe ADC minder ruis geven dan de interne, simpelweg omdat die verder weg zit van de digitale logica van de CPU, en je de voeding beter stil kunt krijgen. Allemaal geldige argumenten, maar dat zeg je niet.

Een manager is iemand die denkt dat negen vrouwen in één maand een kind kunnen maken

Vrij vertaald uit "O grande livro de verdades profundas de Paulinha":

je moet geen antwoorden bieden op vragen die niet gesteld werden
je moet geen wijsheid aandragen bij lieden die er niet naar op zoek zijn
je moet geen oplossingen bieden aan mensen die geen probleem zien

@paulinha_B

Daar sluit ik mij volledig bij aan, jammer dat dit in potentie leuke topic een beetje ontspoord is. Ikzelf ben bezig met te bekwamen in raspberry pi pico maar ben een beetje huiverig om hierover kond te doen.

Paul

I thought, I thought of everything

de ADC zijn wel goed van arduino varianten, maar de spanningsreferentie zijn niet stabiel. niet intern, nite de 3,3V, niet de 5V. als de boel warm wordt, beginnen die te verlopen. in de winter en zomer krijg je verschillende meetresultaten. wat ben je dan met 12 bits als de referentie verloopt

voedingsspanning zou ik er al niet meer meten dan, tenzij je enkel wil weten of er 4-5 of 6V op staat

ik hou van werken ..., ik kan er uren naar kijken
blackdog

Golden Member

Hi SparkyGSX,

Nogmaals, leer begrijpend lezen!

Ik geeft juist aan dat ik in mijn voorbeeld kies voor NTC's met een hogere waarde en ook waarom.
Ook geef ik aan wat onder meer de gevolgen hiervan zijn en dat ik met die gevolgen rekening probeer te houden, wat begrijp je daar niet van?

Hou je er rekening meer dat dit jouw negatieve gedachten/mening is: Je doet nu weer alsof jouw oplossing de enige of beste oplossing is, terwijl de probleemstelling naar mijn idee al niet deugt.
Projecteer jouw negatieve gedachten niet op mij, dit wordt niet gewaardeerd!

Ik heb niet gesteld dat ik een 16 bit ADC nodig heb, ik ben nog bezig allerlei zaken op een rijtje te zetten en te kijken wat ik beschikbaar heb voor mijn projectje.
En dat is onder meer een paar printjes met de ADS1115 er op, een paar Maxim 20-bitters en een paar 24 Bit ADC's van Analog Devices, oja ook nog een paar 12 bitters van Microchip en diverse microcontrollers.
Voor de makkelijkheid wordt het waarschijnlijk de ADS1115 niet omdat ik unipolair echt 15 bit nodig ga hebben, hoeveel echt, zal uit de berekeningen volgen.
Maar daar ging het niet om, het gaat er om dat je als beginner b.v. een ADC gebruikt, wat veel voorkomt als je met microcontrollers gaat werken, dat er aardig wat eigenschappen zijn die je performance aantasten.

Ik geef twee voorbeelden uit de vele items van het error budget van een project waarmee ik bezig ben en jij presenteert dit alsof ik vind dat iedereen dat zo moet doen, dat is echt bullshit!
Het gaat er om dat je nadenkt over de fouten die in totaal kunnen optreden en ik geef voor het inzicht voor de CO lezers een paar punten aan, als je dit niet begrijpt gaat er bij jou toch echt iets mis met begrijpend lezen...

Standaard bullshit gedrag is, ergens één of twee punten uithalen en dit belachelijk maken zonder te kijken waar het om gaat, alleen maar om punten te scoren, je lijkt wel een politicus. :+

Dus als je echte opmerkingen hebt, over b.v. het error budget bij ADC gebruik, geen probleem, je opmerking over het schakelen van de voeding voor de NTC's is wat je kan doen om het zelf opwarmen te verminderen.
Dat houd natuurlijk dan ook in, dat de settle time meestal nogal lang wordt, in ieder geval is dit niet gewenst voor hoe ik het ga toepassen in mijn projectje,
waarbij ik rekening moet houden met een redelijk hoog stoorveld en ESD beveiliging.
En hierdoor moet ik redelijk stevig de NTC ontkoppelen.

Voor andere is het schakelen van de voeding van de stroombron of Pull Up weerstand wel iets wat goed bruikbaar is, ik ken hun schakeling niet, maar misschien ga je me nu alnog verwijten dat ik andere manier niet hier heb besproken...

Groet,
Bram

You have your way. I have my way. As for the right way, the correct way, and the only way, it does not exist.

IK HEB EEN ECHTE OPMERKING

BLIJF AUB BIJ HET ONDERWERP VAN DIT DRAADJE

DAT LUIDT

EERSTE VINGEROEFENINGEN EN LESSEN

blackdog

Golden Member

Paulinha_B,

Ook bij jou is het me nu wel duidelijk, dat begrijpend lezen een probleem is.
Ik maak je bekend met één van de eerste lessen, als je de ADC in een microcontroler zou willen gaan gebruiken, wat heb je daar niet van begrepen?

Er wordt je info aangedragen om op bepaalde zaken te letten bij gebruik van bepaalde eigenschappen van een product.
Het is wel duidelijk dat je graag op de "slecht nieuwsbrenger schiet? betreffende de niet zo goede eigenschappen van de ADC van een ESP serie microcontroler.
Dat is een echt goede karaktereigenschap van je! toppy! < voor als je het niet begrijpt, dat is Sarcasme, zoek het maar even op als je tenminste iets wilt leren. *grin*

Groet,
Bram

You have your way. I have my way. As for the right way, the correct way, and the only way, it does not exist.

Op 14 maart 2023 15:07:58 schreef Paulinha_B:
IK HEB EEN ECHTE OPMERKING

BLIJF AUB BIJ HET ONDERWERP VAN DIT DRAADJE

DAT LUIDT

EERSTE VINGEROEFENINGEN EN LESSEN

Je hebt helemaal geen vraag gesteld, en wilt dus, gezien je eigen logica, geen enkele reactie in dit topic. Precies waarom was je dit topic begonnen?

je moet geen oplossingen bieden aan mensen die geen probleem zien

Iemand die in zee zwemt en de haai nog niet gezien heeft, ziet geen probleem. Gewoon maar niets zeggen dan?

[Bericht gewijzigd door SparkyGSX op dinsdag 14 maart 2023 15:27:27 (20%)

Een manager is iemand die denkt dat negen vrouwen in één maand een kind kunnen maken

Op 14 maart 2023 15:25:04 schreef SparkyGSX:
[...]Je hebt helemaal geen vraag gesteld, en wilt dus, gezien je eigen logica, geen enkele reactie in dit topic. Precies waarom was je dit topic begonnen?

[...]Iemand die in zee zwemt en de haai nog niet gezien heeft, ziet geen probleem. Gewoon maar niets zeggen dan?

Er was daar iemand die aandrong op begrijpend lezen :+

Ik heb een aantal heel voorzichtige eerste indrukken en ervaringen gemeld, en daar zijn zeer nuttige reacties op gekomen, zoals ik had gehoopt. Zoveel zelfs dat ik meer dan mijn bezigheid heb met ze allemaal te bekijken.

Dat ik geen enkele reactie wil heb ik nergens geschreven, verre van.

Enne, als er een haai rondzwemt in mijn ESP32-code dan geef ik bij deze eenieder uitdrukkelijk toestemming om "alarm!" te roepen :) Maar ergens anders werd dan weer geschreven "er kan niks ergers gebeuren dan dat er een led niet gaat branden zoals voorzien" en daar ga ik helemaal in mee. C-code is trouwens geen beste omgeving voor haaien, die voelen zich beter in water.

JoWi

Special Member

Dan even on-topic: Welke IDE gebruik je ?

Als je de Arduino IDE gebruikt zou ik die zo snel mogelijk vervangen door VisualCode.
Ik heb met flink wat IDE's gewerkt maar die van Arduino was toch wel een van de slechtste die ik ooit gezien heb.

Ignorance is bliss

Er wordt hier meer en meer aangedrongen op "lezen", met diverse preciseringen ;) Dit staat er alweer drie etmalen lang:

ik gebruik totnogtoe de Arduino IDE, en behalve de "gewohnungsbeduerftige" editor bevalt me dat best.

De aangeraden VisualBrol daar verwacht ik niet veel van, ik ben in het algemeen niet zo "visual" ingesteld, en spul van Microsoft vermijd ik sowieso waar mogelijk. Is dat ding trouwens beschikbaar voor Linux?

Liefst van al zou ik gewoon vanaf de command line editeren, compileren, uploaden. Jaja, dat is 19de eeuws, ik besef het best ;) Ik heb het met Arduino's ooit wel gedaan, het is niet onmogelijk maar toch wel behoorlijk bewerkelijk. Voorlopig leg ik me neer bij de Arduino IDE als "minst ongelukkig compromis".

buckfast_beekeeper

Golden Member

Op 14 maart 2023 17:37:58 schreef JoWi:
Dan even on-topic: Welke IDE gebruik je ?

Als je de Arduino IDE gebruikt zou ik die zo snel mogelijk vervangen door VisualCode.
Ik heb met flink wat IDE's gewerkt maar die van Arduino was toch wel een van de slechtste die ik ooit gezien heb.

Welke Arduino IDE er zijn er momenteel 2.

De slechtste IDE waar ik ooit mee gewerkt heb was VisualStudio. Je maakte in een programma een tab voorwaarts en dat werkte. Bij een volgende upgrade werd dat een tab terug. Prettig programmeren is anders.

Voor Java sowieso IntelliJ van jetbrains. Van dezelfde producent voor C CLION maar dan zijn de helft van de libraries onbruikbaar wegens niet 100% correct geschreven C.

Van Lambiek wordt goede geuze gemaakt.