De Elecrow ESP32 Terminal is een ESP32-3 aangedreven draagbaar apparaat met een 3,5″ 480 × 320 TFT capacitief touch display en een veelheid aan mogelijkheden. Het apparaat kan een mooie aanvulling zijn op je projecten als je een aanraakscherm met verschillende typen interface nodig hebt. Het display op basis van een ILI9488 display driver heeft een 16-bits kleurdiepte; de aanraakfuncties worden verzorgd door een FT6236. Beide chips worden goed ondersteund door de Arduino gemeenschap.

ESP32 terminal behuizing

De ESP32 Terminal zit in een zwarte behuizing van acryl, waardoor het robuust aanvoelt en zeker geen onhandige plastic behuizing is. Er is een batterijaansluiting aanwezig, met LiPo oplader, maar het zou draagbaarder zijn met een batterij in het apparaat. Als je je project draagbaar wilt maken, moet je een accu aan de achterkant bevestigen. Er zijn twee M3 montagegaten aan de achterkant die je kunt gebruiken om een rugzak te bevestigen of om hem aan een muur te hangen.
 
ESP32 Terminal met weergegevens
De ESP32 Terminal in zijn zwarte behuizing toont weergegevens.

ESP32-S3 MCU

Als ik kijk naar wat het apparaat aandrijft, ben ik altijd verbaasd over de ongelooflijke hoeveelheid rekenkracht die in moderne MCU's zit. De ESP-Terminal wordt aangedreven door een Espressif ESP32-S3, die een 32-bit dual-core XTensa LX7 MCU bevat die draait op 240 MHz. Vergelijk dat eens met de originele Arduino UNO met zijn 8-bit Microchip ATMega328 die op 16 MHz draait!

De MCU heeft 512 KB SRAM aan boord, samen met 8 MB PSRAM. PSRAM staat voor pseudo-statisch RAM, een soort extern statisch RAM dat in het geval van de ESP32-S3 via een SPI-interface is verbonden met de MCU.
 
Wat betreft draadloze connectiviteit hebben we 2,4 GHz Wi-Fi (2,4 GHz 802.11 b/g/n) en Bluetooth 5 LE. Ik was me hiervan niet bewust, maar Bluetooth 5 heeft een groot bereik en deze module claimt dit te ondersteunen. De long-range modus breidt het bereik uit van 10-30 meter tot meer dan een kilometer.

Inschrijven
Schrijf u in voor tag alert e-mails over ESP32!

Verbinding maken met de fysieke wereld

De ESP32 Terminal heeft een batterijaansluiting en een ingebouwde LiPo-oplader. Je kunt de USBC connector gebruiken om het apparaat van stroom te voorzien, maar ook om de LiPo batterij op te laden.
 
Er is ook een micro-SD kaartslot, handig als je een paar plaatjes of andere (grafische) zaken zoals webpagina's wilt opslaan voor je applicatie.
 
De zijkanten van de module hebben in totaal vier 'Crowtail'-poorten ‘Crowtail’ poorten. Dit zijn allemaal 4-draads interfaces die compatibel zijn met Grove van Seeed Studio. Er is één digitale, één analoge, één seriële (UART) en één I²C-connector, genoeg voor eenvoudige projecten. Als je meer nodig hebt, kun je de I²C-poort als breakout gebruiken.
 
esp32 terminal achterzijde
De vier 'Crowtail' poorten zijn op de achterkant te zien.
 

De ESP32-terminal programmeren

Het uploaden van firmware gebeurt via de USB-C kabel, over een seriële verbinding vertegenwoordigt door een CH340 USB-naar-serieel converter. Het lukte me niet om dit te laten werken met mijn MacBook, waarvoor ik het officiële stuurprogramma probeerde te installeren. Gelukkig had ik mijn oude Linux laptop nog, waarop Ubuntu draait en dat werkt perfect!
 
Het eerste wat ik wilde uitproberen was het draaien van Python op het apparaat. Dat bleek moeilijk te zijn. Hoewel de documentatie zegt dat het apparaat geprogrammeerd kan worden met Python en MicroPython, kon ik geen kant-en-klare downloadbare firmware vinden.
 
Bij het doorlezen van hun website zijn er talloze voorbeelden en een tutorial for Arduino, dus ben ik dat gaan gebruiken voor mijn demotoepassingen.

UI ontwerp

Volgens de webpagina van de ESP32 Terminal is het apparaat LVGL-gecertificeerd. LVGL een open-source embedded grafische bibliotheek voor het maken van UI's voor verschillende MCU's en displaytypes. Hoewel de bibliotheek zelf open source is, is er ook een closed source drag-and-drop layout editor, Squareline Studio, beschikbaar.
 
Ik heb de proefversie geïnstalleerd en hoewel het op het eerste gezicht een beetje overweldigend is, lukte het me al snel om een eenvoudige UI te maken voor het servoproject hieronder. Als het maken van UI's voor embedded apparaten je doel is, dan is het de moeite waard om wat tijd te investeren om dit product te leren kennen.

Twee kleine projecten

Ik heb besloten om twee projecten als voorbeeld te maken. Het eerste project is een klein weerstation, waarbij we onze eigen gebruikersinterface tekenen met behulp van lijn- en cirkelprimitieven. Het tweede project is een voorbeeld waarbij we een servo besturen vanuit een gebruikersinterface ontworpen met Squareline Studio.

Weerstation

Voor het weerstation gebruiken we een DHT-11 sensor die temperatuur en vochtigheid kan meten. Het heeft een digitale één-draads interface en wordt goed ondersteund door Arduino. Voor dit project koos ik de Adafruit DHT-bibliotheek. Deze maakt deel uit van een set sensorbibliotheken met gemeenschappelijke code en daarom moeten we ook de Adafruit Unified Sensor Driver bibliotheek installeren.
 
ESP32 Terminal-weerstation
Voeg een DHT-11 sensor en wat code toe en je hebt een eenvoudig weerstation.

In dit project heb ik besloten om mijn eigen UI vanuit het niets te maken, door primitieven te gebruiken om tekst af te drukken en enkele lijngrafieken te maken. Hiervoor gebruikte ik de LovyanGFX LCD en e-Ink grafische bibliotheek LovyanGFX LCD en e-Ink grafische bibliotheek, een andere open-source grafische bibliotheek.
 
Na het initialiseren van het scherm, waarvoor ik gewoon een van de voorbeelden van de ESP32 Terminal website heb gekopieerd, lezen we de DHT-11 sensor uit. Deze geeft ons drie waarden: temperatuur, luchtvochtigheid en de hitte-index. De hitte-index is een temperatuur aangepast met de werkelijke vochtigheid. Deze drie waarden worden weergegeven in een eenvoudige wijzerplaat, getekend met twee cirkels en een lijn als wijzer. We vernieuwen het scherm elke twee seconden met een nieuwe waarde.

Inschrijven
Schrijf u in voor tag alert e-mails over IoT & Sensors!

Servocontroller

Voor de servoregelaar wilde ik de tool Squareline Studio proberen om de UI te maken. Een schuifregelaar in de vorm van een cirkelboog is de enige widget die wordt gebruikt. Het bereik van de schuifregelaar is ingesteld van 0 tot 180, wat overeenkomt met de hoek van de servo.
 
Als je een UI voor de ESP32 ontwerpt met deze tool, moet je uitgaan van het sjabloon 'Arduino with TFT_eSPI' en de kleurdiepte instellen op 16 bits en de resolutie op 480 × 320. Nadat je de gegenereerde code hebt geëxporteerd, moet je deze uitpakken in een map met de naam 'ui' in de map 'libraries' van je Arduino. Normaal gesproken vind je deze 'libraries' map in dezelfde map als waar je Arduino sketches staan. Het kostte me wat tijd om dit uit te vinden.
 
De servo wordt aangestuurd door de ESP32Servo-bibliotheek. De standaard Arduino servo bibliotheek werkt niet met de ESP32.
 
De code is elementair: in de functie 'loop' lezen we de hoek van de cirkelboogschuifregelaar, die een getal tussen 0 en 180 teruggeeft, en sturen die waarde naar de functie 'servo.write'.
 
ESP32 Terminal servo test
De cirkelboogschuifregelaar regelt de positie van de servo.

Je kunt de broncode van beide projecten vinden in de downloadsectie van dit artikel. Ik heb de map 'libraries' niet in de download opgenomen, omdat die (veel) te groot is. Het zelf installeren van de afhankelijkheden is niet ingewikkeld.

Conclusie

De ESP32 Terminal van Elecrow is niet zo gemakkelijk te temmen als ik had gehoopt, maar het heeft veel potentieel. Als je de tijd wilt investeren om de LVGL-bibliotheek of een andere UI-bibliotheek te leren, en je bent vertrouwd met Arduino, dan kun je met de ESP32 Terminal een gebruikersinterface met aanraakbediening toevoegen aan je volgende project.
 
Het zou gemakkelijker zijn geweest als MicroPython firmware beschikbaar was geweest om te downloaden op de productsite. Ik heb wat rondgezocht op internet, maar kon niets vinden. Het is zeker te doen om je eigen firmware te compileren, en misschien is dat een leuk idee voor je volgende project?

Bronnen