Aan de slag met de ESP32-C3 RISC-V MCU
Velen hebben met spanning gewacht op de ESP32-C3 van Espressif. Hij heeft maar één rekenkern in plaats van de gebruikelijke twee processorkernen in andere ESP32-controllers. Maar deze kern werkt met de gratis, open RISC-V-instructieset-architectuur die concurreert met de op ARM gebaseerde controllers die veel worden ingezet voor IoT-toepassingen. Ik heb onlangs de ESP32-C3 en de ESP32-C3-DevKitC-02 aan de tand gevoeld. Hierbij mijn ervaringen.
Wie mij volgt op Twitter (@ElektorMathias) heeft misschien een aantal ESP32-C3 DevKits zien liggen op mijn bureau. Wie onze Lab Notes in juni heeft gelezen weet ook dat er aan software-ondersteuning voor de ESP32-C3 nog wordt gewerkt. De ontwikkelkit die we hier bespreken is uitgerust met de revision 2-versie van de ESP32-C3-chip. Deze voorlopige versies komen met een (dubbelzijdig bedrukt) A4’tje met een lijst van de problemen die tot nu toe bekend zijn.
Revisie 2 lijdt onder meer aan slapeloosheid. Dat wil zeggen: hij trekt een hoop stroom in zijn deep sleep-modus, en de USB/JTAG seriële adapter in de chip werkt niet. Bij de meer recente revision 3 zouden deze problemen opgelost moeten zijn, zoals Ik al meldde op Twitter .
Ook aan Espressif’s ESP-IDF-repository voor ondersteuning van de ESP32-C3 wordt nog gewerkt. Ook die kan dus nog bugs bevatten. Omdat daar de Arduino-ondersteuning op is gebouwd, zullen die bugs ook op dat platform terechtkomen. Op het moment dat ik dit schrijf, moet de Development Release van het Arduino Support Package worden geïnstalleerd in de Arduino-IDE. Dat gaat door de volgende link in te vullen bij Voorkeuren in het veld Meer Board Managers URL’s:
https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_dev_index.json
Dat installeert versie 2.0.0-rc1.
Kopers van ESP32-C3-ontwikkelkits zouden de laatste rev.3-versie van de chip moeten krijgen, zoals te lezen is op het forum bij ESP32.com. De voorlopige rev.2 is alleen geleverd bij een beperkt aantal van de eerste ontwikkelkits.
De ESP32-C3 DevKitC-02
Eerst kijken we naar de ESP32-C3 en de DevKitC-02 (figuur 1). De ESP32-C3-chip is in feite een opvolger van de Espressif ESP8266-microchip. Net als de ESP8266 heeft hij één rekenkern die geschikt is voor klokfrequenties tot 160 MHz en een 2,4 GHz BGN WiFi-chip heeft met een volledige TCP/IP-stack. Maar daar houdt de overeenkomst met de ESP8266 op. De ESP32-C3 bevat veel meer van de periferie die we kennen van de ESP32, Espressif’s opvolger van de ESP8266. Naast WiFi beschikt de ESP32-C3 over BLE 5.0 en Bluetooth Mesh-communicatie. Hij heeft ook de nuttige GPIO-matrix, zodat bijna elke functie aan bijna elke pen kan worden toegewezen. In figuur 2 ziet u het blokschema van de ESP32-C3, compleet met USB/serieel- en JTAG-adapter.
In het blokschema van de controller in figuur 2 is duidelijk te zien, dat de ESP32-C3 een afstammeling van de ESP32 is. Zie ook het overzicht van de specificaties in tabel 1. Met zijn 384 kB RAM heeft de ESP32-C3 bijna vijf keer zoveel RAM-geheugen als de ESP8266 (80 kB). Het belangrijkste verschil tussen de ESP32-C3 en alle andere ESP32- en ESP8266-chips is de processorkern. Terwijl zijn voorgangers werkten met de Tensilica L106 of LX6/LX7 RISC-processor heeft de ESP32-C3 een RISC-V CPU. Dat betekent dat u compilers en andere programma’s uit de RISC-V-toolchain kunt gebruiken met deze kern. Verbeteringen aan deze compilers en andere gereedschappen komen dus ten goede aan gebruikers van de ESP32-C3. De community hoeft geen toolchain op te zetten, want dat is al gebeurd bij de eerste introductie van de ESP8266.
Het DevKitC-02-board bevat een USB/serieel-converter en een WS2812-compatibele RGB-LED. Een gedetailleerd schema van de kaart vindt u hier. In figuur 3 ziet u beide kanten van de kaart.
Blinky… maar dan anders
De WS2812-compatibele RGB-LED op de kaart wordt bestuurd met behulp van een serieel communicatieprotocol. We kunnen hem dus niet aansturen door gewoon een I/O-pen aan te sturen om hem in te schakelen. Gelukkig bevat de Adafruit NeoPixel-library routines om dit type LED aan te sturen. Als u die library nog niet hebt geïnstalleerd, kunt u hem op de normale manier toevoegen aan uw Arduino-IDE. Met de code in listing 1 laat u de RGB-LED rood knipperen. U hoeft de code niet aan te passen om hem te draaien op de ESP32-C3. Uploaden van de code gaat net zo gemakkelijk als met een ESP32. Dankzij de I/O-matrix kunt u ook WS2812-LED’s gebruiken op andere pennen.
Chip-type en -versie uitlezen
Bij ESP32’s kunnen we op de chip opgeslagen informatie over de basiseigenschappen uitlezen. In listing 2 ziet u deze uitgelezen informatie via de seriële interface op 115200 baud (de communicatie op 9600 baud van chip-revisie 2 met de ingebouwde USB/serieel-converter levert onleesbare tekens op). Hier kunt u zien welke versie van de chip er op uw ESP32-C3-kit zit. Hopelijk ziet u dat u revisie 3 hebt, dan hebt u geen last van de lijst van bugs die bekend zijn over revisie 2.
Porteren van ESP32-projecten
Enkele heel nuttige functies van de ESP32-C3 zijn de ingebouwde WiFi- en BLE-communicatie. Samen met SPIFFS of het LittleFS-bestandssysteem voor het beheren van webpagina’s en andere data op de ESP32, vormt dat een ideaal platform voor allerlei WiFi-toepassingen. Wie nog werkt met een oudere (1.X-)versie van de Arduino-IDE zal een gepatchte plugin moeten installeren om files naar het ESP32-bestandssysteem te kunnen uploaden. De originele versie van me-no-dev werkt niet met de ESP32-C3.
Als voorbeeld hebben we de code gebruikt voor een ESP32 Mini-NTP-server. Deze kan in het eigen netwerk de kloktijd beschikbaar maken via NTP en is geschreven voor het Arduino-Framework. Na enkele aanpassingen aan de pentoewijzing is de code zonder problemen te compileren en uploaden naar de ESP32-C3. Dit eenvoudige voorbeeld laat zien dat veel bestaande code en kennis van de ESP32 rechtstreeks bruikbaar is voor de ESP32-C3, dus zelfs nieuwelingen in de RISC-V-omgeving moeten die overstap kunnen maken. De meeste bestaande ESP32-voorbeelden draaien ook op de ESP32-C3, en omdat FreeRTOS ook hier in de achtergrond aanwezig is, kunt u gebruik maken van alle voordelen en nadelen die dat met zich mee brengt, net als op de ESP32.
Omdat de ESP32-C3 op dit moment alleen wordt ondersteund in een ontwikkel-branch van de ESP32-chips in de Arduino-omgeving, ondersteunen nog niet alle IDE’s de chip volledig. Naarmate het framework meer volwassen wordt, is betere ondersteuning te verwachten.
ESP32-C3: Een Single-Core oplossing
De ESP32-C3 is een voordelig alternatief voor de ESP8266 met heel veel van de periferie van de ESP32 en maar één processorkern. De geïntegreerde USB/serieel- en JTAG-adapter maken het uitwisselen van files en data via USB gemakkelijk. U kunt zelfs code gaan debuggen (als er niets onvoorziens gebeurt in revisie 3 van de chip).
Dankzij het Arduino-framework, kan bestaande code opnieuw worden gebruikt met de ESP32-C3 en de ruime hoeveelheid RAM- en flash-maken grotere projecten mogelijk. We kunnen in de toekomst zeker vele ESP32-C3-boards van derde partijen verwachten op de Europese markt en het zal interessant zijn om te kijken welke functionaliteit die dan bieden. Iedereen die thuis een ESP32-DevKitC-02 heeft, kan al aan de slag met het schrijven en testen van code voor deze omgeving. Listings van de hier gebruikte Arduino sketches zijn te vinden op onze GitHub-pagina.
Vertaling: Evelien Snel