ESP32 - den bløde side

Dette indlæg skulle egentligt først og fremmest handle om, hvordan man laver software til en ESP32 - med masser af reference og sammenligning med en klassisk Arduino. Det kommer også lidt længere nede.

Men Arduinoen er inde i en meget dramatisk udvikling i øjeblikket, så jeg tror, det vil være på sin plads at opsummere lidt, før jeg kaster mig ud i den egentlige tekst: Det har ikke vakt så megen opsigt her på stedet, men Arduino projektet er blevet solgt, og de nye ejere har kastet det ud i noget, der efter nogens mening er en overlevelseskamp. De nye ejere er den amerikanske chip-gigant Qualcomm, der har købt projektet for at få adgang til den store verden af fantasifulde udviklere, der kendetegner Arduino projektet. De ser også gerne, at maker miljøet - det kalder man ofte de mange mennesker, der eksperimenterer med små-projekter med f.eks. Arduino - i højere grad vender blikket mod Qualcomms produkter, der ellers mest findes i industriprojekter fra store giganter.

Så langt, så godt: Det kan man mene meget om, men Qualcomm har en lang historik med at være meget lukkede og meget bidske i deres forsvar af firmaets rettigheder, og det har mange svært ved at se i kombination med open source og open hardware, der ellers har været Arduino projektets adelsmærke indtil nu. Her i efteråret kom der nye brugsbetingelser for deres forum og det generelle Arduino miljø, og her var pludseligt en masse tale om copyright beskyttelse, overtagelse af intellektuelle rettigheder, forbud mod reverse engineering (det betyder kort fortalt, at man tager et produkt og forsøger at afdække konstruktionen - enten for at forstå det, eller for at kopiere det), og en masse anden snak, der ligger meget, meget langt fra det, man normalt hører i open source miljøet.

Hovedet på sømmet for mange var, at børn og unge nu også er forbudt adgang til Arduino miljøet: Man skal i fremtiden simpelthen være fyldt 18 år, før man kan få adgang til Arduinos support forum eller bidrage til udvikling af de mange software biblioteker, der er en af Arduinoens store styrker. Og det for et produkt, der i høj grad har været brugt til undervisning af netop børn og unge.

For mig blev konsekvensen, at jeg har lukket min brugerkonto hos Arduino.

Det er en sørgelig tilstand for et miljø, der ellers har været en drivende kraft i maker miljøet i rigtigt mange år.

I den følgende tekst vil jeg dog ignorere denne kedelige tilstand og tage udgangspunkt i Arduino miljøet, som det har set ud indtil Qualcomms nylige overtagelse.

Arduino IDEen

For nogle er Arduino først og fremmest en lille, smart og meget billig computer - dvs. et stykke hardware. Men det er kun den mindste del af historien: En langt vigtigere brik i Arduinos succes har været IDEen. IDE er en forkortelse for Integrated Development Environment, og sammen med den første hardware udviklere folkene bag Arduino også deres egen IDE; faktisk er historien nok nærmere, at de startede med software siden og skabte udviklingssproget Wiring - og herefter skabte Arduino for at lave en demo af, hvad Wiring kunne bruges til.

Og det var alt sammen en god idé: Har man prøvet at programmere en Arduino, har man helt sikkert også prøvet IDE - den software, man installerer på sin computer for at skrive programmet. Og stort set alle har vel også prøvet det allerførste indledende "Hello World!" program, der hos Arduino hedder Blink. Hvor "Hello World!" handler om at få en computer til at skrive netop det på en skærm eller noget papir, handler Blink om at få en lysdiode til at blinke på en computer, der hverken har skærm eller printer. Når den blinker, har man med succes skabt sit første Arduino program.

Men der sker meget mere under overfladen: Den klassiske Arduino bygger på en Atmel CPU, og den skal traditionelt set programmeres i sproget C/C++. C er det oprindelige sprog, der stadig bruges af mange, mens C++ er en kraftig udvidelse af C, der ikke mindst giver adgang til objektorienteret programmering. Begge varianter er ret vanskelige at have med at gøre, men de er også meget effektive, når man mestrer dem - og både Linux og Windows er oprindeligt skrevet i netop C/C++ for størstedelens vedkommende.

Wiring er i virkeligheden en stærkt forsimplet udgave af C++ - skabt for at gøre det meget, meget lettere for begyndere at komme i gang. Og det må siges at være lykkedes: Det er ubeskriveligt, hvor mange mennesker, der har taget Arduinoen til sig og har kastet sig ud i at skrive kode.

Andre "Arduino" systemer

Da IDEen netop er Arduinoens største aktiv, kan det nok ikke undre, at mange andre gerne har villet til fadet. Oprindeligt var der jo en klar sammenhæng mellem IDEen og de hardware produkter, der kom ud af Arduino miljøet: Det har utvivlsomt været en meget stor fordel for Atmel, der lavede alle de oprindelige processorer - men også en torn i øjet på konkurrenterne, der ikke kunne stille med noget tilsvarende. Derfor har der gennem tiderne været mange, der har lavet løsninger, så også deres hardware kunne bruges sammen med Arduino IDEen. Typisk har man skullet installere noget ekstra software i IDEen, og har så kunnet bruge andre typer hardware helt som en Arduino.

Mange har haft svært ved at skelne mellem projekterne, og der findes derfor megen hardware, der omtales som "Arduino", selvom de ikke rigtigt er det. Det har også nogle gange givet anledning til knubbede ord fra folkene bag Arduino, der har haft lidt svært ved at se deres fine IDE brugt til at markedsføre konkurrerende hardware; men det er nu engang vilkårende, når man laver open source. Man afgiver kontrol, og må somme tider se sit produkt brugt til noget andet, end man oprindeligt havde tænkt.

ESP32 er sådan et system: Espressif laver mange forskellige udviklingskit til deres produkter - det mest brugte, hvis man vil holde sig til "ren" ESP32, hedder ESP-IDF. Det har ikke noget med Arduino at gøre, og er først og fremmest tænkt til mere erfarne udviklere, der bruger almindelige C/C++ værktøjer til udvikling. Men Espressif har også lavet et SDK (Software Development Kit) med navnet ESP-Arduino - og som navnet mere end antyder, gør det det muligt at programmere en ESP32 med Arduino IDEen. Det er alt sammen blot nogle biblioteker, der skal installeres i IDEen, så kan man programmere sin ESP32 helt som var det enhver anden Arduino.

Og det er rigtig godt - hvis det er det, man vil.

IDEens begrænsninger

Selvom Arduinoens IDE er et fantastisk projekt, har det også sine begrænsninger - og dem kan man ramme meget hurtigere, end man umiddelbart skulle tro. Først og fremmest er det kun muligt at skrive kode i C i IDEen - C++ er ikke understøttet. Det betyder, at man ikke kan skrive Arduino biblioteker i IDEen - her bliver man tvunget til at finde andre løsninger. Det kan virke lidt tosset, da bibliotekerne netop er noget af Arduinoens største styrke, men det er altså en beslutning, folkene bag IDEen har truffet.

Man kan dog godt bruge C++ biblioteker inde fra IDEen, og det er jo netop det, langt de fleste gør i større eller mindre omfang. De fleste har nok prøvet at bruge Wire biblioteket, der giver mulighed for at kommunikere med hardware efter I2C standarden - eller måske et af bibliotekerne, der understøtter NMRA DCC? Har man prøvet et sådant bibliotek, ved man, at man starter med at definere det som en variabel (det hedder at instantiere i C++ sprogbrug) og herefter starter det op, typisk i ens setup() rutine (det hedder at initialisere).

Men man kan ikke selv skrive et nyt bibliotek i IDEen - her er man henvist til andre værktøjer.

En anden stor mangel - i IDE version 1 - har været mangel på code completion. Det behøver ikke være supersvært at skrive kode, og en IDE kan lige så godt hjælpe udvikleren med at skrive navne og syntaks færdig, når det nu allerede er klart, hvad udvikleren vil: Det kan spare mange tastetryk. Og IDEen kan også lige så godt påpege fejl, mens man skriver, hvis den alligevel ved, at man er på gale veje. Det er normale hjælpemidler i professionelle værktøjer - men manglede i lang tid hos Arduino: Indtil version 2 af IDEen.

Andre værktøjer

Er man vandt til at skrive software, har der altså været en del grunde til at se andre steder, når man skal vælge værktøj til at skrive Arduino programmer. Lige så begyndervenlig Arduinos IDE er, lige så meget er det et begynderværktøj, der mangler rigtigt meget af det, en erfaren udvikler sætter pris på. Når det kommer til stykket, er en Arduino trods alt blot en industriprocessor, der skal programmeres i C/C++. Dem er der mange af ude i verden, og der er mange, mange værktøjer med hver deres styrker og ulemper.

Vil man lave avancerede programmer til en ESP32, hvor man udnytter de mange faciliteter, den har, kan man ikke nøjes med Arduino IDEen: Her bliver man næsten tvunget ud i at vælge et mere professionelt værktøj. Er man meget konservativ (og lidt masochist) kan man bruge vi og en masse CLI værktøjer - det virker og har skabt Linux/Unix fra bunden - men tiden er i den grad løbet fra det. Sidenhen fik vi grafiske IDEer som Eclipse, og Microsoft verdenen fik Visual Studio. Selv har jeg overgivet mig til Jetbrains familien - jeg bruger det hver dag, og betaler et årligt abonnement for at få adgang til alle deres værktøjer - også selvom jeg har et betalt abonnement på Visual Studio gennem mit arbejde. Det korte af det lange er, at næsten alt kan bruges - det er helt op til en selv.

Fælles for de fleste af de her nævnte værktøjer er dog, at man selv overtager en meget større del af ansvaret for udviklingsprocessen: Helt klassisk skal man først skrive sin kode i C/C++. Herefter skal den compiles, og så skal den linkes. Når det er overstået, har man en binær fil (ens program), der på en eller anden måde skal overføres til den chip, hvor det skal bruges. Alt det er gjort nemt og ligetil i Arduino IDEen - men vælger man andre værktøjer, skal man selv mestre ihvertfald det meste.

De nye i klassen

I de senere år er der dog kommet nye spillere på banen: Når vi taler ESP32, er det først og fremmest PlatformIO, der fortjener opmærksomhed. PIO, som det ofte forkortes, er et Ukrainsk open source projekt til IoT (Internet of Things) projekter, der kombinerer alt det bedste fra Arduino IDEen med et fuldprofessionelt udviklingsmiljø. Det er gratis og kan bruges sammen med en lang række andre værktøjer - ihvertfald i princippet, virkeligheden ser lidt anderledes ud.

For der er også kommet en anden ny spiller: Visual Studio Code. Som navnet antyder, er der tale om et Microsoft produkt - men i modsætning til Visual Studio kan det køre på både Linux, Mac og Windows, og det er gratis. For at adskille navnene lidt mere, omtales det som regel som VS Code. Mange ser det som et af Microsofts sædvanlige forsøg på at slå benene væk under konkurrenterne, men det ændrer ikke på, at det er et rigtig godt værktøj, og prisen er helt rigtig.

Jeg nævner dem begge her: Min klare anbefaling til ESP32 udvikling er nemlig PlatformIO, og selvom den kan installeres i mange IDEer, er VS Code efterhånden blevet den eneste realistiske mulighed: Det er den, langt de fleste vælger, og det er her, al udvikling er fokuseret. PIO kan i princippet installeres i CLion, som er Jetbrains' C/C++ IDE, og da jeg har licens til den, har jeg også prøvet: Det var ikke nogen god oplevelse, der er alt for meget, der ikke fungerer ordentligt.

Så vil man bruge PIO, er man næsten også nødt til at vælge VS Code. Så får man til gengæld også et fremragende udviklingsmiljø uden de begrænsninger, der findes i Arduino IDEen - men på en måde, der er næsten lige så let at bruge. Det kan jeg kun anbefale, hvis man ønsker at gå skridtet videre i sin ESP32 udvikling. Der kan helt sikkert komme nogle endnu bedre modelbaneløsninger ud af det.

Det var egentligt min hensigt at slutte dette indlæg med et praktisk eksempel: Men det er allerede blevet mere end rigeligt langt nok, så det må vente til næste gang.

Lad mig til gengæld slutte med at fortælle, at jeg har fakta checket nogle af mine påstande ovenfor med min ven ChatGPT: Vi er ikke helt enige - ChatGPT påpeger, at man godt kan skrive biblioteker og anden C++ kode i Arduino IDEen og vil gerne vise hvordan - men erkender også, at det er meget bøvlet, og vi er enige om konklusionen: At PlatformIO er meget bedre til professionelt arbejde. Smile

 

__________________

MVH
Lars

Like 4 kan lide
Top

Picture

BLK_AARH

it

Indlæg: 134

PB

Tak for din artikel, er nu forviret på et højere plan.

Spøg til side, giver kort en beskrivelse, så man får en god opdatering på det der rør sig.
VIl dog nok tro det er for kompleks for de fleste modeltogsfolk at kaste sig over, men spændende den dag man får tid til at nørde.

Igen tak, og kun en opfordring til at skrive mere en anden gang.

__________________

V.h.
Bent L.K.

Like 0 kan lide
Top

Kommentarvisning

Vælg din foretrukne kommentarvisning og klik på "Gem indstillinger" for at aktivere dit valg.