De ESP32 is een chip van de Chinese chipsfabrikant Espressif en is de opvolger van de ESP8266. Enkele jaren geleden begon Espressif ontwikkelbordjes te maken rond zijn chips. Die kunnen aangestuurd worden met de (licht aangepaste) Arduino software en net als bij Arduino groeide hierrond een community die er mee voor zorgde dat je hier makkelijk zelf je eigen projecten mee kan maken.
Het grote verschil is dat je op deze bordjes nog veel meer moeglijkheden hebt dan bij bijvoorbeeld de Arduino UNO of Leonardo. Zo kan je ook Wifi of Bluetooth gebruiken in je projecten. Bovendien zijn deze bordjes van ongeveer €10 best goedkoop. Kijk wel goed welke versie je koopt. Wij werken hier met de ESP32 Dev kit V4. Die kan je bijvoorbeeld vinden op Amazon of AliExpres of Banggood. Met recente varianten kan je meestal wel dezelfde zaken realiseren, maar de volgorde van de pins is soms anders. Let dan goed op dat je de juiste pins gebruikt. Kijk bij het kopen van je board ook na of de Pins al gesoldeerd zijn aan het bordje, dat is niet altijd het geval.
Omdat de ESP32 meer mogelijkheden heeft dan een typische Arduino betekent dit wel dat het programmeren van dit bord net iets complexer wordt dan bij Arduino en dat je dus best al wat vertrouwd bent met Arduino voor je hier mee gaat werken.
Een ouder type ESP32 zonder gesoldeerde pins.
Voor je je code van je Arduino-IDE kan doorsturen naar je ESP32 moet je nog enkele aanpassingen doen. Je vindt hieronder en hiernaast een stappenplan dat werkt voor Mac en voor Windows.
Via de espressif site:
Espressif is de fabrikant van de ESP32. Ze hebben een 'Getting Started pagina gemaakt waar je wat meer info kan vinden als je wil werken met de ESP-32 (cam).
Surf naar de pagina op de espressif site met de info.
Kopieer daar de 'Stable release link' en kopieer die in de 'Additional boards manager' van de Arduio IDE (zie stap 3 en 4 hiernaast).
In de Arduino IDE ga je naar preferences/voorkeuren, daar moet je in het venster 'Aditional boards manager' deze URL plakken.
Dan in Arduino naar Tools > boards manager Naar ESP-32 gaan (via zoekvenster) en meest recente versie uit menu kiezen en installeren
Bij Tools > boards > zijn nu veel ESP boards beschikbaar
Wij gebruiken voorlopig ESP32 DEV module - onderaan nu ook veel examples beschikbaar
Extra Driver installeren: Waarschijnlijk moet je nu ook nog een driver installeren zodat je je code van de Arduino IDE kan doorsturen naar de ESP-32. Die kan je hier vinden: Driver-link silabs of bij de ESP32-CAM die je via een FTDI verbindt via ftdichip.com.
Kies hier de driver voor jouw besturingssysteem. Hierna kan je de software downloaden en installeren. Tijdens het installeren best Arduino IDE sluiten en ESP32 bord verbinden met de computer.
Nadien het installeren de Arduino IDE terug opstarten en je zou helemaal klaar moeten zijn.
1) Scroll op de ESP32-site met info voor Arduino naar de 'Stable realease link' en kopieer die.
2) Ga nu in de Arduino IDE naar preferences en plak de link in het venster 'Additional Boards Manager'
3) Ga binnen de Arduino IDE in het menu naar Tools > Board > Boardbeheer en installeer daar de nieuwste versie voor ESP32
Wanneer je je ESP-32 op een breadboard plaatst, dan zie je geen informatie meer over de pins. Hiervoor zal je een schema moeten gebruiken.
Op het internet vind je verschillende schema's, (ESP32 DevBoard Pinmap) maar bij elk type bord is de plaatsing van de pins wat anders. Kijk dus goed na dat je schema overeen komt met het ESP-32 board dat jij hebt.
Het schema hieronder is vrij overzichtelijk. Werk best met de nummers van de pins bijvoorbeeld GPIO12. (GPIO staat voor General Purpose Input/Output). GPI 36,39,34 en 35 zijn dus enkel een input, de andere GPIO pins zijn input en output. Je mag die allemaal gebruiken voor digital in en out, en voor analog in en PWM. ADC staat voor 'analog to digital converter' die pins kunnen een echt analoog signaal geven. Dat bekijken we later nog.
Nu kan je best eerst testen of alles werkt zoals zou moeten. De blink-test (de interne LED laten knipperen) wordt hier vaak voor gebruikt. Hiervoor kunnen we de code van fiche 3 gebruiken. digitalWrite Werkt dus net hetzelfde als bij de gewone Arduino IDE.
De interne LED van de ESP32 is verbonden met pin 2, dus hier moeten we enkel de nummer van de Pin veranderen van 13 naar 2.
In het menu van de Arduino IDE kies je bij Board: > "ESP32 Dev Module"
In dit menu kies je bij Poort: > "/dev/cu.SLAB_USBtoUART"
BIj het uploaden van je sketch kan het nodig zijn dat je in het begin de boot-button even ingedrukt houdt tot het doorsturen van de code naar de ESP32 begonnen is
De rode LED brandt altijd als de ESP32 is aangesloten, de blauwe LED is de interne LED, wanneer je je code hebt doorgestuurd zou die nu moeten knipperen.
In dit voorbeeld verbinden we de ESP32 met een schakelaar en een LED. Je zal merken dat er hier, buiten de nummers van de pins, eigenlijk niets verandert in vergelijking met wat je gewoon bent bij Arduino.
Bij de ESP-32 kunnen we gebruik maken van 16 PWM-kanalen en bovendien kan ons PWM-signaal nog veel fijner dan bij de Arduino, de 'resolutie' ervan kan ook aangepast worden. Daarom kan je hier geen gebruik maken van analogWrite zoals je dat gewoon bent bij Arduino!
In dit voorbeeld maak je een sketch die een LED langzaam aan en uit laat gaan. De schakeling begint bij GPIO33, dan een weerstand, de LED en weer naar GND.
Bij het gebruik van een PWM-signaal zijn nu 3 functies nodig:
In void setup hebben we twee functies:
ledcAttachpin - verbindt een PWM-kanaal met een GPIO-pin, de functie heeft dan ook twee parameters: de nummer van de GPIO en de nummer van het PWM-kanaal
ledcSetup - heeft drie parameters: kanaal (0-15), frequentie (Hz) en resolutie (1-16 bits)
In void loop hebben we één functie:
ledcWrite - is vergelijkbaar met analogWrite. De functie heeft twee parameters: de nummer van het kanaal en de PWM waarde
Bij de ESP32 kunnen we de analogRead functie gebruiken zoals we dat gewoon zijn bij Arduino. Het enige verschil is dat de resolutie hier 12bits is, wat betekent dat de gelezen waarden van je invoerorgaan tussen 0 en 4095 zullen linggen.
Een voordeel van de PWM-kanalen voor uitgaande signalen is dat we de resolutie kunnen aanpassen. Wanneer we die op 12 bits zetten in ledcSetup, dan krijgen we ook hier getallen tussen 0 en 4095 en hoeven we dus geen map functie meer te gebruiken.
Schema gemaakt met Fritzing.
Welke getallen krijg je bij welke resolutie?
8-bits (28) = getal tussen 0 en 255
12-bits (212) = getal tussen 0 en 4095
16-bits (216) = getal tussen 0 en 65536
In het GPIO-overzicht bovenaan zag je bij 10 GPIO's dat ze ook als Touch-sensor gebruikt kunnen worden. Via een draad die op zo'n pin wordt aangesloten, wordt dan gekeken of die draad wordt aangeraakt. Met 10 pins zijn er wel wat leuke toepassingen te bedenken en de code is erg eenvoudig.
De schakeling: We verbinden een LED met een weerstand met GPIO32 en GND, we verbinden ook een draad met T5. Die draad mag je aan de andere zijde ook verbinden aan een ander geleidend voorwerp.
De code: We maken gebruik van de 'touchRead functie'. Die heeft maar één parameter, dat is de pin die je wil lezen. Die functie geeft een waarde die meestal ergens tussen de 100 en de 0 ligt. Wanneer je de draad aanraakt die verbonden is met T5, dan zal je merken dat de waarde plots omlaag gaat.
In onze code brandt de LED dus als die waarde laag is. De waarde wordt ook weergegeven in de Serial Monitor.
Wanneer je de draad aanraakt, dan brandt de LED. Maar je mag de draad ook verbinden met eender welk geleidend voorwerp. Hier is dat een schaar, maar je kan hier gerust gaan experimenteren met andere materialen.