Wat draait er op een ESP bordje?

Pagina: 1
Acties:

Vraag


Acties:
  • 0 Henk 'm!

  • nairolf
  • Registratie: Oktober 2019
  • Laatst online: 09:40
Mijn vraag
Ik ben benieuwd wat er nu precies op een ESP bordje draait aan software/firmware. Ik ben pas sinds heel kort in deze materie gedoken en probeer te begrijpen wat ESPHome en ESP-link bijv. zijn, maar ook wat er nu draait als je zelf code voor ESP compileert.

Achtergrond: ik ben SW engineer, heb 0 electronica kennis, en ben dus vooral benieuwd naar de software/firmware kant. Solderen is out of my league...

Relevante software en hardware die ik gebruik
Ieder willekeurig ESP bordje.

Wat ik al gevonden of geprobeerd heb:
- Ik begrijp dat een ESPHome firmware specifiek gebouwd wordt op basis van een YAML file die je specificeert, en het daarnaast wat management code bevat om beheer op afstand te kunnen doen. Het lijkt me dat vanuit deze YAML file een stuk C code gegeneeerd wordt, en dat samen met de generieke beheer-code gecompileerd wordt tot de firmware, correct?
- Ik begrijp (denk ik?) ook dat ESP-link een specifieke firmware is die een Serial/UART verbinding van het ESP bord omzet in iets wat over TCP uitgelezen kan worden, een Serial-Over-TCP-Bridge. Maar is dat ook alles wat ermee kan? Of kan ik een ESP-link firmware nog "uitbreiden" met additionele eigenfunctionaliteit, waardoor het een soort basis is, net als ESPHome?
- Om nog lower-level te gaan; ik neem aan dat het compileren van ESP code een bepaalde vorm van (micro)OS/kernel mee zal moeten compileren, alleen al om te zorgen dat er bijv. een interrupt loop is voor bepaalde events van het systeempje. Wat voor iets is dit (heeft dit een naam?), is hier nog keuze in (bijv. tijdens het compileren), en hoeveel functionaliteit/hoe groot moet ik me zo'n kernel/OS voorstellen, bijv. vergeleken bij een Linux kernel, wat natuurlijk heel general-purpose en dus groot is.
- Er zijn vast nog andere ESP firmware projecten die ik nog niet gevonden heb of me nog niet over ingelezen heb (ESPEasy misschien?). Is er nog iets dat jullie aanraden om te bekijken?

Alle reacties


Acties:
  • 0 Henk 'm!

  • Thijsmans
  • Registratie: Juli 2001
  • Laatst online: 14-09 21:53

Thijsmans

⭐⭐⭐⭐⭐ (5/5)

Ik gebruik ESPHome waar het kan, en JavaScript als ik teveel tijd om handen heb :) Zie mijn (oude) Tweakblogs.

Privacy-adepten vinden op AVGtekst.nl de Nederlandse AVG-tekst voorzien van uitspraken en besluiten.


Acties:
  • 0 Henk 'm!

  • FeaR
  • Registratie: Maart 2007
  • Laatst online: 15-09 18:20

FeaR

In GoT we trust

Some people just need a high-five.... In the face.... With a chair.


Acties:
  • 0 Henk 'm!

  • nairolf
  • Registratie: Oktober 2019
  • Laatst online: 09:40
Thijsmans schreef op dinsdag 7 juni 2022 @ 20:04:
Ik gebruik ESPHome waar het kan, en JavaScript als ik teveel tijd om handen heb :) Zie mijn (oude) Tweakblogs.
Leuke blogs! Ik heb ze doorgelezen en ga ze zeker nog eens vaker bekijken!

Zelf ben ik voor mn werk al met C++ bezig, en juist niet met Javascript, dus ik denk dat Espruino niet mijn kopje espresso is. Maar je blogs bevatten dan ook nog veel meer info die niet specifiek is voor Espruino. Anyway, leuk antwoord op mn 4e vraag, had eerlijk gezegd niet verwacht dat er een Javascript interpreter firmware bestond! (Python was al wel bij me opgekomen dat dat zou kunnen bestaan, nog eens specifiek een zoekopdrachtje naar doen; EDIT: MicroPython, interessant!)

Acties:
  • +1 Henk 'm!

  • dogtagz
  • Registratie: December 2014
  • Laatst online: 15-09 08:22
Een ESP is een zogeheette bare-bone microcontroller. Dit is simpelweg een processor met flash geheugen waar je een programma op kan "flashen" (of uploaden).

Feitelijk voert hij dit programma constant uit. C/C++ wordt gebruikt om voor ons menselijk leesbare taal te schrijven. Een compiler wordt gebruikt om voor de specifieke chip, de software naar machinetaal om te bouwen. Dit vertaalt de C/C++ om naar machinecode specifiek voor die chip. Instructies voor een i7 processor in je computer zijn anders dan die van een ESP32. ESP gebruikt de Xtensa chip. Dus die compiler zou je nodig hebben. Vaak wordt het makkelijk gemaakt en hoef je de compiler niet eens zelf handmatig te downloaden, vooral als je vs code gebruikt met bijvoorbeeld platformIO.

Feitelijk wat een microcontroller meer kan ligt heel erg aan de microcontroller zelf. Zo heeft een ESP32 WiFi, Bluetooth en verschillende seriële interfaces. Ook heeft de chip dedicated RAM/ROM geheugen beschikbaar.

Nou, leuk verhaal zou je zo zeggen. Afhankelijk van de chip zoek je dus een API/Framework om iets mee te doen. In principe zou je alles in een while loop kunnen gooien, en is dit je programma. Als de microcontroller crashed, kan je gewoon opnieuw opstarten en ditzelfde programma laten draaien.

Dan heb je natuurlijk wel iets simpels en kan je niet meerdere processen tegelijkertijd draaien. Daar is iets op bedacht. Een Real Time Operating System (RTOS). Ook zijn hier verschillende APIs voor bedacht. Zoals FreeRTOS (dat ook door ESP-IDF gebruikt wordt).
Dan krijg je functionaliteit zoals service calls, timers, context switching, etc.

Maar wil je bijvoorbeeld gegevens opslaan, ook al crashed het programma? Dan zal je iets met flash geheugen moeten doen.. of een EEPROM chip moeten gebruiken.

Hopelijk wordt dit hier iets duidelijker van. Als er vragen zijn dan wil ik uiteraard meer informatie geven, voor zover ik kan ;)

Laatste aanvulling... Stay away from Arduino IDE :|

$ alias cd='rm -rf'


Acties:
  • 0 Henk 'm!

  • nairolf
  • Registratie: Oktober 2019
  • Laatst online: 09:40
dogtagz schreef op woensdag 8 juni 2022 @ 00:26:
Een ESP is een zogeheette bare-bone microcontroller. Dit is simpelweg een processor met flash geheugen waar je een programma op kan "flashen" (of uploaden).

Feitelijk voert hij dit programma constant uit. C/C++ wordt gebruikt om voor ons menselijk leesbare taal te schrijven. Een compiler wordt gebruikt om voor de specifieke chip, de software naar machinetaal om te bouwen. Dit vertaalt de C/C++ om naar machinecode specifiek voor die chip. Instructies voor een i7 processor in je computer zijn anders dan die van een ESP32. ESP gebruikt de Xtensa chip. Dus die compiler zou je nodig hebben. Vaak wordt het makkelijk gemaakt en hoef je de compiler niet eens zelf handmatig te downloaden, vooral als je vs code gebruikt met bijvoorbeeld platformIO.

Feitelijk wat een microcontroller meer kan ligt heel erg aan de microcontroller zelf. Zo heeft een ESP32 WiFi, Bluetooth en verschillende seriële interfaces. Ook heeft de chip dedicated RAM/ROM geheugen beschikbaar.
Bedankt voor je uitgebreide reactie! Tot hier had ik inderdaad met mijn eigen achtergrond en zoekopdrachten nog kunnen doorgronden.
dogtagz schreef op woensdag 8 juni 2022 @ 00:26:
Nou, leuk verhaal zou je zo zeggen. Afhankelijk van de chip zoek je dus een API/Framework om iets mee te doen. In principe zou je alles in een while loop kunnen gooien, en is dit je programma. Als de microcontroller crashed, kan je gewoon opnieuw opstarten en ditzelfde programma laten draaien.

Dan heb je natuurlijk wel iets simpels en kan je niet meerdere processen tegelijkertijd draaien. Daar is iets op bedacht. Een Real Time Operating System (RTOS). Ook zijn hier verschillende APIs voor bedacht. Zoals FreeRTOS (dat ook door ESP-IDF gebruikt wordt).
Dan krijg je functionaliteit zoals service calls, timers, context switching, etc.
Ah, dus er draait inderdaad een FreeRTOS instance. Dit zit neem ik aan in de firmware die je bouwt, waardoor je (in theorie) ook een ander of geen OS zou kunnen meecompileren (zoals jezelf an aangeeft, dan wel zonder al teveel hulp van dingen zoals service calls, timers en context switching). Zijn er naar jouw weten manieren om een firmware te bakken die op iets anders gebaseerd is dan FreeRTOS? Ik kan me voorstellen dat ESP zelf compilers aanlevert en dat kiezen voor die compiler de keuze van FreeRTOS vastlegt. Verder is dat natuurlijk niet erg, ben gewoon vanuit theoretisch oogpunt benieuwd.
dogtagz schreef op woensdag 8 juni 2022 @ 00:26:
Maar wil je bijvoorbeeld gegevens opslaan, ook al crashed het programma? Dan zal je iets met flash geheugen moeten doen.. of een EEPROM chip moeten gebruiken.

Hopelijk wordt dit hier iets duidelijker van. Als er vragen zijn dan wil ik uiteraard meer informatie geven, voor zover ik kan ;)
Thanks. Buiten de vragen in deze post, heb je toevallig nog wat kennis die mijn vragen over ESPHome en/of ESP-link in de TS kunnen beantwoorden?
dogtagz schreef op woensdag 8 juni 2022 @ 00:26:
Laatste aanvulling... Stay away from Arduino IDE :|
Haha, ik ben erg benieuwd waarom. Kan je dat uitleggen?

Acties:
  • 0 Henk 'm!

  • Septillion
  • Registratie: Januari 2009
  • Laatst online: 07:59

Septillion

Moderator Wonen & Mobiliteit
Nee, OS en compiler staan volledig los. Compile (en linker) doen gewoon dat met wat je ze aanlevert. Als FreeRTOS daar een deel van is zal dat meegenomen worden. FreeRTOS is ook gewoon C+ (met misschien wat assebly) code. Als je zou willen zou je zelf een RTOS of framework kunnen maken.

ESPhome is dan weer compleet iets anders. Dat is eigenlijk vooral een framework rond de compiler waarmee je een programma kunt compiler op basis van een configuratie ipv code. Beetje een docker compose-ish. Wel zal daar dan weer een basis framework van ESPhome in meegenomen worden. Maar idee van ESPhome is dus dat je als eindgebruiker geen code schrijft.

ESPlink kan ik niet maar ziet er uit als compleet programma waar je via een UI wat configuratie voor kunt instellen.

En ja, voor grote projecten zijn er betere alternatieven dan Arduino. Maar naar mijn idee gaat er niets boven Arduino voor quick (and/of dirty) projecten. Leercurve daarvoor is gewoon veel minder stijl maar het wordt juist lastiger / minder overzichtelijk als een project groot wordt.

Acties:
  • 0 Henk 'm!

  • dogtagz
  • Registratie: December 2014
  • Laatst online: 15-09 08:22
nairolf schreef op woensdag 8 juni 2022 @ 10:23:
[...]


Ah, dus er draait inderdaad een FreeRTOS instance. Dit zit neem ik aan in de firmware die je bouwt, waardoor je (in theorie) ook een ander of geen OS zou kunnen meecompileren (zoals jezelf an aangeeft, dan wel zonder al teveel hulp van dingen zoals service calls, timers en context switching). Zijn er naar jouw weten manieren om een firmware te bakken die op iets anders gebaseerd is dan FreeRTOS? Ik kan me voorstellen dat ESP zelf compilers aanlevert en dat kiezen voor die compiler de keuze van FreeRTOS vastlegt. Verder is dat natuurlijk niet erg, ben gewoon vanuit theoretisch oogpunt benieuwd.
Zoals @Septillion al aangeeft klopt dit inderdaad niet helemaal. De compiler is letterlijk universele code (C/C++) omzetten tot chip-specifieke machinecode. Hij doet vrij weinig met de inhoud (behalve optimalisatie of iets).

FreeRTOS is volledig software, en wordt niet meegeleverd met de compiler. Op heel veel microcontrollers draait geen FreeRTOS of iets. Denk aan een simpele controller die een aantal ledjes schakelt. Die kan gewoon in een while-loop constant een aantal pinnen(hardware) pollen wat de input is. Dan hoeft er geen RTOS aan te pas te komen.
nairolf schreef op woensdag 8 juni 2022 @ 10:23:

[...]

Thanks. Buiten de vragen in deze post, heb je toevallig nog wat kennis die mijn vragen over ESPHome en/of ESP-link in de TS kunnen beantwoorden?
Hmm, het lijkt alsof ESPHome een aantal features voorgeprogrammeerd heeft (zoals een WIFI hotspot, LED-strips schakelen, input regelen) en de details (hoeveel LEDjes, welke fysieke pin die aangesloten is, WIFI SSID/Pass) mag je zelf invullen. Dan pompt hij dit waarschijnlijk gewoon in de C++ file en compileert dit.
nairolf schreef op woensdag 8 juni 2022 @ 10:23:
[...]

Haha, ik ben erg benieuwd waarom. Kan je dat uitleggen?
Je zegt al kennis te hebben van C++. Als je ietwat uitgebreidere features wilt gaan doen in de Arduino IDE ben je langer bezig om C/C++ files aan elkaar te knopen, en vervolgens de verplichtte Setup() en Loop() functies te gebruiken.
Ik vind mijzelf te gelimiteerd door deze opties. En ik denk dat het beter is je tijd te besteden in een framework zoals ESP-IDF of ESPHome. Daar kan je uiteindelijk meer mee.

$ alias cd='rm -rf'

Pagina: 1