Sie sind auf Seite 1von 68

c't

E S P 3 2
- �g ��--- - - --- s P e :::=:=:=:c =-=--1
-� :=::: := A�L�

G ru n d i

• Software schnell einrichten • Digital-Analog-Wandler steuern


• Hardware-Funktionen verstehen • Touch-Eingänge auslesen
t ESP32 ins WLAN bringen • Hallsensoren nutz�n

!
• Per Bluetooth Daten austauschen • BASIC-Interpreter freischalten

2019

PROJEKTE
€24,95
=,....
0

- ......

=ll"\
_o-
-�

Mini-Webserver mit Temperaturmessung • =N


=�
-ll"\
iiiiiöiii�
Bluetooth-Sensoren • Funktionsgenerator • --Cl
=o
�0'
=..-

Piano mit Toucheingabe • Türüberwachung �

-·-·······----··-

www.make-magazin.de
Arduino-Projekte
für Fortgeschrittene:

Digital
als PDF

Auch erhältlich:
Teil 1 für Einsteiger

Hardware

pROJEKTE �
�..:=:;:.��u:e.�er
·-

l'J Heise www.make-magazin.de


Inhalt
4 Schnelleinstieg:
Das Beste zweier Welten
10 Hardware:
Hardware-Interna
18 WLAN:

30
Flinker Funkwellenreiter
Bluetooth:
50 Türsensor mit Cloud-Anbindung
Durch die KombinatiOn des integrierten Hall�ensors mit externen
Strahlendblauer Funkenflug
44 Funktionsgenerator:
Magneten wird der ESP32 zur Cloud-fähigen Fernüberwachung
von Türen und Fenstern.
Signalerzeugung mit dem ESP2
50 Hall-Sensor:
Magnetfelder messen
56 Berührungssensoren:
Touch me!
61 Impressum
62 Ba sie:
Wie in alten Zeiten

56 Wackelpudding-Piano
Die Touch-Eingänge des ESP32 machen den Anschluss teurer

+
Tasten überflüssig. Acht Puddingbecher dienen als Tastatur für
ESP32 ThermomE X - D .
das Jelly-Piano, dessen Töne der Mikrocontroller intern erzeugt.

... {9�1 »

Temperatur

""

40 i<
·.
Luftfeuchti

;
it
80

18 ESP32 als WLAN-Server 4 4 Funktionsgenerator


· Mit wenigen Zeilen Code wird der ESP32 zum Dank seiner zwei Digital-/Analog-Konverter kann der ESP32 Sinus-,
Webserver, der per WLAN die aktuelle Temperatur Dreieck-, Sägezahn- und Rechtecksignale bis in den Kilohertz­
und Luftfeuchtigkeit im Browser anzeigt. Bereich erzeugen, die sich für Experimente nutzen lassen.

Make: ESP32 special 20 1 9 l 3


SCHNELLEINSTlEG �-
DasBeste
zweier Welten
Wer a u f d en ESP32 setzt, ko m m t nicht nur in d en Genu s s leistungssta rke r
Alles zum Artikel
und g ünst i g e r Ha rdwa re, sond e rn kann a uch von d e r int u i tiven Ard u ino­ I im Web unter .
Entwicklung sumgebung p rofitieren.
• make-magazin.de/xrtn
von Maik Schmidt

Andocken U nte r
Z u r P rog ra m mieru n g des E S P 3 2 u nd des
ESP8266 gibt es vie l e A l t e r n a tive n .
N e b e n d e r E ntwick l u n g mitt e l s C/C++ a u f Bevor ei n ESP32-Board mit der Ard uino-I D E man,
Li n ux ka n n m a n i m Termi n a l p r ü ­
fen , o b d a s B o a rd e r ka n n t w u rde. Dazu gibt
bevo r das B o a rd angeschlossen
Basis d e s I oT Deve l o p m e n t F r a m ew o r k verbu nden wird, muss e s a n den P C ode r den w u rde1d a s Kom m a nd o L s I d e v I t t y . * ei n.
(ESP-I D F) g i b t es a uc h d i e M ö g lich keit, den Mac a ngesc h l ossen w� rden. Das e rfolgt ü be r D a n n s c h li� ßt m a n das B o a rd a n u n d fü h rt
Chip i n L u a , J a v a S c ri p t; Mic r o Pyt h o n ode r einen U S B-Ansc h l u ss, der d a s Board mit Strom d a s Ko m m a nd o e r n e u t a u s . Der Ei ntrag, d e r
g a r BAS I C zu prog ra m mi e r e n . u nd neuer Softwa re ve rsorgen ka n n . Wie a l l e n e u hi n zu g e ko m m e n i s t , ve rweist a u f d a s
Sonderlich ei n stei g e rfre undlich sind U S B-Geräte ben ötigen die Boards ein e n Be­ E S P 3 2- B o a rd . U nt e r U b u nt u ka n n d a s ei n
diese Ka ndidaten a u s verschiedene n G r ün­ triebssystem-Treiber. ln dies. e m F a l l fü r den Ei n t r a g wie z_ u m B ei s pi e l l d e v l_t ty l t t y ­
den a l l e. nic ht u nd zum E rfo l g des E S P 3 2 CP2102"Chip des H e rstel lers Si L a b, derdie se­ usso sei n .
u nd d e s E SP8266 hat m a ß g e b lich, beig etra­ rielle K o m m u ni kation erledigt. Ä h n li c h lä u ft e s u n ter m a cO S . N ur gibt
g e n , dass sic h beide mit de r A rdui n o - I DE Wi ndows 10, Li n ux u nd a kt ue l l e V e rsio­ man hier d a s . Ko m m a nd o LIS l d e v l c u.*
p rogra m mieren l a s s e n .Die h a t sich ü�e r die n e n vo n m a c O S b ri n g e n d e n Trei b e r i n ei n , bevor u nd n a c hdem man d a s Boa rd a n-
l etzten J a h re zu ei n e m fa st k o n ku rrenzlosen d e r Regel bereits mit. A u f d e r S eite d e s Her­ · g e s tö p s e l t hat. Typi s c h e rwei s e h ei ß t der
Werkze u g fü r E l e kt r o n i k- Ei n stei g e r e n twi­ ste l l e rs (https://www. si l a bs.co m/prod u cts/ n e u e Ei ntrag l d e v l c u. S L A B_ U S B t o U A R T .
c ke l t u nd e rfre ut sic h a u c h u nter E S P 3 2 - dev e lo p m e nt-to o l s/s oftwa re/ u s b-to - u a rt­
F a n s wa c h sender Beliebtheit, b ridge-vcp-d rivers) gi bt es i h n bei B eda rf Her mit der IDE!
P ri n zi pi e l l ka n n die A rd ui n o - I D E s c h o n a be r a u c h a l s koste n l os e n Down I oad.
lange mit ei n e r g a nzen Rei h e u ntersc hied­ Wenn man das ESP32-Board an ein e n Zur I n sta l lation der A rduiilo- I D E bietet
lieber B o a rd s u m g e h e n , aber v o n H a u s Windows-Rec h n e r mit dem richtigen Trei be r die Webseite des A rduino-P rojekts
a u s e r ke n n t sie die E S P 3 2- B o a rd s nicht. a n s c h ließt, sol lte i m Geräte-Ma n a g e r ein ( https://www .a rd ui n o.cc/e n/Main/Softwa re)
Das lässt sic h a be r mit weni g e n H a ndg riffen neuer Eintrag u nt� ,9em P u n kt Ansch l ü sse er­ je nach Betriebssystem u nterschied li c h e
ändern. scheinen. Möglich keiten. F ü r Windows s t e h t zum Bei-
'

41 Make: ESP32 special 201 9


s piel neben ei n e m klassisc h e n S et u p a u c h � Geräte-Manager - D X
ei ne Z I P-Datei zu r Verfü g u n g . Die m u s s m a n
Datei Aktion Ansicht ?

$J •IrEli� I 6 1Iill i [J;1 1 lt X @


l edi g lich a u s pa c ken, o h n e die Anwend u n g


zLi i n s ta l lieren. D a r ü ber hi n a u s i s t die

� Akkus
v
IDE koste n l o s im Microsoft App Sto re DESKTOP- 18D6BMQ

Ii Anschlüsse (COM .& lPT)


>
(https://www.microsoft.com/de-de/p/a rduino­

i Silicon Labs CP210x USB to UART Bridge (COM3)


v

ide/9n b l g g h4rsd8) erhältlic h . F ü r macOS u nd


Li n ux stehen a u f der Ard ui no-Seite ebenfa l l s > . aJ Audio, Video und Gamecontroller
I n sta l l ationspa kete bereit. ) Audioeingänge und -ausgänge
> =Computer
Der erste Sta rt der A rd ui n o- I D E ist nicht
li=i!
,3
> Druckwarteschlangen
s o nderlich s p e ktaku lä r, denn die S oftwa re
> DVD/OD-ROM-Laufwerke
wi rkt etwa s s c h li c h t . Den o b e re n B e rei c h > jjW Eingabegeräte (Human Interface Devices)
dominieren ei n e M e n ü l eiste m i t s e c h s g ro­ ) Grafikkarten

ßen K n ö pfe n u nd ei n Text-Editor. I m u nte­ > "" IDE ATA!ATAPI-Controller

fl
ren Berei c h gibt es ei n e n Bereic h fü r A u s g a­ > _ Laufwerke

> Mäuse und andere Zeigegeräte


ben der I D E.
> - Monitore
Die sec h s Knöpfe bieten s c h n e l l e n Z u g riff .

C Prozessoren
> Netzwerkadapter
'

I Softwa<egeräte
auf die wichtig sten Kom m a ndos. G a n z lin ks >

� Speichercontro-ller
steht der Knopf zur Ü berprüfu n g des a kt u e l­ >
>
len Prog ra m m s . Wird er betätigt, werden die
> _ Systemgeräte 1
Q u e l l texte, die im a kt u e l l e n Fenster g eöffnet
> � Ta>taturen
sind, ü be rsetzt u nd auf Syntaxfe h l e r ü be r­ > i U.SB-Controller
prüft. Etwaige F e h l e r werden im Text-Editor
g e ke n n zei c h n et u nd im u nteren A u s g a be­
Wurde der Treiber erfolgreich installiert, erscheint der ESP32 so im Geräte-Manager.
fen ster vermerkt.
Ei ne ä h n li c h e F u n ktio n bietet der zweite

G ske1i:ch_octt14a,l Arduin.o 1.,8J6 D X


Kno pf. A l l e rdi n g s ü be rsetzt er das a ktue l l e
P rog ra m m nic h t n u r, sondern ü be rträgt e s
a u c h a u f d a s a n gesch lossene Mi krocontrol­
l e r-Boa rd. Sel bstverstä ndlich n u r, wenn das
P rog ra m m kei n e Syntaxfe h l e r enthält u nd
das Board korrekt a n gesch lossen u nd konfi­
g u riert ist.
Weniger spekta kulär sind die nächsten drei
Knöpfe. Mit i h n e n k a n n m a n neue Program­
me a n legen, besteh ende P rog ra m m e öffnen 2 I I put. your se�up oo·de he ll!e , -co run ·onoe :
u nd das a ktuel l e P rogramm speichern. 3
S c h ließlich gibt es ganz rechts noch ei n e n
4
vermeintlichen A u ß e n seiter, der a ber zu den
5
l,o.op() {
wic htigsten F u n ktio n e n der IDE g e h ö rt. Hi n­
6 void
put. your
ter i h m verbirgt sic h näm lich ein seriel l e r Mo­
nitor, mit dem m a n bequem mit dem a n g e­ 7 ll ma in oo-de he ll!e ,, ;oo. run ll!ep.e at.e dl· :!ir :

sc h l os s e n e n Boa rd ko m m u nizieren ka n n . :::


Zwa r gibt es einig e g ute u nd frei ve rfü g ba re 9
seriel l e Termi n a l s, a be r die I nteg ration in die
I D E vereinfacht die täg liche Arbeit e n o r m .

Kei n ESP32 weit und b reit Die Arduino-IDE wirkt spartanisch, kann aber eine ganze Menge.

Bevor m a n ei n e rstes P rog ra m m s c h rei b e n


u nd aufs ESP32-Board l a d e n ka n n, m u ss d a s
Board i n der I D E konfi g u riert werd e n . Die A r­
duino- I D E u nte rstützt bereits ei n e g roße An­
za h l u n terschied lich e r B o a rds, die i m M e n ü
Werkzeuge > Board a u sgevJä h lt werden kön­
n e n . Ei n e rster B lick sorgt e rst ei n m a l fü r Er­ Überprüfen
n ü c hteru n g , d e n n ei n E S P 3 2 - B o a rd ist hie r
nirge ndwo zu s e h e n . Offe nba r u nterstützt
die Sta nda rd - I n sta l l atio n lä n g st nicht a l l e
m ö g lichen P rod u kte. Öffnen
Viele Boards la ssen sich mitt l e rwei l e ü ber
den Boa rdve rwa lter im M e n ü Werkze u g e >
Boa rdverwa lter i n sta l lieren, a b e r der E S P 3 2 Für die wichtigsten Kommandos gibt es große Knöpfe.

Make: ESP32 special 20 1 9 15


SC HNELLE I N ST I EG I-------------- I
gehört per Vo rei n ste l l u n g n o c h nicht dazu. oh n e Code- Ä nde r u n g e n hinzuzufü g e n . V o rei n s te l l u n g d i e Li ste d e r u n te rstützten
U m ihn zu integ rieren, beda rf es ei n wenig · D i es m a l a c hteten d i e E n twi c k l e r a uf E rwei­ Boa rd s i n d e n offizi e l l e n A rd u i n o -Q u e l l e n ,
H a ndarbeit. Dabei hilft es zu verste hen, wie terba r keit, sodass sog a r B o a rd s u nte rstützt a be r d i e e n t h a lten zu rzeit den E S P 3 2 n o c h
die U nterstütz u n g vers c h i ede n e r B o a rds i n werd e n kö n n e n , die nicht vom A rd u i n o­ n i c ht. Wie d e n m eisten Pa ket- M a n a g e r n
d e r Arduino-I D E fu n ktioniert. Tea m sta m m e n . ka n n m a n d e m B o a rdve rwa lter a b e r zusätz­
l n d e n Anfä n g e n d e s A rd ui n o - P rojekts Davon machen mitt l e rwe i l e ei nige H e r­ li c h e Q u e l l e n fü r B o a rd-Konfi g u rCJti o n e n
ko n nte n i e m a nd dessen E rfo l g vora u s a h nen ste l l e r G e b ra u c h u nd die Firma Espressif, die hi nzufü g e n .
u nd so verlief die E n twickl u n g zu näc h st den ESP32 entwickelt hat, bi ldet kei n e A u s­ D i e z u sätz lic h e n Q u e l l e n werden ü be r
recht h e mdsä r m lig . W i c h tig wa r in erster n a h me. A u f Git h u b ( h ttps://gith u b.com/ das M e n ü Datei > V o re i n ste l l u n g e n festge­
Li nie, dass a l l es irge ndwie fu n ktionierte u nd e s p ress if/a rduino-esp32) hat sie zu d i e s e m l e g t. F ü r d e n E S P 3 2 fü g t m a n hier u n ter
ü be r etwa i g e E rweite r u n g e n dachte n i e­ Zweck das P roje kt .,Arduino C o r e for ESP32" d e m P u n kt ., Z u sätzli c h e Boa rdll'e rwa lter­
mand nach. veröffentlicht. U R LS " die UR L https://d l .e s p ress if.com/
Dieser An satz l i ef l a n g e Zeit g ut, stieß dl/package_es p 3 2_i ndex.j s o n hinzu: Bei Be­
a ber a n G renzen, als nicht m e h r alle Ard u i no- ' Fremdgänger d a rf l a s s e n sic h auch weitere Quellen hinzu­
Boards auf derse l be n M i krocontro l l e r­ fü g e n . Die werden jewei l s d u rc h ei n Ko m m a
Architekt u r basierten . Neben den AVR-C h i ps Der Code a u f Git h u b n ü tzt n i c h t vi e l , s o­ getre n nt.
m u ssten p l ötzlich a u c h ARM-Geräte m it der l a n g e er der A rd ui n o- I D E n i c h t h i nzugefügt We n n man den Dia l og fü r V o re i n ste l l u n­
IDE fu n ktioniere n . w u rde. Die e i n fa c h ste M ö g li c h keit, U nter­ g e n o h nehin s c h o n geöffnet h at, ist es ei n e
Zu diesem Zeit p u n kt w u rde d i e I D E u m stütz u n g fü r n e u e Boa rd s zu i n st a l lieren, ist g ute Idee, d i e Ko ntro l l kästc h e n fü r d i e a u s ­
die Mög l i c h keit e rweitert, n e u e H a rdwa re d e r B o a rdve rwa lter d e r I D E . Der s u c h t per fü h r l i c h e A u s g a be bei der Ko m pi l i e r ung
u nd beim H o c h l aden zu a ktiviere n . Das wird
sic h im weiteren V e r l a u f n o c h a l s n ützl i c h
e rweisen.
0
N a c hd e m d i e neue URL hi n z u g efü g t
w u rde, e r s c h ei n t bei d e r S u c h e n a c h d e m
Strg+T
E S P 3 2 i m B o a rdve rwa lter ei n n e u e r E i ntra g .
Sketch archivieren
Ei n K l i c k a uf d e n I n st a l liere n - Kn o pf lädt d i e
Kodierung korrigieren & ileu laden
p a s s ende Konfi g u rati o n h e r u n t e r u nd i n ­
Bibliotheken verwalten... Strg+Umschalt+l

Serieller ,Monitor Strg+Umschalt+M


sta l liert s i e sog l e i c h .
Serieller Plotter Strg+Umschalt+L

Es lebt!
D e r o b lig atori s c h e F u n kt i o n stest fü r jedes
ArduinoAVR·Board• M i krocontro l l e r- B o a rd ist es, ei n e L E D zum
Boardinforml!tionen holen
B li n ke n zu b ri n g e n . Ei n e solche Anwend u n g
Arduino/Genuino Uno·
Programmer. "AVRISP mkll" stiftet zwa r n u r wenig Si n n , ste l l t a ber sicher,
Arduino Duemilanove or Diecimila
Bootleader brennen dass d i e gesa mte E n twickl u n g sumg e b u n g
Arduino Nano
mcdi:�ie::i 2 3er.:· .20lf so fu n ktio n i e rt, wie sie s o l l .
Arduino/Genuino Mega or Mega2560
t :; h.:: t ur;. Gua:d.alur:·i
D i e m eisten B o a rd s verfü g e n zu m i ndest
mcdi!ied 3 S�p 2•HC: Arduino Mega ADK

ty : c lby Ue\o"ma:'l Arduino leonardo ü be r ei n e Power- L E D . Die lässt s i c h i n der


Arduino Leonardo ETH Reg e l a be r nicht p e r S oftwa re kontrol lieren
Thu example cc<ie l.5 in the public dcmain.
Arduino/Genuino Micro u nd l e u c htet n u r da n n , we n n d a s Boa rd mit
httr:: "-"',. . . ard.Ul:lC. cc '+::-n.'Tut�rial /Blink Arduino Esplora Strom versorgt wi rd . D a r ü b e r hi n a u s s p e n ­
Arduino Mini die r e n vie l e H e rste l l e r i h re n Prod u kten
II the �etup function runs once when you press reset or power the
Arduino Ethernet
mindeste n s ei n e weitere L E D , die sic h i n ei­
void setup () { ArduinoFio
g e n e n P r o g ra m m e n b e li e big verwenden
II initialize diqital pin LEO_BUIL!IN as an output . Arduino BT
lässt.
LilyPad Arduino USB
pinMode(LED_BOJLTIN, OUTPUT):

Bei m mitg eliefe rten Board ist das der Fa l l


· lilyPad Arduino
u nd Listi n g B l i n k.i n o lässt die e i n g eba ute
II the l oop tunction runs over and over again forever Arduino Pro or Pro Mini
void loop() { Arduino NG or older
Status-LED i m Sekundenta kt bli n ke n .
II turn the LE.O on (RIGH is
Arduino Robot Control F ü r ein e n ersten Test m uss das Board der
diqitalW rite(LED_BUIL!IN, HIGH) ;
delay(lOOO): II wait. for a second
diqitalWrite(LED_BUIL!IN, LOW): II turn the LED oft by making Arduino Robot Motor Ard ui n o-IDE beka n n t gemacht werden. Dazu
delay(lOOO): II wait for a second Arduino Gemma wä h l t m a n i m Menü Werkze u g e > Boa rd den
Adafruit Circuit Playground E i ntrag ., E S P 3 2 Dev M od u l e". A n s c h ließend
Arduino YUn Mini
wä h l t m a n u nter Werkzeu g e > Port den seri­
Arduino lndustrial101
ellen P o rt, ü be r den das E S P 32-Boa rd mit
Linino One
dem Rec h n e r verb u nd e n ist. S c h li e ß l i c h
m u s s m a n n o c h d i e ., F l a s h F req u e n cy" a u f
80MHz u nd ., U p l oad Speed" a u f 115 200 set­
zen. Diese u nd a l l e weiteren Parameter wer­
den i m fol g ende n n o c h a u sfü h rlich erklärt. ·

Ein Klick a u f den U p l oad-Knopf ü be rsetzt


Ohne Hilfsmittel unterstützt die Arduino-I D E den ESP32 nicht. das Prog ra m m u nd ü be rt rägt es a n sch lie�

61 Make: ESP32 special 20 1 9


ßend a u fs E S P 3 2 - B o a rd . Die Ü be rt ra g u n g VoreinsteHungen :X
dau ert ei n paar Sekunden u nd d e n a kt u e l l e n Einstellungen Netzwerk
Sta t u s zeigt d a s A u s g a befe n ster d e r A rd u­
Sketdlbook-Speicherort:
ino-I D E a n . Auf m a n c h e n ESP32-Board s zei­
II
��==========� --------�
lc:lj.Jsers'lnaikljlocumentsl,tlrduino Durchsuchen
gen sepa rate LEDs A ktivität a u f der serie l l e n ����
Sch nittste l l e a n . Das h eißt, diese L E D s blin­ Editor-Sprache: 1'-y
s - t."-s _em. _De_
faU
_t __ �v I_, (erfordert Neustart von Arduino)
____
_____

ken beim Senden u nd E m pfa n g e n von Editor-Textgröße:



Daten. Das mitge lieferte Bo a rd h a t s o l c h e Oberflächen-Zoomstufe: · !;21 Automatisch 100 ; Yo (erfordert Neustart von Arduino)
L E D s nicht. Nachdem das P ro g ra m m ü be rtra­ Thema: s
l tandard therna v
I (erfordert Neustart von Arduino)
gen w u rde, sol lte a be r die b l a u e Status-LED Ausfuhrliehe Ausgabe während: 0 Kompifierung 0 Hochladen
im Sekundenta kt blinken.
Compiler-Warnungen: !Keine v j,'-
Das B l i n k- P ro g ra m m ist ei n fa c h a u fg e­
0 Zeilennummern anzeigen
baut. I m Wesentlic h e n besteht es a u s d e n
0 Code.faltung aktivieren
F u n ktio n e n s e t u p ( ) u nd L o o p < ) . D a s i s t
0 Code,nach dem Hochladen überprüfen
ei n e Konventi o n , d e r a l l e A rd ui n o - P ro g ra m­
0 Externen Editor verwenden
me g e h o r c h e n . Die s e t u p <)- F u n ktio n wird
0 Kompilierten Kern aw-essiv zwischenspeichern
ei n m a lig a ufg e ru fe n , w e n n d e r Mi krocon­
0 Beim Start nach Updates suchen
tro l l e r sta rtet u nd ist d e r pe rfe kte O rt, . u m
0 Sketche beim Speichern auf <ie neue Dateierweiterung aktuaisieren (.pde -> .ino)
l nitia lisieru n g e n vorzu n e h m e n . Die L o o p <)­
0 Speichern beim überprüfen oder Hochladen
F u n ktio n enthält die tatsä c h li c h e P ro­
g ra m m - Logik u nd wird vom Mi krocontro l l e r Zusätzliche Boardverwalter-uRI.s: lhttps://dl.espressif.com/dl/package esp32 index.json
I�
i n ei n e r E n d l o s s c h l eife i m m e r wied e r a u f­ Mehr Voreinste11ungen können direkt in der Da�ei bearbeitet werden

g e rufe n . C: lj.Jsers'lnaik\App!)ata lj.ocal\flrduino lS'!Jreferences. txt


(nur bearbeiten, weM Arduino nicht läuft)
Vor den beide n F u n ktio n e n definiert das
/.
B l i n k- Prog ra m m ei n e, Kon stante n a m ens
L E D_P I N , w e l c h e die N u m me r des Pi n s e n t­
hält, der mit d e r Statu s - L E D des B o a rd s ver­ Das Hinzufügen neuer Quellen für den Boardverwalter ist einfach.
b u nden ist. B ei m mitg e lieferten B o a rd ist
das der Pi n mit der N u m m e r 2 . Bei a nderen
Boa rds ist es mit hoher Wa h rschei n li c h keit e Boardverwalter X

[Ale-
ei n a nderer Pi n u nd m a n c h e G e räte h a b e n
Typ
ü berha u pt kei n e Sta t u s.- L E D . I m Zweife l hilft
esp3'2 by Espressif Systems
ei n Blick i n s Date n b l att des He rste l l e rs . In diesem Pak et enthaltene Boards:
,
D i e s e t u p ()- F u n ktio n n utzt d i e p i n ­ ESP32 Dev Module, WEMOS . LoLin32.

I
Mor@ inf�

M o d e <>" F u n ktio n , u m d e n L E D - Pi n in d e n
Instaleren
A u s g a be m od u s z u s c h a l te n . D i e L o o p <)­
F u n ktio n versetzt a n s c h li e ß e nd mitte l s
d i g i t a L W r i t e < > d e n Pi n i n d e n Z us ta nd
H I G H . Dad u rc h l i e g e n am Pi n 3 , 3 V an und
Den ESP32 kann man leicht über den Boardverwalter instal lieren.
die LED l e u c htet. Die F u n ktio n d e L a y <)
wa rtet 1 000 Mi l liseku nden u nd ei n weiterer

0
Aufruf von d i g i ta L W r i t e < ) mit dem A r g u­
ment L O W sc h a ltet die L E D wied e r a u s . N a c h
ei n e r weite ren P a u s e von ei n e r Seku nde be­ n B l i nk. i n o
gi n nt das S pi e l von vorn, wei l die L o o p ( ) ­
'
F u n ktio n a u tom a ti s c h wied e r a u fg e r u fe n 1 c o n s t u i n t 8_t L E D_P I N = 2 ;
wi rd . Da mit b li n kt die L E D i m Seku ndenta kt 2
n 3 v o id s e t u p ( ) {
Beim Code ist zu beachten, dass F u n ktio­
4 p i n M o d e ( L E D_ P I N , OU T P U T ) ;
n e n , w[e z u m Beispiel s e t u p <), p i n M o d e C) 5.
ode r L o o p < ) d u rc h die A rd ui n o - U m g e b u n g 6
' 7 voi d Loop ( ) {
defi niert werd e n . Das gi lt a u c h fü r das V e r-
8 d i g i ta l W r i t e ( L E D_P I N� H I G H ) ;
' h a l t e n , a l so z u m B ei spi e l dafü r, d a s s die 9 d e l a y ( 1 000 ) ;
s e t u p <>- F u n kti o n a u t o m a ti sc h bei m Sta rt 10 d i g i t a L W r i t e ( L E D_P I N , L OW ) ;
des Mikrocontro l l e rs a ufg e rufe n wi rd . ln a n­ 11 d e la y ( 1 0 0 0 l ;
12
deren Entwickl u n g s u m g e b u n g e n w ü rde ei n
P rog ra m m , d a s ei n e L ED z u m B li n ke n
b ri n gt, gänzlich a nders a u ss e h e n .
Leid e r i s t cl i e A rd ui n o - U m g e b u n g nic h t
vo l l stä ndig kom pati b e l m i t a l l e n E S P 3 2 - den A rd ui n o-B o a rd s e n t hä l t . Für vie le sic h l eicht u m sc hiffe n u nd fü r s pezi e l l e
Boa rds u nd wird es verm utlich a u c h n i e sei n . ESP32-Boards ist diese Konstante nicht qefi­ Boards sog a r lösen. Es gibt a ber auch schwer­
Beispiel sweise definiert die U m g e b u n g ei n e niert u nd das wä re a u c h schwierig, wei l der wiegendere Mä n g e l . Bei s pi e l sweise ist die
K o n s t a n t e n a m e n s L E D _BU I L T I N , d i e die Wert fü r u n te rschiedliche ESP32-Boards u n­ F u n ktio n . a n a l o g W r i t e ( ) zu rzeit noch nicht
Pi n- N u m m e r der ei n g e ba u t e n LED auf terschiedlich sein ka n n . Dieses P r o b l em lässt i m p l e m e ntiert.

M a ke: ESP32 special 201 9 17


SCHNELLE I N ST I EG I
t-------------

s c h i ed li c h e n Speic h e r g r ö ß e n d a h e r, s o n ­
d e r n va riieren u n ter a nderem a u c h i n d e r
Strg+T L e s e - u nd S c h re i b g e s c h w i nd i g keit. D a h e r
Sketch archWieren bietet d i e A rd uino-I D E Ei n ste l l m ö g li c h keite n
Kodierung korrigieren & neu laden fü r d i e wic htigsten F l a s h - P a ra m eter.
Bibliotheken verwalten... Strg+Umschaft+l ., F l a s h m ode" legt die G e s c h wi ndig keit
Serieller Monitor Strg+Umschaft+M
des F l a s h fest. G e n a u e r g e s a g t l e g t diese
Serieller Plotter Strg+Umschalt+l
O ptio n fest, ü be r wie vie l e Lei t u n g e n u nd
Boardverwafter ... a u f w e l c h e A rt der E S P 3 2 m i t dem F l a s h per

J.
S P I komm u n iziert. Anders als etwa beim Ar­
Arduino Gemma d u i n o ist der F l a s h - S p e i c h e r z u r Aufn a h m e
Boardinformationen holen Adafruit Circuit Playground d e r P rog ra m m e n i c h t i m M i krocontro l l e r­
Arduino YUn Mini C h i p entha lten, sodass die H e rste l le r ei n e n
Programmer: "AVRISP mkll"

Bootloader brennen
Arduino lndustrial101
Extra-Chip exte r n a n s c h li e ß e n u nd i h n a n ­
by Scott Fitzgera ��-----'---1 Linino One
ste uern m ü ss e n .
modifud 2 Sep 20lf Arduino Uno WiFi
by Arturo Guadalupi D e r sc h n e l l ste M od u s z u r Ko m m u nika­
e S�::p 2016
ESP32 Arduino
modifü:d tio n mit dem exte r n e n F l a s h ist Q I O (Quad
i)y Colby Nf::Yo1llan TIGO LoRa32-0LED Vl
1/0 Fast Read) u nd k n a p p d a hinter kom mt
ESP32 Dev Module
T h is example code is in the public domain.
XinaBox CW02
QOUT ( Q u ad O u t p u t F a st Read) . An d ritter
Ste l l e steht DIO ( D u a ll/0 Fast Read) u nd das
http: Ji.."Yll.-1. arduino. cc/en/Tutorial/Blink ESP32 Wrover Module

'l ESP32 Pico Kit S c h l u s s l i c h t bi ldet DOUT (Dual Output Fast


SparkFun ESP32 Thing Read). Wäh rend d i e ersten beiden Verfa h re n
II the :=�etup f unction runs once when you press reset or power the

void setup() {
u-blox NINA-WlO series (ESP32) vier S P I - Pi n s ei n setze n, benöti g e n d i e l etz­
II initiali ze digital pin LED_BUILTIN as an outpu't. Widora AIR ten beid e n n u r zwe i . Nic h t a l l e B a u stei n e
pinMode(LED_BUILTIN , OUTPUT); Electronic SweetPeas - ESP320
ko m m e n m i t a l l e n V e rfa h re n zu recht, a be r·
Nano32
das m it g e lieferte B o a rd versteht Q I O .
II the loop function runs over and over again forever LOUN 032
void loop() I
D i e O ptio n ., F l a s h freq u e n cy" spezifiziert
LOUN D32 PRO
diqitalWrite(LED_BUILTIN , HIGH); //turn the LED on
WEMOS LOLIN32
die Ta ktfre q u e n z fü r Z u g riffe a uf das F l a s h .
delay(lOOO);
Oongsen Tech Pocket 32 Mit 40 M H z sol lten d i e m eisten B a u stei n e a r­
"WeMos" WiFi&Biuetooth Battery beiten kö n n e n , a be r 80MHz kö n n e n zu ei n e r
ESPea32 deutlic h e n Besc h l e u n i g u n g fü h re n . Auf U m ­
Noduino Quantum g e b u n g e n , d i e m i t 8 0 M H z nic h t a rbeiten
Node32s kö n n e n , fü h rt diese E i n ste l l u n g sch n e l l zu
Hornbill ESP32 Dev
A b s t ü rze n .
Hornbill ESP32 Minima
S c h l i e ß l i c h defi n i e rt ., F l a s h s i z e " die
G rö ß e des exte r n e n F l a s h - B a u stei n s . M ö g l i ­
Nach der Installation stehen viele verschiedene ESP32-Boarils zur Verfügung.
c h e G rö ß e n fü r d e n a u s g ewä h l ten Boa rd­
Typ e n si nd 2 M B ode r 4MB (di e G rö ß e n i n
K l a m m e r n g e b e n die Kapazität i n M e g a b i t
Strg+T a n ) . E i n zu g ro ß g e wä h l ter W e r t w ü rde·
Automatische Formatierung
Viele Ste l l sch ra u ben
Sketch archivieren dafü r s o r g e n , d a s s d e r Bootloader des
Kodierung korrigieren & neu laden G a n z e g a l , a u f w e l c h e Weise d i e E S P 3 2 - U n ­ ESP32 einen fa l s c h e n Spei c h e rbe reich l i est
Bibliotheken verwalten... Strg+ Umschalt+) terstützu n g i n sta l l i ert w u rde, a m E n d e ka n n · u nd das g e s p ei c h e rte P rog ra m m w ü rde
Serieller Monitor Strg+ Umschalt+ M m a n ü be r d a s M e n ü Werkze u g e > B o a rd a u s nicht .sta rte n .
Serieller Plotter Strg+ Umschalt+ L ei n e r F ü l l e v o n E S P 3 2 - B o a rd s wä h l e n . F ü r F ü r e i ni g e A n w e nd u n g e n reicht sel bst
d a s mitge lieferte Board i st ., E S P 3 2 Dev Mo­ d a s verg l ei c h sweise ü p pige RAM a u f dem
WiFi101 Firmware Updater
d u l e " die ric h t ige Wa h l , wei l dieser B o a rd­ ESP32 nicht aus. M a n c h e B o a rd s haben
Board: "ESP32 Dev Module" Typ e i nige F r e i h eitsg rade lässt u nd s o m i t an d a h e r zusätzl iches PSRAM (pseudostatisches
Flash Mode: "QIO" ei n e V i e l za h l v o n E S P 3 2 - B o a rd s a n g e p a sst RAM). d a s man mit d e r e n t s p rec h e nden
Flash Frequency; "BOMHz" werden ka n n . M e n ü option namens PSRAM a ktivieren be­
Flash Size: "4MB (32Mb)" B e i d e n E S P 3 2 - B o a rds h e r rs cht nä m li c h zie h u n g sweise dea ktivieren ka n n .
PSRAM: "Disabled"
e i n z i e m l i c h e r Wi ldwu c h s u nd so fu n ktio­ I m V e rg l e i c h z u m H a u pts p e i c h e r i s t ei n

Partition Scheme: "Standard"


niert d i e Konfig u ration mit der Bezei c h n u n g F l a s h oft recht g ro ß u nd w i e bei Festpl atte n

Upload Speed: "921600"


., E S P 3 2 Dev M od u l e " p r i n zi pie l l fü r ei n e n ist es si n n vo l l , den Spei c h e r zu pa rtit i o n i e ­
g a nzen Z o o von G e räte n . Wie s c h o n zuvor ren, a l so a u fzutei l e n . A u f d i ese Weise ka n n
Core Debug Level: "Verbose"
b e m e r kt, haben zum Bei s pi e l nicht a l l e d a s F l a s h p a ra l l e l m e h re re A n w e nd u n g e n
Port: "COM6"
B o a rd s ei n e Sta t u s - L E D und fa l l s s i e d o c h u nd d i e d a zu g e h ö ri g e n D a t e n b e h e r be r­
Boardinformationen holen .
ei n e h a ben, ist s i e n i c h t i m m e r m i t demsel­ g e n . P ri n zi p i e l l ka n n d i e Pa rtiti o n i e r u n g a u f
Programmer. "AVRISP mkll" ben Pi n verbunden. G ravierendere U nter­ fa st beliebi g e Wei se e rfo l g e n , a be r d i e A r­
Boot)oader brennen s c h i ede gibt es i n a nderen Be rei c h e n u nd so d u i no-I D E b i etet u nter d e r Opti o n ., P a rtition
fi nde n sich i n u nterschiedlichen P rod u kten S c h e m e " die gä n g i g sten M od e l l e an. Fü r
Für viele ESP32-Boards kennt das Werkzeuge­ versc h i ed e n e A u s p räg u n g e n von Flash­ e rste Ex p e r i m e nte ist d e r Wert ., Standa rd"
Menü viele Einstellungen. S peic h e r n . D i e ko m m en n i c h t n u r mit u nter- si n n vo l l .

81 Make: ESP32 specia l 20 1 9


----------- ------

We n i g ü be r ra s c h e nd defi n i e rt d i e Option
"
(_)
0
" U p l oad Speed , m it w e l c h e r Geschwi nd i g­
keit Daten v o n der A rd u i no-I D E z u m Boa rd Lo g B e i s p i e l • 1 no
ü b e rtra g e n werd e n . N i cht a l l e Boa rds ko m­
1 v oid s e tup() {
men mit a l l e n Ü bertra g u n g s g e s c h w i nd i g­
0
2 S e r ia l . b e g i n ( 1 1 5 2 0 0 L ) ;
keiten kla r u nd es e m pfi e h l t s i c h , mit 3 }

0 5 void L o o.p ( ) {
1 1 5 .200 Ba ud zu beg i n n e n . 4
Die l etzte O p t i o n ist " Core Debug Level "
6
0
L o g_e ( " E r r o r " ) ;
u nd d i e ste u e rt d i e G e s c h wätzi g keit v o n 7 L o g_w ( " W a r n i n g " ) ;

()
Log-Au sga ben a u f dem Boa rd. Sowo h l wä h­ 8 L o g_ i ( " I n f o " ) ;
rend der Entwickl u n g a l s a u c h wä h re nd des 9 L o g_d ( " D e b u g " ) ;

()
10 L o g_v ( " V e r b o s e " l ; t
Betriebs e i n e r Anwend u n g h e l fe n Log-A u s­ 11 d e l a y ( 1 000 ) ;
ga ben a u f d e r s e ri e l l e n S c h n ittste l l e . M i t 12
n
i h re r H i lfe lässt s i c h der a kt u e l l e Z u stand des
Syst e m s e r m itte l n ode r ein F e h l e r e i n krei­
sen. A l l e rd i n g s ha ben Log-Ausgaben i h re n Fazit seh e Code-Ko m p l etti e r u n g ode r einen
P r e i s u nd so ist es s i n nv o l l , wä hrend des re­ D e b u g g e r.
g u lären Betriebs deutlich w e n i g e r Log -Aus­ D i e A rd u i no-I D E ist lä n g st n i c h t das e i n z i g e Trotzdem - otle r gerade deswegen - ist sie
ga ben ü be r d i e seri e l l e S c h n ittste l l e zu s e n ­ Werkzeu g , m i t d e m E ntwic k l e r Softwa re fü r fü r e rste Ex peri m ente u nd kleine re P rojekte
den, a l s z u m B e i s p i e l wä h rend e i n e r D e b u g­ d e n E SP 32 e rste l l e n kö n n e n u nd a u f d en optima l . Sie ü be rfrachtet u nd ü be rfordert den
g i n g -Sitzu n g . e rsten B l i c k hat s i e e i n i g e U nz u l ä n gl i c h ke i­ E i n steiger nicht mit F u n ktionen, die sich erst
Zu d i e s e m Zweck kö n n e n Log-Ausgaben t e n . S i e b i etet wed e r Z u ga n g zu a l l e n o r i g i­ mit m e h r E rfahrung a l s n ützl ich erweisen. Fer­
mit einer Dri n g l i c h keitsstufe (Level) versehen nären E S P 3 2 - F u n kt i o n e n n o c h zu a l l e n des n e r n i m mt sie i h re n Anwendern genau die
werden. Auf dem ESP32 g i bt es - nach Dring­ A rd u i n o - U n iv e rs u m s . Da r ü b e r h i na u s hat Handg riffe ab, die bei Anfängern erfahrungs­
l i c h keit geord n et - die Stufe n Error ( F e h le r). s i e auch kei n e F eatu res w i e eine a utomati- gemäß zu viel Frustration fü h ren. -dab
Wa rn (Wa r n u n g ) , I nfo ( l nfo rm.a tion). Debug

$)COM6 -
(Fehlersuche) u nd Verbose (wortreich). Listi n g
0 X
LogBeispie l . i n o zeigt die Verwend u ng der da­
zugehörigen Log-F u n ktionen. I II Senden I
D i e se t up <)- F u n kt i o n sta rtet d i e Kom­ [il] [LogExamp1e.ino:7] 1oop(]: Warning
....

.
m u n i ka t i o n a u f d e r s e ri e l l e n S c h n ittste l l e [E] [LogExamp1e.ino:6] 1oop(]: Error

m i t einer Geschwind i g keit v o n 1 15 .200 Ba ud.


[il] [LogExamp1e.ino:7] 1oop(]: Warning
[E] [LogExamp1e.ino:6] 1oop(]: Error
i n der L o o pO-F u n kt i o n e rze u g e n da n n [il] [LogExamp1e.ino:7] 1oop(]: Warning

L o g _e <), L o g _w <) u nd s o weiter i m S e k u n ­ [E] [LogExamp1e.ino:6] 1oop(]: Error


[il] {LogExamp1e.ino:7] 1oop(]: Warning
denta kt Nac h ri c hten der versch i edenen S t u ­ [EI [LogExamp1e.ino:6] 1oop(]: Error
fe n . Per V o re i n ste l l u n g w e rd e n a l l e rd i n g s [il] [LogExamp1e.ino:7] 1oop(]: Warning
[E] [LogExamp1e.ino:6] 1oop(]: Error
kei n e Log -Ausga b e n a u f d i e seri e l l e S c h n i tt­
[il] [LogExamp1e.ino:7] 1oop(]: Warning
ste l l e gesendet. Davo n ka n n man s i c h ü be r­ [E] [LogExamp1e.ino:6] 1oop(]: Error

zeugen, i nd e m man da s Prog ra m m a u fs [il] [LogExamp1e.ino:7] 1oop(]: Warning


[E] [LogExamp1e.ino:6] 1oop(]: Error
Boa rd lädt, d e n s e ri e l l e n M o n itor sta rtet [il] [LogExamp1e.ino:7] 1oop(]: Warning
u nd die Ü bertra g u n g s g e s c h w i nd i g ke i t a u f V

1 1 5 .200 Ba ud setzt. D i e A u sgabe i m seri e l l e n 0 Autoscroll D Zeitstempel anzeigen I Neue Zeile v 11115200 Baud "II Ausgabe Kisdlen
I
Mon itor b l e i bt leer.
Setzt ma n d i e O p t i o n " C o re D e b u g So werden nur Warnungen und Fehler ausgegeben.
Level " h i n g e g e n a u f Wa rn u nd s c h i ebt das

$)COM6 -
P r o g ra m m e r n e u t a u fs Boa rd, werd e n d i e
0 X
A u sga b e n d e r Stufe n F e h l e r u nd Wa r n u n g
konti n u i e r l i c h a u sg e g e b e n . Neben dem I I�
Nachrichte ntext enthält j ede Z e i l e e i n e A b­ [E] [LogBeispiel.ino : 6] 1oop(] : Error
....
kü rzu n g d e r Stufe ( i n d i e s e m Fa l l " E " u nd [il] [LogBeispiel.ino:7] loop() : Warning
"
" W ) . d i e N u m m e r d e r P rog ra m m ze i l e, i n
[I] [LogBeispiel.ino:8] 1oop(]: In-fo
[D] [LogBeispiel.ino:9] 1oop(]: Debug
d e r d i e A u sga be e rze u g t w u rd e u nd d e n [V] [LogBeispieL ino: 10] 1oop(]: Verbose

Na m e n der F u n kt i o n , a u s d e r d i e A u sgabe [E] [LogBeispiel.ino:6] 1oop(]: Error


[W] [LogBeispiel.ino:7] 1oop(]: Warning
sta m m t. Da s s i nd wertv o l l e I n fo rmati o n e n [I] [LogBeiopie1.ino:8] 1oop(]: Info
b e i e i n e r Feh l e rs u c h e . [D] [LogBeiopiel.ino:9] 1oop(]: Debuq

Setzt ma n s c h l i e ß l i c h " Core Debug Level "


[V] [LogBeiopiel. ino: 10] loop() : Verbose
[E] [LogBeispieL ino:6] 1oop(]: ErZ:.or
auf Verbose, werden nach e i n e m erneuten [il] [LogBeispiel. ino:7] loop() : Warning

U p l oad alle Meld u n g e n ausgegeben.


Festz u halten ist n o c h , dass a l l diese Para­
[II [LogBeiopiel.ino:8] 1oop(]: Info
[D] [LogBeispiel.ino:9] 1oop(]: Debuq r
[V) [LogBeiopiel.ino:10] loop() : Verbose
m eter n i cht fü r jedes E S P 3 2- B oa rd konfig u­ V

riert werden kö n n en . D i e E i nt rä g e im Werk­ 0 Autoscroll 0 Zeitstempel anzeigen INeue Zeile v I ll!SZOO Baud. vll Ausgabe löschen
I
zeuge- M e n ü va r i i e re n da h e r v o n Boa rd zu
Boa rd. Hier sind alle Log-Ausgaben zu sehen.

M a ke: ESP32 special 20 1 9 19


HARDWA R E ��---- --
-- -------

Hardware-Interna
Fü r ein p a a r Euros bietet der ESP32 Konnektivität und
Rech enleistung satt. Auf d e m C h i p g ibt es aber noch viel m e h r
Nützliches z u entdecken und w e r d a s Maxi mum a u s d e m ESP32
h e raus h olen möchte, sollte alle seine E i g enschaften kennen.

von Maik Schmidt

Alles zum Artikel


I im Web unter
• make-magazin.de/xnxr
ie Hardware des ESP32 bietet bisher un­
D geahnte Leistung zu einem sehr niedri­
gen Preis. Auf der Fläche eines Daumennagels
tummeln sich neben WLAN und Bluetooth di­
verse Sensoren und das Gerät hat jede Menge
Schnittstellen, oft sogar in mehrfacher Aus­
führung. Vor dem Start eines neuen Projekts
lohnt es sich daher, einen genauen Blick auf
den Chip und sein Ökosystem zu werfen.

Artenvielfalt
Entwickelt wurde der ESP32 von Espressif Sys­
tems in China (Shanghai), derselben Firma, die Mittlerweile gibt es eine Vielzahl unterschiedlicher Development-Boards für den ESP32.
den ESP8266 entwickelt hat. ln großen Stück­
zahlen ist er seit Ende 2016 verfügbar und seit­
dem erfreut er sich wachsender Beliebtheit etwas für die industrielle Fertigung. Darüber schwindigkeit ai' so durchaus, weil zum Bei­
unter Elektronik-Bastlern. Weil der ESP32 noch hinaus fehlen ihnen trotz ihrer vielen Funk­ spiel der ESP32-SOWD und der ESP32-D2WD
verhältnismäßig neu ist, wurden noch nicht tionen noch ein paar wichtige Eigenschaf­ nur mit höchstens 160MHz gegetaktet wer­
alle seine Fähigkeiten in aller Tiefe dokumen­ ten. Beispielsweise haben sie fast alle nur den können. Prinzipiell ist die Taktrate bei
tiert und zu manchem Thema findet sich wenig beziehungsweise gar keinen Flash­ allen Modulen per Software bis zur maxima­
selbst nach längerer Recherche nicht allzu Speicher. len Taktfrequenz einstellbar. ln der Praxis ist
viel. Das gilt ebenso für die ESP32-Software, Deshalb gibt es Module, die auf den Basis­ aber über den ESP32-Core für Arduino die
denn auch die befindet sich noch im Fluss. Chips aufbauen und sie um nützliche Hard­ Frequenz in den Bibliotheken auf 240MHz
Wichtig zu verstehen ist zuerst, dass es ware erweitern. Ein gutes Beispiel dafür ist (bzw. 160MHz) fest eingestellt. Eine Anlei­
nicht "den" ESP32 gibt, sondern dass unter­ der ESP32-WROOM-32. Er basiert auf dem tung, wie man die Frequenz anpasst, finden
schiedliche Ausprägungen existieren. Im We­ ESP32-DOWDQ6 und spendiert ihm unter an­ Sie unter den Links.
sentlichen unterscheiden sie sich in der An­ derem 4MB Flash-Speicher. ln der Brust der meisten Modelle schlagen
zahl der Prozessor-Kerne, der Größe des ein­ Doch selbst mit den nackten" ESP32-Mo­ also gleich zwei Herzen, das heißt, zwei (PU­
"
gebauten Flash-Speichers und in der Ge­ dulen dürften die meisten Hobbyisten nicht Kerne. ln der Dokumentation tragen die
häuse-Form. Sie haben so wenig klangvolle viel anfangen können. Sie sind sehr klein und beiden Kerne die Namen Protocol CPU
Namen wie ESP32-DOWDQ6, ESP32-DOWD, lassen sich nicht ohne Weiteres mit Drähten (PRO_CPU) und Application CPU (APP_CPU).
ESP32-D2WD, ESP32-SOWD. oder einem Breadboard verbinden. Daher Der Kern namens PRO_CPU ist verantwort­
Die Bezeichnungen wirken zunächst kryp­ dürfte die Mehrheit der Bastler zu einem De� lich für die gesamte Kommunikation, also für
tisch, folgen aber einem einfachen Schema. velopment-Board wie dem mitgelieferten WLAN und Bluetooth, aber auch für andere
Der erste Buchstabe spezifiziert die Anzahl greifen. Kommunikationssysteme, wie zum Beispiel
der Prozessor-Kerne. D steht für Duai-Core Development-Boards gibt es in vielen 12C und SPI. Um den Code der Anwendun­
und S für Single-Core. Die darauf folgende Ausprägungen und sie unterscheiden sich gen kümmert sich der APP _CPU-Kern. Ob­
Zahl gibt an, wie groß derinterne Flash-Spei­ teilweise deutlich voneinander. Die einfachs­ wohl prinzipiell möglich, ist es nicht ganz
cher des Bausteins ist. 0 bedeutet, dass er ten führen lediglich alle Pins des ESP32 nach
keinen hat und die 2 steht für 2MB. außen, so dass das Gerät problemlos mit an­
Weiter geht es mit einer Kennung für die deren Bauteilen verbunden werden kann.
Netzwerk-Fähigkeiten des Chips. Die wird Meist haben sie noch eine oder mehrere
Entwickler-Boards
mit zwei Buchstaben kodiert und kann die LEDs. Boards wie das ESP-WROVER-KIT
folgenden Werte annehmen: verfügen sogar über einen kleinen
WD (Wi-Fi b/g/n, BT/BLE Dual Mode), AD Bildschirm, einen Slot für SD-Karten
(Wi-Fi a/b/g/n, BT/BLE Dual Mode) und CD und einen Kamera-Anschluss.
(Wi-Fi ac/c/b/n/g, BT/BLE Dual Mode).
ln Bezug auf die Bluetooth-Fähigkeiten Doppelher(t)z
sind die Produkte gleich, aber beim WLAN
gibt es durchaus Unterschiede. Trotz dieser Vielfalt ticken die Bo-
Schließlich kommen die Chips noch in . ards intern alle gleich und haben
ve-rschiedenen Gehäusen daher und die einen oder zwei Prozessor-Kerne.
kann man an den letzten beiden Stellen der Jeder Kern ist eine 32-Bit-CPU Xtensa
Produktkennung ablesen. Steht hier nichts, LX6, die neben einer Fließkomma-Ein­
dann handelt es sich um einen Chip mit den heit auch Unterstützung für DSP-Ope­
Abmessungen Smm x Smm in der QFN-Bau­ rationen (Digital Signal Processing) bie­
form (Quad-Fiat No-Leads Package). Der tet.
Wert Q6 steht hingegen für 6mm x 6mm, Die CPU bringt es -je nach Modell -auf
ebenfalls in der Bauform QFN. 200 bis 600DMIPS (Dhrystone MIPS) bei einer
. Die Basis-Chips des ESP32 eignen sich Taktfrequenz zwischen 80MHz und 240MHz. Module basieren in der Regel auf Chips und
nicht für den Heimgebrauch. Sie sind eher Die Module unterscheiden sich in ihrer Ge- Entwickler-Boards.

Make: ESP32 special 20191 11


HARDWARE :�-
einfach, die beiden Kerne parallel in eigenen Speicher aufgeteilt wird. Das ROM zerfällt zum Der ESP32 spielt, was den Speicher an­
Programmen zu nutzen. Beispiel in zwei Adressbereiche mit jeweils geht, in einer anderen Liga als der ESP8266
ln der CPU gibt es vier Timer mit jeweils 384KB und 64KB. Beim SRAM sind es sogar oder die meisten Arduino-Modelle. Der AT­
64 Bit, die sich auf vielfälti§e Art und Weise drei mit 192KB, 128KB und 200KB. ln der Pro­ Mega328P, der den Arduino Uno antreibt,
nutzen lassen. Sie eignen sich zum Rauf- und grammierung spielen diese Interna allerdings . bringt es zum Beispiel nur auf 2KB SRAM und
Runterzählen und haben einen Prescaler, um keine große Rolle. selbst der Arduino Due kommt mit gerade
die Frequenz des Timers vom CPU-Takt zu Neben dem üblichen RAM und ROM exis­ einmal 96KB daher. Bei solchen Vergleichen
entkoppeln. Über diverse lnterrupts lassen tieren auf dem Chip noch weitere Speicher­ darf man natürlich nicht vergessen, dass die
sich die Timer einfach in eigenen Program­ bausteine. Der Echtzeituhr stehen zum Beispiel verschiedenen Produkte nicht auf derselben
men nutzen. gleich zwei mit jeweils 8KB zur Verfügung. ProzessareArchitektur basieren. Beispielswei­
Dazu gibt es eine Echtzeituhr (RTC, Real­ Darüber hinaus gibt es noch 1KB, also 1024 se operiert der ATMega328P auf 8Bit wäh­
Time Clock). die nicht nur zur Ermittlung der Bits, eFuse-Speicher, von dem 256 Bits für das rend es beim Due und beim ESP32 32Bit sind.
Zeit dienen kann, sondern auch eine wichti­ System reserviert sind. Mit dieser besonderen Auch gegenüber dem ESP8266 hat der
ge Rolle bei den Stromspar-Funktionen Art des Speichers ist es möglich, Informatio­ ESP32 die Nase vorn, denn der Vorgänger
spielt. Allerdings wird diese Uhr in der Regel nen persistent zu speichern, also über Aus­ musste sich mit 32 KB RAM für den Pro­
nicht durch eine separate Batterie versorgt. schaltvorgänge hinweg. Der Name Fuse steht gramm-Code und 80 KB für die Programm­
im Englischen für Sicherung. Jedes Bit im Daten begnügen.
eFuse steht für eine solche Sicherung und die
Platz satt kann man wortwörtlich durchbrennen lassen. Es reicht trotzdem nicht
Sobald eine solche Sicherung durchgebrannt
Über den Chip verteilt hat der ESP32 jede ist, verwandelt sich das dazugehörige Bit in Für einen Mikrocontroller wirkt ein Hauptspei­
Menge Speicher. 448KB ROM (Read Only Me­ nicht mehr löschbaren ROM. cher mit 520KB schon recht üppig, aber für
mory) enthalten grundlegende Funktionen, Dieser Mechanismus eignet sich unter an­ manche Anwendungen ist selbst das nicht
die sich unter anderem um die drahtlose derem dazu, einem Chip eine eindeutige Ken­ genug. Erfreulicherweise lässt sich der ESP32
Kommunikation und um die Verschlüsselung nung einzubrennen. Allerdings muss man bei bei Bedarf mit PSRAM (Pseudostatic Random
kümmern. Hier finden sich auch exotischere der Verwendung von eFuse Vorsicht walten Acce�s Memory) erweitern. PSRAM ist im
Dinge, wie zum Beispiel ein kompletter BASIC­ lassen, denn eine Schreiboperation lässt sich Grunde DRAM (Dynamic Random Access Me­
Interpreter. nicht rückgängig machen. Hobby-Program­ mory), das so tut, als wäre es SRAM (Static Ran­
Programme und Daten teilen sich wäh­ mierer werden eher selten auf eFuse-Speicher dom Access Memory). Das größte Problem
rend der Ausführung 520KB SRAM (Static Ran­ zugreifen, aber für kommerzielle Produkte ist mit DRAM ist, dass diese Form des Speichers
dom Access Memory). Werte wie 448KB und dieses Feature sehr wichtig. Es hat unter an­ unentwegt aufgefrischt werden muss, damit
520KB klingen zunächst ungewöhnlich. Sie re­ derem eine wichtige Rolle bei der Verschlüs­ keine Informationen verloren gehen. Bei
sultieren aus der Art und Weise, in der der selung von Speicherinhalten. SRAM ist dieses Auffrischen nicht notwendig,
erfordert aber mehr Logik und damit Platz auf
. einem Chip. PSRAM liegt genau dazwischen
und ist im Wesentlichen nichts anderes als
DRAM mit ein wenig Zusatzhardware, die das
Bluetooth automatische Auffrischen übernimmt.
Bluetooth
link Der ESP32 integriert PSRAM nahtlos in sei­
baseband
controller. nen Adressraum, aber es unterliegt einigen
Einschränkungen. Zum Beispiel können An­
wendungen nicht aufs PRAM zugreifen, wäh­
rend der Flash-Speicher beschrieben wird be­
ziehungsweise während der Cache des Flash­
Speichers ausgeschaltet ist. Das PRAM kann
auch nicht für OMA-Zugriffe (Direct Memory
_Access) verwendet werden und es gibt einige
Situationen, in denen das PRAM deutlich lang­
samer ist als das SRAM. Trotzdem kann PRAM
für spezielle Anwendungen genau die richti­
ge Losung sein und mit ein wenig Planung,
SRAM
lassen sich die Restriktionen oft umschiffen.
"------:-') '\...__
__ __,.

PWM
Immer noch nicht genug
RTC
Abgesehen vom eFuse haben die bisher vor­
Touch sensor
gestellten Speicher allesamt gemeinsam, dass
ULP Recovery
DAC PMU sie nicht persistent sind. Das heißt, sie über­
co-processor
dauern selbst eine kurzzeitige Unterbrechung
ADC der Stromzufuhr nicht. Darüber hinaus wären
sie für so manche Anwendung auch immer
noch zu klein. Abhilfe schafft hier nur ein
Auf dem ESP-SOC finden sich erstaunlich viele nützliche Funktionen. Flash-Speicher.

12 I Make: ESP32 special 2019


Während Flash zum Beispiel auf allen Ar­ eingeschaltet werden und mit GPIO und 12C
duinos obligatorisch ist, ist es auf dem ESP32 arbeiten. Je nach Konfiguration und Last
Ox6000 Ox9000.
-·-·-·-·-

optional. Für industrielle Anwendungen kann 'liegt der Stromverbrauch zwischen 1011A
das durchaus Sinn stiften, �ber typische Heim­ Ox1000 -·-axt:ooö und 150!-IA.
·

Anwendungen kommen ohne dauerhaften


-·-·-·-·-
Ox10000 Hibernation: Jetzt ist wirklich nur noch
Speicher kaum aus. Daher haben die meisten 1M die RTC wach und begnügt sich mit S11A.
Entwickler-Boards mindestens 2MB oder 4MB Der Strombedarf bei voller Last wirkt zu­
Flash-Speicher. nächst erschreckend hoch, insbesondere für
-·-·-·-· ..
Ox180000
Der zusätzliche Speicher muss an den mobile Anwendungen, die durch eine Batte­
ESP32 angeschlossen werden. Das geschieht 1M rie oder eine USB-Powerbank angetrieben
via SPI (Serial Peripherallnterface) und abhän­ werden sollen. Die Entwickler des ESP32 hat­
gig vom verwendeten Flash-Baustein w�rden ten den Strombedarf aber immer im Hinter­
dazu entweder vier oder sechs Pins benötigt. kopf und so ist es mit sorgfältiger Planung
Selbstverständlich kann die verwendete SPI­ Der SPI-Speicher ist partitioniert, Hutzer­ und Programmierung möglich, den Energie­
Schnittstelle dann nicht mehr anderweitig be­ Programme residieren in "factory". hunger drastisch zu reduzieren.
nutzt werden, aber der Hersteller empfiehlt
ohnehin, sie nicht für andere Zwecke einzu­ Rein und raus
setzen. schon nach kurzer Zeit schlapp machen
Als Konsequenz ergibt sich, dass Flash­ würde. CPU und Speicher eines Mikrocontrollers
Speicher auf unterschiedlichen ESP32-Boards Wie so oft im Leben, lautet die Antwort sind wichtig, aber mindestens genauso wich­
unterschiedliche Charakteristi_ ken aufweisen nach dem Energiebedarf des ESP32: Es tig sind die Schnittstellen zur Außenwelt,
kann. Der Speicher variiert nicht nur in der kommt darauf an. Im regulären Betrieb und hier gibt es beim ESP32 so einiges zu
Größe, sondern auch bezüglich der Geschwin­ verbraucht der Chip zwischen 20mA und entdecken.
digkeit beim Lesen, Schreiben und beim 260mA. Das ist eine breite Spanne und der Insgesamt hat der ESP32 48 Pins und den
Upload. tatsächliche Bedarf hängt maßgeblich davon Großteil können Entwickler in ihren eigenen
Diese Flexibilität ist im professionellen Um­ ab, was der ESP32 so anstellt und welche sei­ Kreationen verwenden. 34 Pins sind GPIO­
feld Gold wert und auch Hobbyisten profitie­ ner. eingebauten Komponenten er benutzt. Pins und können fast völlig frei als Ein- bezie"
ren von einer großen Anzahl von Entwickler-_ Beispielsweise ist der Einsatz von WLAN und hungsweise Ausgabe-Pins dienen. Als digita­
Boards mit unterschiedlichen Leistungsmerk­ Bluetooth vergleichsweise ressourcenintensiv le Pins können sie alle fungieren, aber es gibt
malen zu unterschiedlichen Preisen. Auf der und führt zu einem hohen Stromverbrauch. auch Pins mit speziellen Eigenschaften. Zum
anderen Seite wird an solchen Stellen deut­ Die meisten Anwendungen werdenaber Beispiel gibt es analoge Pins und solche, die
lich, dass der ESP32 nicht in erster Linie für nicht permanent alle Funktionen nutzen als kapazitive Sensoren (Touch) dienen. Fast
Einsteiger konzipiert wurde. Wer mit dem müssen und zum Beispiel die Funk-Funktio­ alle GPIO-Pins verfügen darüber hinaus über
ESP32 hantiert, muss sich jederzeit darüber im nen nur bei bestimmten Ereignissen benöti­ interne Pullup- und Pulldown-Widerstände.
Kla'ren sein, wie genau das gerade eingesetzte gen. Daher verfügt die CPU über verschiede­ Bei allen Freiheitsgraden gibt es jedoch
Board funktioniert. ne Betriebsmodi, mit denen sich signifikant auch ein paar Einschränkungen und so sind
Die Komplexität liegt nicht nur in der hete­ Strom sparen lässt: beispielsweise die sechs GPIO-Pins 34 bis 39
rogenen Hardware begründet, sondern oft Active Mode: ln diesem Modus sind alle eigentlich nur GPI-Pins, das heißt, sie sind
auch in ihrer Leistungsfähigkeit. Beispielswei­ Einheiten des Chips, inklusive WLAN und reine Eingabe-Pins und können keine Aus­
se ist der Flash-Speicher vieler Boards so groß, Bluetooth, aktiviert. Je nach Funkverhalten, gangssignale erzeugen. Das Sechserpack der
dass er nicht nur eine einzelne Anwendung also ob das Gerät mehr sendet oder mehr GPIO-Pins 6 bis 11 kann in der Regel gar
und ihre Daten beherbergen kann. Daher empfängt, liegt der typische Verbrauch zwi­ nicht verwendet werden, weil es auf den
kann er entsprechend partitioniert werden, schen 95mA und 240mA. meisten Boards mit dem Flash-Speicher ver­
um die verschiedenen Programme samt Modem Sleep Mode: ln diesem Zustand bunden ist.
Daten sauber voneinander zu trennen. sind WLAN und Bluetooth deaktiviert, aber Ferner sind, wie bei den meisten Mikro­
die CPU arbeitet potenziell mit voller Kraft. controllern, fast alle Pins mehrfach belegt

Stromversorgung Abhängig von der Anzahl der Kerne und und können unterschiedliche Funktionen er­
ihrer Taktfrequenz schwankt der Stromver­ füllen. Genau genommen ist die Situation
Die Betriebsspannung des ESP32 liegt zwi­ brauch zwischen.20mA und 68mA. Je nach­ sogar noch etwas komplizierter, denn der
schen ·2,3V und 3,6V und angeschlossene dem, welche Peripheriegeräte aktiv sind und ESP32 beherrscht das PIO-Multiplexing. Das
Elektronik muss mit 3,3V operieren. Das ist wie hoch die Prozessorlast ist, passt der bedeutet, dass viele der Funktionen, die der
genauso wie beim Raspberry Pi, aber ganz ESP32 die Taktfrequenz automatisch an. Chip anbietet, auf beinahe beliebige Pins ge­
anders als bei den meisten Arduino-Boards, Light Sleep Mode: Jetzt ist die CPU ausge­ legt werden können. Bevor der ESP32 eine
denn die laufen fast ausschließlich mit SV. Es schaltet. Zumindest gilt das für die Haupt­ Funktion ausführt, sieht er in einer Tabelle
ist also Vorsicht geboten, wenn man Schal­ CPU. Der ESP32 hat nämlich einen ULP-Copro­ nach, welcher Pin gerade dafür zuständig ist.
tungen kopiert, die ursprünglich für einen zessqr (Ultra LowPower), der auch dann noch Es gibt für viele Funktionen voreingestellte
Arduino gedacht waren! mit GPIO und 12C arbeiten kann, wenn der r Pins, aberdarauf sollte man sich bei der Ana­
Angesichts der Funktionen, die der ESP32 große Bruder schläft. Neben dem ULP arbeitet lyse von Projekten nicht verlassen.
·
bietet, dürften sich viele Maker fragen, was in diesem Zustand noch die Echtzeituhr(RTC) Eine weitere Spezialität, die den ESP32
der Winzling denn so verbraucht. Schließlich und externe lnterrupts sind ebenfalls möglich. von der Konkurrenz abhebt, ist die einge­
ist das Gerät für mobile Anwendungen gera­ Der Stromverbrauch liegt bei geringen 0,8mA.� baute Unterstützung für Berührungssenso­
dezu prädestiniert und es wäre doch ein Deep Sleep Mode: Per Voreinstellung ist ren (Touch-Sensoren). Er nennt gleich zehn
Jammer, wenn ein angeschlossener Akku jetzt nur noch die RTC aktiviert. DerULP kann kapazitive Eingänge sein Eigen und damit

Make: ESP32 special2019l 13


HARDWARE I�------------
EN • • • GPI023 VSPI MOSI Das diesem Heft beigelegte
MriiMCIQI•I•M M·Utili:I•M M§Ql•@M • • GPI022. 12C SCL Board hat nur 30 Anschlüsse.
ESP32-
M;i@iQieliMI JM·UiiUIM M§Qi•i§M • • .GPIOl. UARTO TX Die wichtigsten Funktionen
WROOM-32
Mäii§Qle§M M·UliiiiiM M§Qi•@GM • • GPI03. UARTO RX sind aber alle verfügbar.
M;iii§QlelfW M·UfiiiltM MijQi•@�W • • GPI021tli 12C SDA
Mäii§QieijM MielliiiijM M·Ufiiii§M • • GP1019II VSPI MISO
M:t@iQ!el:M MI•liliif:M M·!tliiii�W M§Qiegg+M • • , GPI018·
· · VSPI CLK
M;IM§Qia!M .t.!i M·!•Iiiiif:M MdQiaffW • • ·GPIOS- VSPI CSO
W:lladuter& ,z.p . M;itlililijM Md4i•PJW • • M§@lelfM Mlt.!äfiEM
M:IIMCIQielfM MleillilfM M·UiililfM M§QieP.iM • •
M§QteJIW Mit.jäfjM
1mB Ml�iQGIM MI•iilii!M M·Ulili:IM M§ijieliM • •
W9Qi•$M M·UiiliileM MI•liltiileM MijiiijQieiUM
EDII MI�iQIMWieM Mielilii�W M·Uiißi�M M§QielfM • •
W4QieFW M·)tlili:tM MiellliltM M;IIMCiQI•ifW
lmiDI MI�iQIM•tiM MI•li[ii$M M·Uiili:§M M§Qi•liM • •
M§QieiiOW M·Uiilii@M Mieii@IM Ml�iQI41•M IIi@ii]
i§l • •
,,,.
JJI§ • •
,,
• •

lassen sich neben vielen nützlichen Anwen­ wendet werden. Generell werden sie vom sich unter anderem Motoren steuern lassen.
dungen auch schnell ein paar Spaß-Projekte WLAN-Treiber benötigt und sind blockiert, Dank des Multiplexings funktioniert die
umsetzen, etwa ein Synthesizer mit Obst wenn der Treiber läuh.Darüber hinaus wur­ PWM auf jedem GPIO-Pin, der ein Ausgangs­
oder Knete als Eingabeelemente. den ihnen auf verschiedenen Entwickler­ signal erzeugen kann.
Boards andere Funktionen zugewiesen und Eine weitere Besonderheit ist der LED­
Digital ist besser? so ist es ratsam, sich zuvor über die konkrete PWM-Controller. Mit ihm lässt sich die Inten­
Pin-Belegung zu informieren. sität von LEDs auf sechzehn Kanälen auf viel­
Bei all diesen fast extravaganten Fähigkeiten Leider klingen die Leistungsmerkmale der fältige Weise steuern. Bei Bedarf erzeugen
darf man das Brot- und Buttergeschäft eines Analog-/Digital-Wandler auf dem Papier bes­ die sechzehn Kanäle unterschiedliche
Mikrocontrollers nicht aus den Augen verlie­ ser, als sie in Wirklichkeit sind. in den Ent­ Schwingungsformen, um RGB-LEDs zu kon­
ren und auch bei der Verarbeitung analoger wickler-Foren gibt es ellenlange Diskussio­ trollieren.
und digitaler Signale Weiß der ESP32 zu nen über die Qualität der gemessenen Daten Neben diversen Timern, die für hohe Fle­
punkten. und es scheint auf dem ESP32 diesbezüglich xibilität bei der Erzeugung schicker Muster
Der ESP32 verfügt über einen Digital-/ tatsächlich ein Problem zu geben. Die vom sorgen, helfen Funktionen zum Ein-, Aus­
Analog-Wandler (DAC), der auf zwei 8 Bit-Ka­ ADC erzeugten Werte sind nicht-linear und und Überblenden von LEDs bei der kreativen
nälen digitale Signale in analoge Ausgangs­ unterliegen einem mehr oder weniger star­ Beleuchtung. Solche Spielereien belasten die
spannungen umwandeln kann. Für den um­ ken Rauschen. Bisher scheint niemand eine CPU übrigens nicht und natürlich muss der
gekehrten Weg bilden 12-Bit SAR ADCs (Suc­ befriedigende Lösung für dieses Problem ge­ LED-PWM-Controller nicht unbedingt LEDs
cessive Approximation Register Analog-ta­ funden zu haben. ansteuern, sondern kann auch für andere
Digital Converters) analoge Signale auf bis zu Übrigens war für den ESP32 ursprünglich Zwecke eingesetzt werden.
18 Kanälen auf digitale Werte ab. Hierbei ein Low-Noise Amplifier (LNA) angekündigt.
gibt es einiges zu beachten. Er scheint es aber nicht ins finale Produkt ge­ Schnittstellen satt
Die 18 analogen Kanäle zerfallen in zwei schafft zu haben; denn seine Beschreibung
Klassen namens ADC1 und ADC2. ÄDC1 ent­ wurde in Version 2.1 des Datenblatts entfernt. Große Auswahl bietet der ESP32 bei den
hält die acht Kanäle, die mit den GPIO-Pins Schnittstellen zur Außenwelt, insbesondere
32 bis 39 verbunden sind. Diese Pins unter­ Mustererzeugung bei den seriellen. Gleich drei UART-Einheiten
liegen keinerlei Einschränkungen. Die zehn (Universal Asynchronaus Receiver/Transmit­
Pins der zweiten Gruppe (GPIO 0, 2, 4, 12-15 Wenig überraschend unterstützt der ESP32 ter) namens UARTO, UART1 und UART2
und 25-27) können nicht unbedingt frei ver- die Pulsweiten-Modulation (PWM), mit der bringt er mit. Sie unterstützen neben RS232
und RS485 auch lrDA und kommunizieren
mit einer Geschwindigkeit von bis zu
5 Mbit/s. Alle drei UART-Schnittstellen kön­
nen von der CPU und per DMA (Direct Me­

DIRECT MEMORY ACCESS mory Access) mit Daten versorgt und ausgec
lesen werden. Das ist eine feine Sache für An­
wendungen, die umfangreiche Daten über
Bei den beispielsweise im Arduino verwendeten ATmega-Mikrocontrollern ist die CPU al� die serielle Schnittstelle transportieren wollen,
Iein für das Lesen und Schreiben von Speicherbereichen zuständig. Will man etwa Daten denn OMA-Zugriffe erfolgen parallel zur Ar­
seriell per UART oder SPI senden, muss immer wieder die CPU bemüht werden, um beit der CPU.
neue Daten in die Sende-Register zu schreiben. Beim Direct Memory Acccess (DMA) hilft Dank Multiplexing kann beinahe jeder Pin
ein spezieller Controller der Peripherie, indem er die zu sendenden Daten ohne Umweg zu jedem Zeitpunkt die serielle Kommunika­
über die CP,U an die Schnittstelle übergibt. Damit kann die CPU ungestört andere Arbei­ tion übernehmen. Nur UARTO ist etwas be­
ten übernehmen. Einzige Hürde bei DMA ist die Zugriffsteuerung auf den Speicher, sonders, denn diese Schnittstelle wird vom
auch Arbitrierung genannt, damit sich CPU und Controller nicht ins Gehege kommen .'-- Bootloader im ROM zur Programmierung des
ESP32 verwendet. Sie lässt sich allerdings im

141 Make: ESP32 special2019


laufenden Betrieb - nach dem Bootvorgang sofort mit seiner ei'genen Multi-Fernbedie­ Modelle mit noch mehr) und kommt dabei
-neu konfigurieren. nung loslegen kann. Zum einen fehlen den auf Übertragungsgeschwindigkeiten von
Der ESP32 unterstützt noch mehr serielle meisten Entwickler-Boards eine lnfrarot-LED bis zu 1 SOMBit/s. Das reicht zum Streamen
Protokolle und hat sogar gleich zwei 12C­ beziehungsweise ein Infrarot-Empfänger, von Audiodaten und selbst für Video­
Schnittstellen (lnter-lntegrated Circuit). Beide und zum anderen ist dieses Feature des Streams ist das für manche Projekte genug.
können an einem 12C-Bus sowohl als Slave als ESP32 zurzeit nur spärlich dokumentiert. Verschlüsselte Verbindungen per WPA/WPA2
auch als Master agieren. Sie kommen mit der Trotzdem kann das Feature eine große und WAPI (WLAN Authentication and Pri­
Standard-Geschwindigkeit (1 00 KBit/s) und Hilfe in Projekten sein, die mittels Infrarot vacy lnfrastructure) bereiten dem Mini-Fun­
mit dem Fast-Mode (400 KBit/s) zurecht. kontrolliert werden. Potenziell lässt sich ker keine Probleme.
Noch besser sieht es auf den ersten Blick · diese Eigenschaft für gänzlich andere Zwe­ Genauso gut sieht die Lage beim Thema
bei den SPI-Schnittstellen (Serial Peripheral cke, zum Beispiel zur Erzeugung interessan­ Bluetooth aus, denn hier unterstützt der
Interface) aus, denn davon ha.t der E)P32 ter Signale abseits von Infrarot-Licht, miss­ ESP32 moderne Standards wie Bluetooth
sogar drei. Eine davon ist aber so gut wie brauchen. Es ist zu erwarten, dass die Doku­
immer belegt, denn sie wird benötigt, um mentation in Zukunft deutlich besser wird
den ESP32 mit einem Flash-Baustein zu ver­ und mehr Projekte von den IR-Eigenschaften Beispiele fü r ESP32 Dev Module
binden. Trotzdem bleiben dann noch zwei Gebrauch machen.
ArduinoOTA >
SPI-Schnittstellen übrig, über die sich eine Tief im lnnern des ESP32 existiert ein Tem­
Menge Sensoren und andere Bauteile an­ peratur-Sensor. Der ist leider nicht sonderlich BluetootKSerial >
schließen lassen. Wie die 12C-Schnittstellen genau und liegt in einem Bereich des Chips,
DNSServer >
können auch die SPI-Schnittstellen per DMA in dem er bei hoher Last die Abwärme seiner
versorgt werden. Kollegen mitbekommt und auch misst. Für EEPROM >
12C und SPI sind weit verbreitet und ge­ absolute Messungen taugt er daher ohne >
ESP32
hören zum Standard-Repertoire vieler Mikro­ eine ordentliche Kalibrierung nicht, aber er
controller. Etwas exotischer ist die 12S­ kann unter Umständen verwendet werden, ESP32 Async UDP >
Schnittstelle (lnter-IC Sound). von denen der um Schwankungen in der Umgebungstem­ >
ESP32 Azure loT Arduino
ESP32 gleich zwei hat. 12S wurde speziell für peratur zu erkennen.
ESP32 BLE Arduino >
die Bedürfnisse von Audio-Anwendungen Für den Praxiseinsatz besser geeignet ist
entwickelt und hilft bei der Verbindung digi­ der eingebaute Hall-Sensor. Dieser misst die ESPmDNS >
taler Audio-Geräte, die zum Beispiel PCM­ Stärke und Richtung von Magnetfeldern.
HTIPCiient >
Daten (Pulse-Code Modulation) austauschen Hall-Sensoren haben in der Industrie, in�be­
wollen. Mit diesem Standard ist es ein Leich­ sondere. in der Auto-Industrie, wichtige An­ NetBIOS
tes, Audio-Daten auf einem Lautsprecher wendungen. Zum Beispiel werden sie in
Preferen ces >
auszugeben oder sie über ein günstiges 12S­ Gurtschlössern eingesetzt, um zu erkennen,
Microphone-Breakout einzusammeln. Wie ob das Gurtschloss verriegelt ist. Auch bei SD(esp32) >
bei SPI und 12C kann die Übertragung der der Messung des Tank-Füllstands werden sie
SD_MMC
Daten per DMA erfolgen. verwendet. ln Verbindung mit den Kommu­
nikationssystemen des ESP32 ist der Hall­ SimpleBLE >

Schon viel dabei Sensor eine feine Sache, denn damit lassen >
SPI
sich zum Beispiel leicht kontaktlose Schalter
SPI F FS >
Im Vergleich zu anderen populären Mikro­ bauen, die ein drahtloses Signal senden.
controllern hat der ESP32 eine beeindru­ Listing HaiiSensor.ino zeigt, wie einfach licker >
ckende Zahl von Schnittstellen. SPI und 12C sich der Hall-Sensor auslesen lässt. Lässt man
Update >
sind zwar auf allen Arduino-Boards zu finden, das Programm laufen und bringt einen Mag­
aber die meisten haben jeweils nur eine neten nah an das Board heran, kann man im WebS e rver >
Schnittstelle und Verfahren wie 12S sind dort seriellen Monitor schnell eine deutliche Ver­
WiFi >
meist gar nicht zu finden. Darüber hinaus änderung der Messwerte beobachten. Aller­
spendiert der ESP32 seinen Nutzern noch di­ dings sind die so ermittelten Werte alles an­ WiFiCiientSecure >
verse Sensoren und andere Feinheiten. dere als genau, können aber ohne großen
Zum Beispiel profitieren ESP32-Nutzer Aufwand verbessert werden. Viele Beispiele zeigen in der Arduino-IDE, wie
vom SDIO/SPI-Controller (SD Input/Output), Übrigens gibt es im Menü .,Datei/Beispie­ sich die Bausteine des ESP32 nutzen lassen.
der es ziemlich einfach macht, SO-Karten mit le" der Arduino-IDE einen eigenen-Abschnitt
dem ESP32 zu lesen und zu schreiben. Zwar nur für den ESP32. Es lohnt sich, zumindest
c
lassen sich SO-Karten seit jeher per SPI ein­ mal einen Blick auf alle Beispiele zu werfen,
binden, aber eine separate SOlO-Schnittstel­ um ein Gefühl dafür zu bekommen, was alles c HallSensor.ino
le beschleunigt die ganze Angelegenheit er­ möglich ist.
( 1 void setup() {
heblich und blockiert keine SPI-Schnittstelle.
2 Serial.begin(9600);
Ungewöhnlich ist die Unterstützung des Der Netzwerkar c 3
ESP32 für Infrarot-Signale typischer Fernbe­ 4
c 5 void L·oop() {
dienungen. Der ESP32 hat nämlich einen Die meisten Bastler dürften auf den ESP32
6 int wert = haLLRead�);.
Baustein zur Kodierung und Dekodierung wegen seiner vielfältigen Kommunikations­ ( 7 Serial.println(wert);
von modulierten Signalen, wie sie in gängi­ möglichkeiten aufmerksam werden. Pro­ 8 delayC500l;
(
gen lnfrarot-Fermbedienungen verwendet blemlos verbindet sich das Gerät mit WLAN­ 9

werden. Das bedeutet aber nicht, dass man Netzen.der Versionen 802.11b/g/n (manche _] ________________· ---·-·-·-

Make: ESP32 special2019l 15


HARDWA R E ��--- ----

0 RSA (di e Abkürzu ng steht fü r d i e Namen der

o
Erfinder Rivest, Shamir u n d Adleman), i m mer.
RandomNumbe rs . i no wichtiger. RSA w i rd nicht nur bei der Ver­

0
s c h l ü s s e l u n g , sondern oft a u c h bei der Be­
() �
·
1 voi d setupO { ;
rech n u ng d i g italer Signaturen verwendet.
} S e r i a l . be g i n ( 1 1 5 2 00 l ;
Der ESP32 bietet zwa r keine d irekte U nter­
' 4 stütz u n g fü r den RSA-Aigorith m u s, aber fü r
() 5 voi d l oop ( ) { .
6 Seri � l : pri n t l n ( "***" l ;
d i e zugrunde liegende Mathemati k. Die ba­
7 S e r i a l . p r i n t l n ( e s p_ r a n d o m ( l ) ; siert auf mod u l a rer Arithmetik mit sehr g ro­

0
8 S e r i a l . pr i n t l � ( r a n d o m ( 1 0 l l ; ßen ganzen Za hlen u n d d a bei m ü ssen d iese
9 S er i al . p r i n t l n ( r a n dom ( 1 0 , 20 > > ;
1 Zahlen u nter a nderem m u ltipl iziert werden.
i'"' 1 0 } d e l a y C 1 000 l ;
'· ' 11 Der ESP32 u nterstützt d i e M u l ti p l i kation von
Za h l e n m it einer Länge von bis zu 20'48 Bits
und erlau bt die mod u l a re Potenzieru ng von
Zah l e n mit einer Lä nge von bis zu 4096 Bits.
4.2 u n d B l u etooth Low E n e rgy (BLE). Band­ Steueru n g m it i h rem S m a rtphone ü berneh­ Auf d ieser Basis l ässt sich der RSA-Aigorith­
breite u n d Geschwi n d i g keit rei c h e n fü r men u n d a u shebe l n . mus mit a u s reichend g roßen Schl üssel längen
Audio-Strea m s u n d nach der rei n e n F a kten­ Versc h l ü ssel u n g i s t heutzutag e b e i jedwe­ i m plementieren u n d eine solche I m plemen­
lage sol lte die A n ste u e r u n g von A u d io­ der öffentl ichen Kom m u n i kation e i n M u s s tieru n g gehört auch zur Standard-Bi bliothek.
Headsets oder d i e Rea l i s i e r u n g eines B l ue­ u n d das sol lte m a n a u c h bei H o b by-Projek­ i n der Absicheru ng von Kom m u n i kations­
tooth-Lautsprechers fu n kt i o n ieren. Es · g i bt ten im H i nterkopf haben. Sta rke kryptog rac systemen s p i e l e n n i c ht nur Versch l ü sse­
e i n paa r v i e l versprec h e n d e P rojekte i m fische Algorithmen ste l l e n aber sel bst fü r l u ngsa lgorith men eine wichtige Rolle, denn
Netz, a ber d i e F i rmwa re scheint noch nicht e i n e verg leich sweise l e i stu n g s sta rke C P U , sel bst ü ber einen versch l ü sselten Ka n a l kön­
h u n dertprozentig a usgereift zu s e i n . A l ler­ w i e sie auf dem E S P 3 2 i h ren Dienst verrich­ nem kom p rom ittierte Doku mente und Infor­
d i n g s gab es hier i n l etzter Zeit g roße Fort­ tet, eine g roße Hera u sforderung d a r. Da ist mationen ü bertragen werde n . Um die l nte­
sch ritte. es u mso erfreulicher, dass der ESP32 ein paa r g riÜit u n d Authentizität von I nformationen
Bei a l l den d ra ht l o s e n F u n k-Tech no l o­ n ützl iche Helfer an Bord hat, die i h m die stu­ zu g ewä hrleisten, kom m e n kryptag rafische
g ien ka n n m a n d e n Ethernet Media Access pide Rec h nerei abnehmen. Hash-F u n ktionen z u m Einsatz. Sie helfen bei
1
Contro l l er (MAC) auf dem ESP32 schon m a l Bei der sym m etrischen Versc h l üssel u n g der Berec h n u n g von sicheren Prüfs u m m e n
sch n e l l ü berse h e n . Tatsäc h l i c h ka n n s i c h g reift i h m beispielsweise e i n AES-Besch l e u ­ u n d b e i der Erste l l u n g d i g italer Sig naturen.
der C h i p darü ber mit e i n e m ka belgebunde­ n iger u nter d i e A r m e . Der Adva nced Encryp­ Es g i bt e i n ige solcher H a s h -F u n ktionen,
n e n LAN verb i n d e n . S c h l i e ß l i c h h a t der tion Sta ndard (AES) gehört zu den wichtigs­ a be r d i e derzeit wichtigsten sta m men aus
ESP32 noch einen Contro l l e r fü r d e n CAN­ ten sym m etrischen Versc h l üssel u n g sa l g o­ der S H A-Fa m i l i e (Secu re Hash Algorith m).
B u s (Contro l l e r Area N etwork), d e r in der rith m e n u n d d e r ESP32 kom m t m i t S c h l üs­ I n s besondere g elten heute S H A-256, S H A-
Auto-I n d u strie weit verbreitet i st. seln der Lä nge 1 28, 1 92 u n d 256 Bit klar. 384 u n d S H A-5 1 2 noch a l s sicher u n d kom­
N icht wen i g e N utzer d ü rften sich fü r Sym m etrische Versc h l ü ssel u n g sa lgorith­ men i n vielen Kontexten zum E i nsatz. F ü r a l l e
einen ESP32 entscheiden, wei l er mit WLAN men h a ben e in e ga nze Menge Vorteile. Sie d rei bietet der ESP32 e i n e H a rdwa re-Be­
und B l u etooth zwei wichtige Technologien s i n d schnell, einfach zu i m plementieren, ein­ schleu n i g u n g . Das gilt a u c h fü r den Algorith­
zur d rahtlosen Kom m u n i kation zu e i n e m fach zu versteh e n u n d ziemlich sicher. I h r mus S H A- 1 , der n icht mehr als sicher gilt u n d
g ü nstigen P r e i s a n bietet. F ü r viele Anwen­ g rößtes Problem i st d i e Vertei l u n g d er verm utlich n u r a u s Gründen der Kom patibi­
dungsfelder, wie zum Beispiel bei der Heim­ Sch l üssel, d e n n zwei Partner, d i e i m Gehei­ l ität a n g e boten wird .
a utomatisierung, ist das Gold wert. m e n m itei n a n d e r kom m u n izieren wol len,
m ü ssen densel ben Sch l ü ssel besitzen . Dieser Würfeleien
Gehei m n i skrämerei dient sowo h l zum Versc h l üssel n als a u c h
zum Entsc h l ü sseln e i n e r Nach richt. W i e kön­ Viele La ien ü berrascht zunächst, dass d e r Zu­
Bei der ganzen F u n kerei darf m a n heutzuta­ nen sich jedoch beide Partner auf e i n e n fa l l i n der Kryptog rafie eine g roße Rolle spielt.
ge das Thema Sicherheit nicht a u s den · Schl üssel e i n i g e n , o h n e d a s s er v o n Dritten G ute Zufa l l sza h len bilden a ber d i e Basis fü r
Augen verlieren. Das woh l ige Gefü h l des Er­ a bgehört wird ? d i e Sicherheit vieler Verfa h ren. Auf determi­
finderstolzes ist schnell verflogen, wen n ner­ U m d i eses Problem zu lösen, werden bei n i stischen Masc h i n e n ist es sehr schwer bis
dige Nachbarski nder oder gar kri m inelle Ge­ d e r s i ch eren Kom m u n i kation h eute d a h e r
· u n mö g l ich, wirkl ich zufä l l i g e Za h l e n zu �r­
sellen die eigens entwickelte G a ragentor- asym m etrische Verfa h ren, w i e z u m Beispiel zeu g e n . Das ist auf dem ESP32. prinzipiel l
nicht anders, a ber i m Gegensatz z u vielen an­
deren Rechnern verfügt er ü ber echte Entro­
pie-Quellen, a lso ü ber E i n g a ngssigna le, d i e
ROM Flash . tatsächlich zufä l l i g erzeugt werden.
(vertra uenswü rd i g) · Diese Quellen echten Zufa l l s sind das Rau­
schen i n den WLAN- und B l u etooth-Date n .
BootROM Software Wie bei a l len F u n km e d i e n fa l le n h ier jede
Anwend u n g
und eFUSE Bootloader Menge zufällig e Stö rgerä u s c h e a n und die
s a m m elt der ESP32 konti n u ierlich i n e i n e m
Register, so d a s s das System u n entwegt mit
neuen Zufa l lsza h l en versorgt wird. Sowo h l
Secure Boot sorgt für sichere Projekte. d i e Geschwi n d i g keit, m i t der n e u e Zufa l l s-

16 I Make: ESP32 special 201 9


za hlen erzeugt werden, a l s auch die Q u a l ität c h a n i s m u s spendiert. Der ste l l t sicher, dass H a rdwa re prod uzieren w i l l , kommt um ein
der Zufa l lsza h len ist ersta u n l ich hoch. weder der Bootload er noch der Code der An­ i ntensives Stu d i u m der Doku mentation nicht
Listi ng Ra n d om N u m bers . i n o zeigt, wie wend u ng i m Flash manipul iert wurden. heru m .
d i e Zufa l l sza h l e n a u sgelesen werd e n kön­ Die Sicherheit des System s basiert darauf, Secu re Boot fu n ktio n i e rt ü brigens o h n e
nen. Die F u n ktion e s p_ r a n d o m O g i bt e i n e dass der eFuse-Speicher des ESP32 so konfi­ versch l üsselten F l ash-Speicher u n d u mge­
Zufa l lsza h l zwischen 0 u n d 4.294.967.295 z u ­ g u riert werden ka n n, dass ein Auslesen und keh rt, a ber es ist e m pfeh l e n swert. beides zu
rück. S o l c h g roße Werte sind eher u n ha n d ­ . Beschreiben per Softwa re u n möglich wird . a ktivieren.
lich und d i e F u n ktion r a n d o m C l stutzt sie auf W e i l a u c h d a s R O M n icht verä ndert werden
·
einen vorgegebenen Wertebereich zu recht. ka n n, gelten alle Schl üssel, die i m eFuse ge­ Fazit
Ü berg i bt man der F u n ktion nur einen Wert, speichert werden und der Boot-Code i m ROM
so l iefert sie Zufa l l sza h l e n zwischen 0 u n d als vertra u enswürd ig. Der ESP32 i s t ein kom plexes, a ber attraktives
d e m ü bergebenen Wert m i n u s 1 . D a s hei ßt, Der Mecha n i s m u s z u r Ü berprüfu ng der Biest. Gemessen an dem, was dieser kleine
r a n d o m c 1 0 l g i bt W e rte zwischen 0 u n d 9 zu­ Anwend u ng u n d des Bootloaders a rbeitet in Chip so bietet, wi rken der Ard u i n o Uno und
rück. Analog g i bt r a n d o m C 1 0 , 2 0 ) Zufa l ls­ zwei Sch ritten u n d das Boot-ROM prüft zu­ auch der ESP8266 geradezu winzig. Die Firma
za hlen i m Bereich von 1 0 bis 1 9 zurück. erst d i e I n teg rität des Softwa re-Bootloaders. Espressif hat die Limits des ESP8266 ganz klar
Wen n WLAN u n d B l u etooth a bgescha ltet We n n d iese P rüfu n g erfo l g reich wa r, steht identifiziert und i n fast a l len P u n kten ausge­
sind, ist es mit der zufä l l igen Pracht natü rlich fest, dass der Softwa re-Bootloader nicht ma­ merzt. Ledigl ich bei der Qual ität der Software
sofort vorbei. l n d i esem Fa l l l i efert der ESP32 n i p u l iert wurde u n d das Boot-ROM fü h rt i h n und bei der Doku mentation g i bt es noch ein
n u r noch Pseudozufa l l sza h len u n d d i e s o l l ­ a u s . Jetzt prüft d e r Softwa re-Bootloader d i e paar Defizite.
t e n niemals Grund lage fü r ernsthafte krypta­ I n teg rität d e r Anwe n d u n g u n d fü h rt s i e nach Nicht n u r die leistungssta rke CPU, die vie­
g rafische Anwe n d u ngen sei n . Sie s i n d a ber erfo l g reicher Prüfu n g ebenfa l l s aus. len Schn ittstel len und Sensoren, sondern
nicht völ l i g n utzlos u n d können zu m Beispiel Der ga nze Prozess ist kom p l ex, aber n icht auch die a usgefeilten Sicherheitsfu n ktionen
in Spielen verwendet werden. sonderlich ko m p l iziert. I n s besond ere m u ss machen den ESP32 zu einer perfekten Spiel­
man d a ra u f achten, wie die verwen d eten wiese fü r Bastler und g leichzeitig zu einer
Noch sicherer S c h l üssel erzeugt und gespeichert werden. ernstzu nehmenden Plattform fü r kommerziel­
Wer a uf Basis des ESP32 m ö g l i c h st sichere le Prod u kte. -dab
Die bisher vorgestel lten Verfa h ren z u r Ver-
sch l üsselung kom men a l l e auf Anwendu ngs­
ebene zum Tragen. Das ist fü r einige Szena­
rien a ber bereits zu spät, denn d i e Anwen­
dung l iegt ja i n der Regel unverschl üsselt im
Flash-Speicher und ka n n ohne g roßen Auf­
wand inspiziert werden.
Desha l b bietet der ESP32 Sicherheitsfu n k­
tionen an, die auf viel n ied rigerer Ebene g rei­
fen. Beispielsweise ka n n er die I n h a lte des an­
geschlossenen Flash-Speichers verschlüsseln.
Die Verschl üssel u n g erfolgt via AES-256 und
der Mecha nismus ist verg leichsweise ei nfach.
Mittels eines speziellen Kommandos wird der SPI-Schnittstellen 4
Flash-Speicher mit einem neuen I n halt ü ber­ 12C-Schnittstellen
sch rieben und g leichzeitig verschl üsselt. Den 125-Schnittstel len
Sch l ü ssel ka n n .der Anwender vorgeben oder
UART-SchnittStellen
vor dem Sch reibvorgang erzeugen lassen . .
CAN 2.0-Schnittstel len
l n beiden F ä l l e n wird der Sch l ü ssel · i m '

i nternen eFu se-Speicher d e s ESP32 fü r a l l e


Ewig keit gespeichert. Startet man d e n ESP32 ·

und die gespeicherte Anwe n d u ng, so ent­


sch l üsselt das Gerät tra nspa rent a l l e Daten
mithi lfe des ei ngebran nten Schl üssels. An­
greifer, die versuchen, den Flash-Baustein aus­
zu lesen, sehen n u r Date n m ü l l u n d an den
Sch l ü ssel i m eFuse-Speicher kom m e n sie
nicht hera n .
Wer i m Besitz des Sch l ü ssels ist, kan n nicht
nur den I n halt des Flash-Speichers lesen, son­
dern ihn auch mit neuen I n h a lten ü berschrei­
ben. Dieses Verfa h ren ist nicht narrensicher,
bietet aber a u s reichend Sicherheit, u m den
Großteil potenzieller Ang reifer a bzuwehren.
A l l das wa r den Entwicklern bei Espressif
noch i m mer nicht sicher genug und so haben
sie dem ESP32 noch einen Sec u re Boot-Me- I m direkten Vergleich hat der ESP32 gegenüber dem ESP8266 und dem Arduino Uno die Nase vorn.

M a ke: ESP32 special 201 9 l 17


WLA N �-·------------ --
---· --
Flinker
Funkwellenreiter
Ein Kille r-Feature d e s ESP32 ist gewiss
. WLAN, d enn sowo hl bei m Preis als auch bei
der Leistung hängt e r d iesbezü glich d i e
Konkurrenz locke r ab. M i t Leichti gkeit wi rd
e r zum Client o d e r S e rver im h e i m ischen
Netz und ko m mt p roblemlos mit allen
gäng igen Sicherheitsve rfa h ren zurecht.

von Ma i k Schmidt

Alles ;zum Artikel


I im Web unter
... make-magazin.de/xmBv

1 8 1 Make: ESP32 specia l 201 9


W LAN (Wi reless Loca l Area Netwo rk) ist
l ä ngst e i n e Sta nda rd-Tec h n o l o g i e u n d
d i e meisten N utzer versc hwenden ka u m S c a nWLAN . i no
einen Geda n ken a n d i e Kom p l exität d e r Me­ ' ' 1 # i n c l ude <Wi F i . h>
chi m i s m e n , die e i n e sta b i l e u n d s i c h ere
0
2
d ra h t l ose Verbi n d u n g ü berha u pt m ö g l i c h 3 vo i d s e t up ( ) {

machen. Da n ken swerte rweise versteckt d e r 4 S e r i a l . be g i n ( 1 1 5 2 00 ) ;
r:·
. I
5
E S P 3 2 d i e Deta i l s weitestg e h e n d h i nter 6
einer ei nfachen Fassade. Trotzd e m h i lft es ('/ 7 vo i d loop ( ) {

c�
bei der Entwickl u n g von Proj e kten, zu m i n ­ 8 Seri a l . pr i nt l n ( "Suche läuft . " ) ;
9 c o n s t u i n t 8_t n = W i F i . s c a n N e t w o r k s ( ) ;
dest die g r u n d l e g e n d e n P r i n z i p i e n zu ver­
,, 10
stehen. ....... - 11 i f ( n == 0 ) {
,.... 12 S e r i a l . p r i n t l n ( " K e· i n N e t z w e r k g e f u n d e n . " ) ;
13 e lse {
I rgendwer zu sehen? 14 Seri a l . print(n);
�.

15 ' S e r i a l . p r i n t l n ( " N e t z w e r ke i n S i c h t . " ) ;


Bevor m a n sich m i t einem WLAN verbindet, 16 S e r i a l . p r i n t l n < " --------�------------------------+------+-----
_ _ _ .;.. _ _ _ _ _ _ _ " ) ;

� I RSSI I
ist es ratsam, zunächst nach a l l e n Netzwer­
17 Seri a l . pr i nt ln(" SSID
ken in der Umgebung zu suchen. Eine erfolg­
AUTH MO D E ");
reiche Suche ste l l t s i c h e r, dass d i e WLAN­ ,,! 18 S e r i a l . p r i n t l n ( " - - - - - - - - � - - - - -� - - - - - - - - - � - - - - - - - - + - - - - - - + - - � - -
\.__
Hardwa re des ESP32 ordentlich fu n ktioniert - -- - - - - - - - - - " ) ;

Seri a l . p r i n t f ( " %32 . 32s I "


f o r < u i n t 8_t i = 0 ; i < n ; i + + ) {
,
r 19
u n d fü r e i n e n solchen Test benötigt m a n
I ",
20 W i F i . S S I D ( i ) . c- s t r ( ) ) ;
kei nerlei Zugan gsdaten. Sel bstverstä n d l ich r 21 Seri a l . pr i n t f ( "%4d W i F i . RSS I ( i ) ) ;
m u ss dazu m i ndeste n s e i n WLAN i n Reich­ 22 Seri a l . printf( "%1 5s\n",
weite sein. D a n k der W i F i - B i b l iothek ist e i n a u t h M o d e T o T e x t ( W i F i . e n c r y p t i o n T y p e ( i ) ) . c_s t r ( ) ) ;
23 }
Netzwerk-Scan recht ei nfach u n d Listi n g �. 24
ScanWLAN.ino zeigt, wie es geht. 25 Seri a l . println( " " ) ;
Das Prog ra m m sucht nach a l l e n d ra ht­ 0, 26 de l a y ( 5000 > ;
27 }
losen Netzwerken, die es fi n d e n ka n n u n d
.� 28

g i bt s i e d a n n auf der serie l l e n S chn ittstel le 2 9 S t r i n g a u t h M o d e T o T e x t ( � i f i _a u t h_m o d e_t a u t h M o d e ) {
a u s . Dazu b i n det es in der ersten Zei l e d i e \' 30 . swi t c h ( a uthMode ) {
WiFi-Bibl iothek e i n u n d i n itia l i s i e rt i n d e r 31 c a s e W I F I _A U T H_O P E N :
"' 32 r e t u r n " O f f e n" ;
s e t u p-Funktion die serielle Schn ittstelle. 33 c a s e W I F I _A U T H_W E P :
i n der l o o p - F u n ktion l iefert der Aufruf von ("'
w i F i . � c a n N e t w o r k s ( ) d i e Anza h l der gefu n­
34 return "WEP";
35 c a s e W I F I _A U T H_W P A _P S K :
denen Netzwe rke zurück. W u rd e kei n s ge­ \' 36 r e t u r n " WPA PSK" ; .
37 c a s e W I F I _A U T H_W P A 2_P S K :
fu nden, g i bt das Progra m m eine entspre­ r 38 r e t u r n " W P A 2 P S K ";
chende M el d ung a u s u nd versucht es nach 39 . c a s e W I F I _A U T H_W P A_W P A 2_P S K :
('\ 40 r e t u r n " W PA / WPA2 PSK" ;
fü nf Sekunden noch e i n m a l . Andernfa l l s g i bt
41 c a s e W I F I _A U T H_W P A 2_E N T E R P R I S E :
es die Anza h l u n d anschl ießend die wichtigs-. 0 42 r et u r n " W P A 2 E N T E R P R I S E " ;
ten Eigenschaften der gefundenen Netzwer­ 43 c a s e W I F I _A U T H_M A f :
· r 44 r e t u r n "MAX " ;
ke in tabe l l a rischer Form ü ber d i e seri e l l e
45 defaul t :
Schn ittstel l e a u s . (�\ 46 return " Unbekann t " ;
D e n Kopf der Ta belle erzeugen d rei Auf­ 47 }
rufe der F u n ktion s e r i a l . p r i n t l n. Die Aus­ 48
gabe der Netzw e rkeigenschaften ü bern i m mt
eine f o r -Sch leife, d i e d rei Aufrufe der F u n k­
tion S e r i a l . p r i n t f enthält. Hie r m u ss m a n Die erste Anwei s u n g i n nerh a l b der f o r ­ l n d ication), a l so d i e S i g n a l stä rke des Netzes,
etwas g e n a u e r h i n sehen, d e n n p r i n t l n u n d Schleife g i bt d i e S S I D (Service Set ldentifier), a u s . Der RSSI-Wert ist eigentlich relativ u n d
p r i n t f s e h e n sich rec ht ä h n l ich, verha lten a l so den N a m e n des Netzwerks a u s . Den l ie­ h a t kei ne E i n h eit. We n n m a n a ber d i e Ei­
sich a ber sehr u nterschied l ic h . fert die F u n ktion w i F i . ss I D zurück und er­ genschaften des z u g r u n d e l iegenden Gerä­
Wä h rend p r i n t l n e i n e n ü bergebenen wa rtet a l s Arg u ment d e n I ndex des Netzes, tes ke n n t, ka n n man die RSSI i n der Ein heit
Wert u nverä ndert a u s g i bt, ka n n p r i n t f i h n dessen N a m e gewünscht w i rd . Die p r i n t f ­ dBm (Dezi bel M i l l iwatt) a u sdrücken. Genau
vor d e r Ausgabe format.i eren. Beispiel sweise Anwei s u n g fo rmatiert d e n N a m e n rechts­ das tut d i e F u n ktion w i F i . R ss I u n d es g i lt:
ka n n die F u n ktion dafü r sorgen, dass e i n b ü n d i g mit exa kt 3 2 Zeichen. So lang d a rf Je g rößer der Rückga bewert, u m so stärker
Wert i m mer mit e i n e r m i n i malen o d e r einer e i n e S S I D n ä m l ich maxi m a l s e i n . ist das S i g n a l . Bei negativen Za h len ist das
maxi malen. Anza h l a n Zeichen a u sgegeben Wei l w i F i . ss I o ein O bj e kt der Klasse S i g n a l d a h e r u m s o stä rker, je n ä h e r es an
wird. Dazu muss m a n der F u n ktion als erstes S t r i n g z u r ü c k l i efert, w i rd die F u n kt i o n der 0 l iegt.
Arg u ment einen Fo rmat-String ü bergeben. c _ s t r a ufg erufe n . Die ermög l icht d e n Zu­ Z u l etzt erm itte lt das Prog ra m m m itte l s
Der besch rei bt, wie d i e nachfo l g e n d e n g riff a u f d i e inte rne Repräsentation der Zei­ W i F i . e n c r y p t i o n T y p e e i n e weitere wichti­
Werte d a rgeste l l t werd en s o l l e n . Das wi rkt c h e n kette als c o n s t c h a r * , w i e e r von g e E i g e n s c h aft eines jeden WLAN-Netzes,
auf den . ersten B l i c k etwa s kryptisch, w i rd p r i n t f erwa rtet wird. n ä m l ich die verwendete Authentifizierungs­
aber sch n e l l zu einem Helfer, den m a n n icht Die n ä c h ste Anwei s u n g g i bt m i t h i lfe von methode. Vor der A u s g a be wandelt d i e
mehr m issen möchte. Wi F i . R S S I die RSSI (Received Signal Strength H i l fstu n ktion a u t h M o d e T o T e x t den n u m me-

Make: ESP32 special 201 9 1 19


W LAN I�-------------------------------
1$1 COM6 0 X
wird a l l e fü nf Seku nden a ktu a l isiert und ent­
hält a l l e Netzwerke, die auch der heimische
II Senden
PC oder das Smartphone anzeigen.
Suche l äuft .
Zu jeder SSID enthält die Ta bel l e die a ktu­
5 lietzwerl:e in Sicht. •

-----------·-·---·----..,.- - - - - - - -- - - - - +- - - - -+-------------- elle Signaistä rke und die verwendete Authen­


SSID I RSS I l AU!H !!ODE tifizierungsmethode. Dabei ka n n es passieren,
-----·-·---------------------------+-----+--------------
!ITR Gast I -7 2 I liPA2 PSK
dass manche SSIDs meh rfach erscheinen, wei l
NTR I -7 4 I liPA2 PSK s i e zum Beispiel v o n mehre ren Routern bezie­
1 3 37net I -77 I liPA2 PSK
h u n g sweise Repeatern verwendet werden.
1 3 3 7net I -83 1. liPA2 PSK

lie l come I -83 I liPA2 PSK U m die Netzwerke eindeutig voneinander u n­


terscheiden zu kön nen, g i bt es noch die BSS I D
(Base Service Set I D), e i n e 48-Bit-Za hl, die den­
selben Konventionen gehorcht wie· MAC­
0 A!JtDscroll D Zeitst=pel anzegen INeue Zeile Ad ressen (Media Access Control). Diese I nfor­
mation ka n n .bei Bed a rf ebenfa l l s über die
Das erste Programm stellt die drahtlosen Netzwerke in der Umgebung übersichtlich im seriellen WiFi-Bibl iothek ermittelt werden.
Monitor dar.

Ich b i n d ri n !
rischen E n u m e rationstypen i n einen lesba­ sucht u n d n icht versucht, sich m it einem zu
ren Text um. verbinden, sol lte er i n jeder Umgebung, in der Nach d iesem ersten Test, der sicherstel lt,
m i ndestens ein d ra htloses Netzwerk i n Reich­ dass die WLAN- F u n ktionen prinzipiell richtig
Es geht los weite ist, fu n ktionieren. a rbeiten, wi rd es Zeit fü r ein u mfa ng rei­
Schon ku rz nachdem man den seriellen c h e res Beisp i e l . Listi n g M i n iWebServer.ino
Jetzt ist es an der Zeit, das Progra m m endlich Monitor i n der Ard u i no-IDE geöffnet hat, er­ macht den ESP32 zu einem kleinen Web-Ser­
auf das ESP32-Boa rd zu laden und auszupro­ scheint eine Ta belle mit den Eigenschaften ver, der a uf Anfragen eines Web-Browsers
bieren. Wei l der Code n u r nach Netzwerken a l ler gefu ndenen Netzwerke. Diese Ta bel le wa rtet und sie d a n n beantwortet.

D RU CKE N M IT FORMAT
Zwar hat der ESP32 keinen Bildschirm, aber die meisten Projekte Z�ichen, die n icht zu· einem Platzlia lter gehöre n, werden unver­
geben I nformationen ü ber die seriel l e Sch nittstel l e aus. Manch­ ä ndert a u sgegeben.
m a l sind es Meldungen ü ber den a ktuellen Sta nd des Program m s
Jeder Platzha lter beginnt mit einem Prozentzeichen u n d muss
und oft sin d es Messdaten, die i n ei nem festen Format ercscheinen
den Typen des Parameters enthalten. Ein s steht beispielsweise
sollen.
für einen String urid ein'd fü r eine vorzeichen behaftete Ga nzzah L
'
Die Formatierung von Daten ist mit der herkö m m l ichen zei­ Zusätzlich zum Typen kön n e n noch e i n e Mindestlänge, eine
chenketten-F u n ktion oft etwas friemelig. Daher bietet d ie Maxim a l l äng\'!, die Anza h l der Nachkom mastellen u n d Optionen
s e r i a L -Kiasse die p r i n t f - F u n ktion (print formatted) a n , die zu m Au ffj.i l l.e n leerer Ausgabefelder angegeben werden. Damit
es i n d ieser oder ä h n licher Form schon seit m e h r a l s 5 0 Jahren lassen si<!h Werte zum Beispiel l i n ksbündig oder rechtsbündig
g i bt. ausg'eben u n d Zah len können d u rch fü h rende N u l len auf eine
.g leich bleibende Breite gebracht werden.
p r ; n t f gibt eine Liste von Werten aus u n d erwartet neben den
Werten einen Formatstring, der deren Formatierung beschreibt. Eine vollständige Beschreibung a l ler unterstützten Formate
Der Format-String enthält einen Platzhalter für jeden Wert, der würde den Rahmen·sprengen, aber mithi lfe der Dokumentation
beschreibt, wie der Wert vor der Ausgabe zu formatieren ist. Alle ist es ganz einfach.

!
!
!
printf ( "Text : %s , Zahl 11 : % 0 44 , Zahl

Text : Hallo , Zahl 11


l:· 0042 , ·Zahl 12 : 3 . 14 .
·

Formatierte Ausgaben werden mit prinH zum Kinderspiel.

2 Q I Make: ESP32 special 201 9


Das Prog ra m m i st zwa r n icht a l lzu u m ­
fa n g reich, verwendet a ber e i n e ga nze
Menge der WLAN-F u n ktionen, die der ESP32 M i n'i W e b S e r v e r . i ho ,
bietet. Nachdem alle benötigten B i b l i othe­
1 # i n c l ude <Wi F i . h>
ken eingebunden wurden, werden zwei Kon­ 2 # i n c l ude <Wi F i C l i en t . h>
sta nten namens s s r o und P A S S W O R D d efi­ 3 # i n c l ude <We b S e r ve r . h>
niert. Sie entha lten d i e S S I D u n d das Pass­ 4 # i nc lude < E S Pm DN S . h>
5
wort des Netzwerks, mit dem sich der ESP32 6 const ch�r* S S I D = " S S I D e i n t ragen";
verbi nden sol l . Ihr I n halt muss a n d i e lokalen 7 c o n s t c h ci r * P A S S W O R D = " P a s s w o � t e i n t r a g e n " ;
Gegebenheiten des eigenen Netzes a n ge­ 8
(1 9 WebServer serve r ( 8 0 l ;
passt werden.
10
Als Nächstes e rzeu gt d a s Progra m m ein 11 vo i d s e t up ( ) {
g l obales Obj e kt d e r Klasse W e b S e r v e r m it 12 S e r i a l . be g i n ( 1 1 5 2 00 l ;
dem N a m e n s e r v e r . Der Ko n stru kto r d e r 13 W i F i . m o d e ( W I F I _S T A l ;
14 Wi F i . begi n ( SS I D ; PASSWORD l ;
Kla sse e r h ä l t d a s Arg u ment 8 0 , d e n n d a s i s t 15
der Sta n d a rd - P o rt fü r HTIP (HyperText 16 w h i l e ( W i F i . s t a t u s ( ) ! = W L_C O N N E C T E D )
Tra nsfe r P rotocol) u n d a uf d e m s o l l d e r 17 d e l a y ( 5 00 l ;
18 Seri a l . pr i nt < " . " l ;
Web-Server la uschen. HTIP ist das P rotoko l l }
19
des World Wide Web, ü ber dass a l l e B rowser 20 Seri a l . pr i nt ln ( " " l ;
und Web-Server m itei n a n d e r ko m m u n izie­ 21 S e r i a l .pr l n t f ( "V� rbunden m i t %s . \n", S S I D l ;
22 S e r i a l . p r i n t f ( " I P- A d r e s s e : % s . \ n " ,
ren. Die Klasse W e b S e r v e r i m p l ementiert
W i F i . l o c a l i P ( ) . t o S t r i � g ( ) . c_s t r ( ) ) ;
das Protoko l l fü r den ESP32.
() 23
Nachdem d i e s e t u p - F u n ktion d i e seri e l l e 24 i f ( M D N S . b e g i n ( " e� p3 2 " } ) {
25 S e r i a l . p r i nt l n < " MDNS-Respond e r g e s t a r t e t . " ) ;
S c h n ittste l l e i n it i a l i s i e rt h a t , versetzt n
26
w i F i . m o d e d e n E S P 3 2 in d e n Sta t i o n ­ 27
Modus. l n e i n e m W L A N kön n e n d i e Tei l neh­ 28 s e r ve r . �n ( " / " , h a n d l e R o6 t ) ;
mer entweder e i n e Station, e i n Access Point 29
30 s e r ve r . on ( " /ma ke " , [ ] ( ) {
oder beides s e i n . E i n e Station i st jedes
31 s e r �e r . send ( 200, " t ex t / p l a i n " , "Was so l l i c h m a c h e n ? " ) ;
Gerät, das s i c h m i t e i n e m d ra htlosen N etz­ 32 });
werk verbi n d e n ka n n . Typ i s c h e rweise ver­ 33
b i n d et sich e i n e Station mit e i n e m Router, 34 s e r ve r . onNot Found ( ha nd l eNot Found l ;
35
um Z u g a n g z u m I n ternet oder a nderen Ge­ 36 serve r . beg i n ( ) ;
räten i n nerha l b desse l b e n Netzwerks zu be­ 37 S e r i a l . pr i n t l n ( " HTTP-Server gestartet . " ) ;
ko m m e n . Ein Router ist wiederum ein Ac­ 38
cess Poi nt. ·
n 39
40 voi d loop ( ) {
Der ESP32 ka n n i n a l len d rei Modi o pe­ 41 s e r ve r . h a nd l eC l i en t ( ) ;
rieren, das hei �t, e r ka n n sich mit dem hei­ 42
n : 43
mischen Router verb i n d e n , so dass ihn a l l e
44 v o i d h a n d l e R o o t1 ) {
anderen Geräte erreichen kö n n e n . Er ka n n 45 s e rve r . se�d ( 200, " t ext / p l a i n " , " H i e r i s t d e r ESP32 ! " l ;
auch a l s Access Point fu n g ieren u n d so e i n 46
eigenes W L A N a ufs pa n n e n . Auf d iese Weise 47
48 vo i d h a nd l eNot Found ( ) {
kön nen sich a ndere Geräte d i rekt, a l so o h n e 49 S t r i n g m e s s a g e = " P f a d. · ,
d e n U mweg ü b e r e i n e n Router, m i t d e m 50 me•s a g e += s e r ve r . u r i < l ;
() message += " wurde n i c h t gefunden . \n " ;
E S P 3 2 verb i n d e n . S c h l i e ß l ich i s t der E S P 3 2 51
52 s e r v e r . s e n d < 4 0 4 , " t e x t /p l a i n " , m e s s a g e l ; ·
noch i n d e r Lage, g l ei chzeitig a l s Station
53 }
u n d a l s Access Point zu a rbeiten.
Weiter geht es im Code m it der F u n ktio n
W i F i . b e g i n . S i e verb i n det d e n E S P 3 2 mit
e i n e m WLAN und b en ö tig t dazu d i e S S I D
u n d d ä s Passwort. D e r Vorg a n g ka n n d u rch­
a u s e i n paar Seku n d e n dauern. Da h e r prüft ke n nt. S c h ö n e r Wä re es, wen n m a n d e m g e b e n u n d wer m e h rere G e räte betrei bt,
d i e fol g e n d e w h i l e-Schleife alle 500 M i l l i se­ E S P 3 2 e i n e n e i g e n e n N a m e n i m N etz geben sol lte sich e i n vern ü nftiges N a m ensschema
kunden, o b die Verbi n d u ng bereits zu sta n­ kön nte, u nter dem a n d e re Geräte ihn errei­ ü berlegen, u m nicht i rgendwa n n d i e Ü ber­
d e g e ko m m e n ist. Wä h re n d d e r Wa rtezeit c h e n kön n e n . Für d iesen Zweck g i bt es das sicht zu verlieren.
g i bt d a s P rog ra m m i m m e r wieder e i n e n m D N S-P roto ko l l ( M u lticast D o m a i n N a m e
P u n kt a u f der serie l l e n S chn ittste l l e a u s, s o System}, m i t d e m s i c h i n k l e i n e n N etzwer­
d a s s m a n s e h e n ka n n , o b s i c h ü be r h a u pt ken N a m e n o h n e e i n e n l o ka l e n N a m e-Ser­ Wo ist das Web?
etwa s tut. W u rde d i e Verbi n d u n g e rfo l g ­ ver a ufl ösen l a ssen .
r e i c h hergeste l lt, g i bt d a s Prog ra m m d i e G e n a u d a s erledigt d i e M D N s -Kiasse u n d Ab d iesem Zeitpu n kt i s t d e r ESP32 m i t dem
S S I D u n d d i e zugewiesene I P-Adresse a u s . deren b e g i n - F u n ktion m a c h t d e n E S P 3 2 i m WLAN verb u n d e n und u nter dem Namen
Ab d iesem Zeitp u n kt ka n n jeder a n d ere N etz i n diesem Beispiel u nter d e m N a m e n " esp32 " erre i c h ba r. Al l e rd i n g s tut er noch
Tei l nehmer im WLAN m it dem E S P 3 2 kom­ " esp32 " b e ka n nt. Sel bstverstä n d l ic h ka n n n icht das, was m a n von e i n e m Web-Server
m u n izieren, we n n e r dessen I P-Adresse m a n d e m G e rä t e i n e n a n d e ren N a m e n erwa rtet, das hei ßt, er bea ntwortet kei n e

M a ke: ESP32 special 20 1 9 1 21


W LAN �I-------------------------------
@. @.
(@... "'/
__

/
/_
/
/
Station Station
i � u
'---:-g-:-=·.
_
. _
·
--'
- - - - - --- ; ccess Point--------, �·� i
II

GI
c::::::J
- :: 1 �� 1·

·--
- -- -
--- -
-

lfrr. l
-- - -
Station Access Point -
- -- - - - -
- -- -
Station -- -

Station

Der ESP32 funktioniert prima als Station i n einem WLAN. Der ESP32 arbeitet als WLAN-Access-Point.

HTIP-Anfragen. Dieses Ma n ko lässt sich a ber u n d i n ei n e m B rowser d i e URL http://esp32/ d e n Pfa d / m a ke kü m me rt. Der w i rd d a h e r
mit wenige_n Handg riffen beheben. a ufgerufe n w i rd , w i rd d i e F u n kt i o n h a n d l e ­ m i t e i n e r a n onymen F u n ktion defi n iert.
Gleich zu Anfa n g des Progra m m s w u rd e R o o t a ufgerufe n . A n o n y m e F u n kt i o n e n s i n d e i n e relativ
e i n Objekt d e r K l a s s e W e b S e r v e r m i t d e m D i e s e F u n ktion besteht n u r a u s e i n e r e i n ­ neue Erweiter u n g der Progra m m i ersprache
N a m e n s e r v e r defi n ie rt. D ieses Objekt zigen A n we i s u n g , n ä m l ic h d e m A ufruf d e r C++ u n d sie s i n d g e ra d e i n solchen Situatio­
ü bern i m mt d i e gesamte Ko m m u n i kation F u n ktion s e n d , d i e d rei Para m eter erwa rtet. n e n sehr pra kt i s c h . Die Ko n stru kt i o n [ J < l
m i t dem Web-Browser und muss entspre­ Der e rste P a r a m eter ist d e r HTIP-Status­ d efi n iert e i n e n a m e n l ose F u n ktion o h n e Pa­
chend konfi g u riert werd e n . Code, d e r a n d e n Web-Browser g e s e n d et ra m eter und die Defi n ition der F u n ktion er­
Die WebServer-Kiasse fo lgt e i n e m recht wird. D i e 200 steht fü r O K, d a s h e i ßt, d i e fol g t g leich a n s c h l ießend u n d wie gewo h nt
modernen Entw u rf u n d u n terstützt d i e Re­ Vera rbeitu n g d e r A n fra g e v e r l i ef erfo l g ­ i n geschweiften K l a m m e r n . Das s i e h t a u f
g i strieru n g von Event- H a n d l e r n . Das s i n d rei c h . Der zweite P a ra m eter e n t h ä l t d e n den ersten B l i c k w ü s t a u s, d i e n t a ber letzten
F u n ktionen, d i e i m Fa l l e besti m mter Ereig­ Content-Type u n d besc h rei bt, w e l c h e s For­ Endes der Lesba rkeit und befreit Entwickler
n i sse a ufgerufen werd e n und s i e kö n n e n mat d i e A n twort hat. l n d i esem Fa l l i st es von der lästigen Aufga be, sich stä n d i g neue
u nter a n d erem m i t d e r F u n kt i o n o n a n t e x t I p l a i n , a l so enthält d i e Antwort g a nz Namen fü r d i e Event- H a n d l e r a u szuden ke n .
d a s WebServer-Objekt a n ge h ä ngt werd e n . ord i n ä ren Text. Der d ritte P a ra m eter enthält Die bisherigen Event- H a n d l e r h a ben sich
Die Anwei s u n g s e r v e r . o n ( "/'' , h a n d ­ d e n I n halt der Antwort. um die B e h a n d l u n g fest defi n ie rter Pfa d e
l e R o o t ) l ä sst s i c h d a h e r wie fo l g t l e s e n : F ü r Eve nt- H a n d l e r, d i e so k u rz s i n d wie g e kü m m e rt. Wa s a be r p a s s i e rt, we n n e i n
Wen n e i n Web-Browser n a c h d e m Pfa d / " h a n d l e R o o t , lohnt es sich ka u m , eine eige­ C l i ent e i n e n Pfa d a n fragt, fü r d e n kei n
"
fra gt, d a n n rufe d i e F u n ktion h a n d l e R o o t ne F u n ktion zu d efi n ieren. Das g i lt ebenso Event- H a n d l e r festgelegt w u rde? l n d i esem
a uf. Das h e i ßt, we n n d a s Prog ra m m l ä uft fü r d e n zweiten Event- H a n d l e r, der sich um Fa l l ruft die WebServer-Kiasse die F u n ktion
auf, d i e zuvor m ittel s o n N o t F o u n d reg istriert
w u rde. ln d iesem Prog ra m m ist d a s h a n d ­
G coM6 - D X
l e N o t F o u n d . S i e b a u t e i n e entsprec h e n d e
F e h l e r n a c h richt zusa m m e n u n d sendet s i e
. II I
..
I ' Senden
m i t dem Statu s-Code 4 0 4 ( � i l e N ot F o u n d )
. "
a n d e n C l ient zurück .
Verbunden mit 1 3 3 7net .
IP-Adre s s e : 1 92 . 1 6 8 . 1 7 8 . 7 5 . Z u m S c h l u ss ruft d i e s e t u p - Fu n kt i o n
MDNS-Responder gestarte t . s e r v e r . b e g i n a uf u n d der Web-Server war­
HTTP-Server qe starte t .
tet a b d iesem Moment auf neue Anfrag e n
a uf Port 80. D i e tatsä c h l i c h e Bea rbeit u n g
d ieser Anfra g e n übern i m mt h a n d l e c l i e n t
i n der F u n ktion l o o p .
Der ESP32 hat Kontakt mit dem heimischen WLAN-Router.
N a c h d e m d a s P rog ra m m ü be rsetzt u n d
a u fs Boa rd g e l a d e n w u rde, wird e s Zeit fü r
e i n e n ersten Test. I m seri e l l e n Mon itor ka n n
X �- -
D . m a n z u e rst e i n m a l prüfen, o b d i e WLAN­

J CD
Verb i n d u n g eta b l i e rt werd e n konnte. Wen n
http ://esp32 ::k »
··· EJ tr l d a s d e r Fa l l i st, ruft m a n m i t e i n e m beliebi­
g e n Web- B rowser - es d a rf a u c h e i n e r a u f
H i e r i s t der E S P 3 2 ! e i n e m S m a rt p h o n e i m sel ben W L A N sein -
d i e A d resse http://esp32/ a u f. Die fü h rt zu
e i n e r s p a rta n i sc h e n Begrü ß u n g sseite. Auch
Der kleine Web-Server antwortet auf eine Anfrage. d i e Ad resse http://e s p 3 2/m a ke (Achtu n g :

22 1 Make: ESP32 special 20 1 9


� ®
Am E n d e d e r Ad resse ste ht ke i n S c h rä g ­
stri c h ! ) s o l lte e i n s i n nv o l les E rg e b n i s l i efe rn * : � ... 69 % . 20: 1 3

<D esp32/ m a ke
und fü r alle a n d e re n Pfade ze igt d e r E S P 3 2
zu m i ndest e i n e ordent l i c h e Feh l e r m e l d u n g
a n . J e nac h Konfi g u ration des l o ka l e n N etz­
werkes u n d d e s b e n u tzten C l i ents ka n n es Wa s s o l l i c h ma c h e n ?
n otwe n d i g s e i n , d i e Ad resse htt p://e s p 3 2 .
l oca l/ zu verwe n d e n . Sel bstverstä n d l i c h ist
d e r E S P 3 2 a u c h ü be r seine I P-Ad resse er­
re i c h bar. Der ESP32-WebServer liefert Seiten auch an
Mit knapp 50 Zeilen Code wird d e r E S P 3 2 Smartphones.
n i cht n u r zu e i n e m v o l l we rt i g e n M i t g l i ed
eines a b g e s i c h e rten W LA N s, s o n d e r n ver­
ric htet g l e ichzeitig s e i n e n D i e n st als Web­
Server. Das Z u sa m m e n s p i e l d e r g u ten Hard­ in der 5 e t u p - F u n kt i o n mit der b e g i n - F u n k­
wa re und d e r g uten Softwa re mac h e n das ;tti o n i n it ia l i s i e rt. D i e Za h l Ox43 ist d i e 12C­
n i cht n u r m ö g l i c h , s o n d e r n sogar recht e i n ­ Ad resse d e s S e n s o rs und die ka n n je nach Mit einem Breakout-Board lässt sich der
fac h . Prod u kt d u rchaus va riieren. HDC1 008 1eicht mit dem ESP32 verbinden.
Es ko m m t bei Sensoren fü r Luftfeuchtig­
Web-Sensori k keit schon ma l vor, dass s i c h Feuchtig keit in
d e r Nähe des S e n s o rs a b la g e rt. Um d i e zu
P r i n zi p i e l l eig net s i c h d e r E S P 3 2 a l s kla s s i ­ v e rda m pfe n , lassen s i c h ma n c h e S e n s o re n Werte fü r d i e Luftfeuchti g keit teilweise deut­
scher Web-Server, d e r z u m B e i s p i e l HTM L­ aufheizen u n d d a s tut d i e F u n ktion d r y S e n - l ic h von d e r Rea l ität abwe i c h e n .
Seiten und Bilder vertei lt. Das kön n en a n d e re 5 o r . Der Vorga n g dau e rt ci rca 1 5 Seku nden,
Geräte aber besser u n d d i e Beso nderheit des das h e i ßt, das P rog ra m m g i bt d i e S e n s o r­ Kleine Sch ritte
ESP32 l i egt da rin, dass e r n i c h t nur a l s Web­ Daten erst nach d ieser Wa rteze it a u s . Wä h­
Server ta ugt, sondern a u c h e i n M i krocontrol­ rend d e r Entwickl u n g e m pfi e h l t es sich Da n k der A rd u i n o - B i b l i o t h e k i st die Arbeit
l e r m it vielen i nteressanten S c h n ittste l l e n ist. da h e r, d i ese Zei l e a u s z u ko m m e ntieren, so m i t dem Sensor ein Leichtes und es ist eben­
Er ist also gerade prädest i n i ert dazu, Sensor­ dass man nicht nach jedem N e u start 1 5 Se­ fa l l s ke i n g roßes P r o b l e m , die Daten im
Daten per Web-Sc h n ittste l l e zu v e rte i l e n k u n d e n la ng warten m u ss, bis etwas passiert. WLAN zu verte i l e n . Prinzi p i e l l g i n g e das mit
o d e r Geräte ü be r e i n e n Web-B rowser z u Die F u n kt i o n L o o p g i bt d i e S e n s o r- l n fo r­ den schon besc h riebenen Mecha n i s men,
steuern. mati o n e n m itte l s d e r F u n kt i o n e n r e a d T e m ­ a b e r fü r d ieses P roj e kt w i rd d e r ESP32 in
E i n k l e i n es B e i s p i e l p roj e kt macht den p e r a t u r e u n d r e a d H u m i d i t y i m Seku nden­ einen Access P o i n t verwa n d e l t und es
ESP32 zu e i n e m Web-Se nsor und ste l lt a l l e n takt a u s . ko m mt eine neue WebServer- B i b l i othek zum
Geräten i m s e l b e n W L A N d i e a ktu e l l e Tem­ Der H DC 1 0 0 8 w i rd ü b r i g e n s v o m H e rstel ­ E i n satz.
peratu r und d i e relative Luftfeuchtig keit zur l e r n i cht m e h r e m pfo h l e n u n d V e rg l e i c h s ­ Die B i b l i othek h e i ßt ES PAsyncWebServer
Verfü g u n g . Das Proj ekt w i rd sch rittweise auf­ tests m i t a n d e ren Sensoren zeigen, dass d i e (https:// g i t h u b .com/m e-no-dev/ESPAsync-
gebaut, um d i e Ko m p l exität ü berscha u ba r zu
ha lten� Z u e rst w i rd d e r S e n s o r a u sg e l e s e n
u n d da n n werden d e s s e n Daten ü be r e i n e n
Web-Server vertei lt.
A l s ko m b i n i erter Sensor zum Erfassen der
Te m perat u r u nd der Luftfeuchtig keit ko m mt
d e r H D C 1 008 (http://www.ti.com/prod u ct/
h d c 1 008) z u m E i n satz. Der H DC 1 008 ko m ­
m u n iziert per 1 2 C u n d w i rd da h e r m i t v i e r
ESP32-Pi n s verb u n d e n . VCC ko m mt a n d e n
3,3V-Ansc h l u s s des ESP32 u n d G N D natü r l i c h
an G N D. Der SCL-A n s c h l u ss g e h ö rt a n G P IO­
P i n 22" u n d SDA a n G P I O- P i n 2 1 .
Zum A u s l esen des Sensors d ient d i e Ada­
fru it H D C 1 000- B i b l i ot h e k, d i e sich ü be r d e n
B i b l i otheksverwalter d e r Ard u i n o - I D E i n sta l ­
l i e r � n lässt. We i l d e r H DC 1 008 ko m pat i b e l
zu m H D C 1 0 0 0 i st, fu n kt i o n i e rt d i e B i b l i ot h e k
mit b e i d e n Sensoren.
Listing S e n s o rTest . i n o n u tzt den
HDC1 008, u m d i e Te m peratur u n d d i e relati­
ve Luftfe u c h t i g keit zu messen und auf d e r
seriel len S c h n ittste l l e auszugeben. Dazu legt
das P rog ra m m a u f der g l o ba l e n Ebene e i n
Obj e kt d e r Klasse A d a f r u i t _H D C 1 0 0 0 m i t
dem Na men 5 e n 5 o r a n . Dieses Objekt w i rd So wird der ESP32 mit dem HDC1 008 verbunden.

M a ke: ESP32 special 20 1 9 1 23


WLAN 1�-----
('
(' Senso rTes t . i no
G 1 # i n c l u d e " A d a f r"u i t _H D C 1 0 0 0 . h "

(� : · 3 - A d a f r u i t_H D C 1 Ö O O s e n s o r = A d a f r u i t _H D C 1 0 0 0 C l ;
2

4
5 vo i d s e t up ( ) {
6 S e r i a l . be g i n ( 1 1 5 2 00 l ;
7

(' ' �' 10


i f ( fsensor � beg i o < Ox43 ) )
S e r i a l . p � i n t l n l " K o n n t e T e m p e r a t u r s en s o r n i c h t f i n d e n . " ) ;
return;
(
". 1 1 }
12 Seri a l . pr i n t l o ( " Sensor wi rd i n i t i a l i si e rt . " ) ;
("
13 sensor . d rySensor ( ) ; I I Braucht 1 5 Sekunden !
' 14 }
(
15
' 1 6 vo i d L oop ( )
(
17 S e r i a l . p r i n t f ( " Tempe r a tu r : · % . 2 f C \ t " , s e n so r . readTempe r a t u re ( ) ) ;
(' 1 9
18 S e r i a l . p r i n t f ( " Lu f t f eu c � t i g ke i t : . % , 2 f % % \ n " , s e n so r . r e a d H u m i d i t y ( ) ) ;
d e l a y ( 1 000 l ;
(" 20 }

WebServer) u n d tut im Grunde dasselbe wie (https://g ithu b.com/me-no-dev/AsyncTCP) dev/AsyncTC P/a rch ive/ma ster.zi p) heru nter
die bisherige WebServer- B i b l iothek, das benötigt, die ebenfa l l s nicht i m B i b l iotheks­ und entpackt sie. Der Zu satz " -master " sol lte
hei ßt, sie i m p l ementiert das HTIP-P rotoko l l verwa lter a ufta ucht. Heide B i b l i ot h e ke n a u s beiden Date i n a m e n entfernt werd e n .
u n d ermög licht so d i e Kom m u n i kation m i t m ü ssen d a h e r m a n u e l l i n sta l l i e rt werde n . A n s c h l ießend öffnet m a n fü r jede der g e ­
Web-Ciients. ES PAsyncWebServer i st a ber A m ei nfa c h sten e r l e d i g t m a n d i es, i n d e m n a n nten B i b l i ot h e ke n e i n m a l den P u n kt
deutlich leistu ngsstä rker, wei l sie m e h rere m a n d i e B i b l iotheken a l s ZI P-Dateien herun­ " S ketch > B i b liothek einbi nden > ZIP-Bibl io­
Anfragen para l le l beantworten ka n n u n d terlädt und ü b e r d e n M e n ü p u n kt .ZI P-Bi­ thek e i n b i nden " und wä h l t die jeweils u m be­
a u sgeklügelte Mecha n i s m e n zur Vera rbei­ bliothek h i nzufügen " i n der Ard u i no-I D E i m ­ n a n nte Datei a u s .
tung von Dateien hat. portiert. Listi n g WebH D C l 008. i n o i m plementiert
Zurzeit gehört sie noch nicht zum Liefer­ Dazu lädt man die Zip-Arch ive von ESPA­ einen vol lstä n d igen Web-Server, der a uf sei­
u mfa ng der Ard u i no-I D E u n d ist n icht über syncWebServer (https://g ithu b.com/me-no­ nem eigenen WLAN-Access-Point a rbeitet
den B i b l iotheksverwa lter verfü g ba r. H i nzu dev/ESPAsyncWebServer/a rchive/master.zip) u n d a l len andere n Tei l n e h m ern im WLAN die
kommt, d a s s. s i e d i e B i b l i othe k AsyncTCP u n d AsyncTCP (https://g ith u b.com/me-no- Daten eines H DC l 008-Sensors zur Verfü­
g u n g stel lt. Zwa r gewi nnt d i e Aufbereitu ng
der Sensor-Daten kei n e Desig n-Preise, a ber
Voreinstellungen X a n d i eser Stel le geht es erst einmal u m d ie
Einstelunoen Netzwerk rei ne Mach ba rkeit.
Der Code i m portiert a l l e benötigten Bi­

--•JMK�
l�c:�� �--- wW
�oo�
no====================== -------� - 1
b l iotheken u n d defi n i ert dann Kon s.ta nten
� I
__

) ----------------�I (erfordert Neustart vori Arduino)


��
!Deutsch
fü r die S S I D und das WLAN-Passwort. Das
Editor-sprache:
�--� (Gennan
--�
v
sieht zunächst a l les wie gewohnt a us, a ber i n
Editor-Texlgriille : fE:::J d iesem F a l l s i n d es n i c h t d i e S S I D u n d d a s
0 Automatisch I 100 : 1% (erfordert Neustart von Arduino)
I
Oberllächen·Zoomstufe : Passwort eines bestehenden WLANs, son-
Thema: lstandardthema I (erfordert Neustart von Arduino)
v

Ausfih1lche Ausoabe wäiYend: 0 Kompilierung 0 Hochladen

�.Wlii"IU1gell : 1- V I G coM6
0 Zt!ilem..mnern anzeigen I
0 Code-Faltu1g aktivieren Temperatur: 23 . 4 4 c Luftfeuchtigke it : 58 . 90 '
0 Code nach dem Hochladen Oberpo-üfen Temperatur: 23 . 42 c Luftfeuchtiqkej, t : 58 . 90 '
23 . 4 4 c 58 . 90 '
0 ExtemeO Editor verwenden
Temperatur : Luftfeuchtigke i t :
Temperatur: 23 . 42 c Luftfeuchtigke i t : 58 . 90 '
0 Kon1>ilieften Kern aggressiv zwischenspoiche Temperatur: 23 . 42 c Luftfeuchtigke it : 58 . 8 0 '
0 Bein Start nach Updates suchen Temperatur: 23 . 4 1 c Luftfeuchtigke i t : 58 . 8 0 '
23 . 4 1 c 58 . 70 '
0 Sketche beim Speichern auf die neue Dateierweiterung aktualisieren (.pde -> .ino)
Temperatur: Luftfeuchtigke i t :
Temperatur: 23 . 4 0 c Luftfeuchtigke i t : 58.70 '
0 Speichern beim überpr� oder Hochladen Temperatur : 23 . 38 c Luftfeuchtigke i t : 58 . 70 '
Temperatur: 23 . 38 c LuftfeuchtiQke it : 58.70 '
Zusätzliche Boardverwalter-I.Jlls : I•!Package_NicoHood_HoodLoader2_index.json,https://dl.espressif. com/dlfpackage_esp32_index.json l li:ll Temperatur: 23 . 4 0 c Luftfeuchtiglcei t : 58 . 61 '
Mehr Voreinstellungen können direkt in der Datei bearbeitet werden

C:���ta'j.ocaiWduino!S'pre�ences.txt
(nur bearbeiten , wenn Arduino nicht läuft)
0 Autosaol D Zeitstempel anzeigen

Den Sketchbook-Speicherort findet man in den Voreinstellungen. Der ESP32 kommt mit 12C-Sensoren prima zurecht..

2 4 1 Make: ESP32 special 20 1 9


WLAN o WebH D C 1 008 . i no


M e i n ES P 3 2
a 0 1 # i n c l ude <Wi F i . h>

o ·
2 # i n c l ude <ESPAsyncWebServe r . h>
3 # i n c l u d e < A d a f r u i t _H D C \ O O O . h >

0
1 3 3 7 n et a 4
5 c ön s t c h a r* S S I D = " M e i n E S P3 2 " ;

0
6 c o n s t c h a r * P A S S W O R D = " t e s t pa s s w o r t " ;
? We l c o m e a 7

0
8 AsyncWebS erver s e r ve r ( 80 l ;
� N T R G a st a 9 Ada f r u i t _H D C 1 0 0 0 s e n s o r = A d a f r u i t_H D C 1 0 0 0 C l ;

0
10
11 voi d setup ( ) {

0
? NTR a 12 S e r i a l . be g i n C 1 1 5200 l ;
13
0
14 i f ( ! sensor . beg i n ( Ox43 ) )
';' F R ITZ i ß o x 7 4 9 0 a
15 S e r i a l . p r i n t l n ( " Ko n n t e T e m p e r a t u r s e n s o r n i c h t f i n d e n . " ) ;
0
16 return;
17 }
0
18 Seri a l . pr i n t l n ( "�ensor wi rd i n i t i a l i si ert . " l ;
Der ESP32 kann sein eigenes WLAN aufspannen. 19 sensor . d rySenso r C l ; · I I B r a u c h t 1 5 S�kunden !
0
20
21 W i F i . softAP ( S S I D, PASSWORD l ;
22 S e r i a l . p r i n t ( " I P-Ad r e s s e : " ) ;
dern es sind die Zugangsdaten fü r ein neues
23 Seri a l . pr i n t ln(Wi f i . softAPIPC l l ;
WLAN, das der ESP32 a ufspa nnen wird. Diese 24
Z u g a ngsdaten benötigen a l so später a l l e
· 25 s e r v e r . o n ( " l " , H T T P_G E T , [ J ( A s y n c W e b S e r v e r R e q u e s t * r e q u e s t )
C l i ents, d i e s i c h m i t dem ESP32 verbi n d e n 26 S t r i ng m e s s a g e = " < ! d o c t ype h t m l > \ n " ;

J
27 message += " <h t m l > \ n " ;
wollen. 28 m e s s� g e + = " < h e a d > \ n " ;
Bevor es so weit ist, werden a uf der g l o­ 29 message += " < t i t l e> E S P 3 2 T h e rmo�e t e r
balen Ebene zwei Obje kte d e r Klassen Hyg rome t e r< l t i t l e> \ n " ;
30 mes s a g e + = " < l h ead>\ n " ;
0
A s y n c W e b S e r v e r u n d A d a f r u i t _H D C 1 0 0 0 a n ­
31 m e s s a g e + = " < bo d y > \ n " ;
gelegt. Letztere wird wie s c h o n zuvor i n der · 32 message +� " < h 1 >Tempe r a t u r : ,
s e tu p - F u n ktion i n itialisiert. Dort erfolgt auch 0 33 m e s s a g e += S t r i ng C s e n so r . readTempera t u re ( ) , 2 l ;
d i e l n itia l i s i e r u n g des WLANs u n d diesmal 34 message + = " &#84 5 1 ; <1 h 1 >\ n " ;
35 message += " < h 1> L u f t f e u c h t i g k e i t : " ;
wird n icht die b e g i n - F u n ktion der W i F i -Kias­ 36 m e s s a g e + = S t r i n g ( s e n so r . r e a d H u m i d i t y ( ) , O l ;
se verwendet, sondern d i·e F u n ktion s o f t A P . 37 m e s s a g e + = " % < 1 h 1 > \ n� ;
Die sorgt dafü r, dass a u s dem ESP32 e i n Ac­ 38 m e s s a g e + = " <lbody> \ n " ;
39 message += "<lhtml>\n" ;
cess Point mit den ü bergebenen Z u g a ngs­ 40 r e q u e s t - > s e n d ( 2 0 0 ;, " t e x t l h t m l " , m e s s a g e l ;
daten wird. 41 });
Ansch ließend w i rd d i e I P-Ad resse des Ac­ 42
43 s e r ve r . beg i n O ;
cess Poi nts mit W i F i . s o f t A P I P a !J sgegeben.
44
Die i st ü brigens per Vore i n ste l l u n g 45
1 9 2 . 1 6 8 . 4 . 1 , so d a s s s i c h e i n ESP32, d e r 46 vo i d loopO { }
einen Access Point betrei bt, sch n e l l fi n d e n
lässt. D i e Ad resse lässt sich b e i Bed a rf leicht
ä ndern.
Wie die Klasse W e b S e r v e r a rbeitet d i e
Klasse A s y n c W e b S e r v e r mit Event-Hand lern n u r Daten gelesen werden u n d d a h e r a l so den HTTP-Status-Code, den Content­
und ve rwen d et sog a r d ieselben F u n ktions­ kommt H T T P _G E T zum Einsatz. Type und den I n h a l t der Nach richt.
namen, u m die Event-H a n d l e r zu reg i strie­ Ferner e rwa rtet die o n - F u n ktion ebenfa l l s Der I n halt der Nach richt ist diesmal zwa r
ren . Die Parameter sind ganz ä h n lich, u nter­ e i n e a nonyme F u n ktion, d i e d i e eigentliche a uch e i n Text, a b e r er repräsentiert eine
scheiden sich a be r im Deta i l . Wie zuvor steht Arbeit ü bern i m mt. Al l e rd i n g s ist d i e a n o ny- HTM L-Seite. Die i st etwa s ko m p l exer u n d
der erste Para m eter fü r den Pfad, fü r den der . me F u n ktion in d iesem F a l l nicht para m eter­ wi rd d a h e r Zei l e fü r Zei l e m i t h i lfe der Zei­
Event-Handler zustä ndig ist. l n d iesem Fa l l ist l os, sondern e rwa rtet e i n e n Zeiger a u f e i n chen kette me s s a g e a ufgebaut. Sonderlich
das der Pfad " /" . Objekt der Klasse A s y n c W e b S e r v e r R e q u e s t . kom p l iziert ist der I n halt der Seite nicht und
Der zweite Parameter ist neu und steht fü r Das ist notwendig, weil die Klasse A s y n c W e b ­ der wesentliche Kunstgriff besteht darin, die
den . Typen d e r HTTP-Anfrage, d i e von d ie­ S e r v e r meh rere Anfragen g l eichzeitig vera r­ Sensor-Daten dyn a m i sch i n den Quelltext
sem Event- H a n d l e r bea rbeitet werden sol l . beiten ka n n u n d somit potenzi e l l m e h r a l s der Seite einzuba uen. So sieht der anfragen­
HTTP defi n i e rt e i n e Reihe v o n Anfrage­ e i n O bjekt der Klasse A s y n c W e b S e r v e r R e ­ de Cl ient i m m e r d e n a kt u e l l e n Sta nd der
Typen, die a l l e auf densel ben Pfad angewen­ q u e s t i m Speicher existiert. Der Poi nter zeigt Di nge. Wei l d i e f.ntwort a n den Cl ient eine
det werd en kö n nen, aber eine a n dere Be­ d a n n a uf das jewe i l s richtige. HTM L-Seite ist, m u ss d e r Content-Type auf
deutung haben. Für reg u l ä re Anfragen, d i e Wie bei der W e b Se r v e r - Kiasse w i rd das Er­ text/html gesetzt werden. Andernfa l l s würde
keinerlei Daten verä n dern, verwendet m a n gebnis der Anfrage mit der s e n d-Fu nktion a n der Cl ient led i g l ich den Q u e l l text der Seite
d e n Typen G ET. Z u m Lösc hen v o n Daten d e n C l ient gesendet. Dies m a l g e h ö rt d i e a nzeigen.
dient DELETE und Änderungen erfo l g e n F u n ktion z u r K l a s s e A s y n c W e b S e r v e r R e ­ s e r v e r . b e g i n sta rtet d e n WebServer
ü ber PUT oder POST. l n d iesem F a l l s o l l e n q u e s t , e rwa rtet a ber dieselben Parameter, und ü bern i m mt die Beha n d l u ng der Anfra-

M a ke: ESP32 special 201 9 l 25


WLAN �-- -----
----·----
--- ---

0 ® * � � .dl 24 % iil 1 1 : 3 8 gen, so d a s s d i e l o o p - F u n kt i o n d i e s m a l Access-Point l ä u ft. Es i st schon ersta u n l ich,


kom p l ett l e e r b l e i bt. wie wen i g notwendig ist, u m eine solche I n ­
<D 1 92 . 1 68.4. 1 m frastru ktur a u fzu bauen.

Temperatur: 23.87 OC Andocken J etzt w i rd 's b u nt


Nachdem d a s Prog ra m m ü bersetzt u n d a u f Obwo h l d a s schon a l les sehr vielverspre­
Luftfeuchtigkeit: 61 °/o den ESP32 geladen w u rde, fü h rt der erste chend a ussieht, g i bt es doch noch ein paar
Weg a u s n a h m sweise nicht . i n den seriel l e n Mängel. H a u ptsächlich ist die Optik der Web­
Mon itor, denn dort g i bt es n ichts Nen nens­ Seite n icht sonderl ich a n sprechend, a ber es
wertes zu sehen. Vie l m e h r lohnt es sich, a u f ist besti m m t kei n Verg n ügen, einen anspre­
dem PC oder a u f d e m S m a rt p h o n e nach chenderen Auftritt in Form von Zeichen ket­
neuen WLAN-Netzen i n der U mg e b u n g zu ten-Operationen d i rekt im Q u e l ltext L:u ko­
suchen. Dort sol lte n ä m l ich e i n Neuzugang d ieren. Da n ke n swerterweise g i bt es dafü r.
Die erste Version des Web-Sensors ist noch recht mit dem Namen M e i n ESP32 a uftauchen. weita u s beq uemere u n d effizientere Alterna­
spartanisch. Das ist der N a m e des Access Poi nts, den tive n .
der ESP32 errichtet hat u n d m i t d e m kan n Bevor die zum Tragen kommen, ist es rat­
m a n sich n u n w i e m i t e i n e m WLAN-Router s a m , •das gewü n schte Erg e b n is g a n z her­
verb i n d e n . Das Passwort la utet t e s t p a s s ­ köm m l i c h auf dem PC oder dem Mac zu er­
ESP32 Thermom< X �to r t u n d sol lte vor einem etwa igen Prod u k­ stel len, d e n n dort ist d i e Erstel l u n g von Web­

'= u :
tionsbetrieb dringend geändert werden! Seiten m ittlerweile keine g roße Hera u sforde­
eJ u I » = Soba l d m a n m i t dem ESP32 verb u n d e n r u n g mehr. I n s besondere, weil es heute so
i st, befi n d et m a n sich i n d e s s e n N etz. D a s viele n ützl i c h e CSS-Fra meworks und Java
heißt zuerst e i n m a l , d a s s e s keinen I nternet­ Script-Bibliotheken g i bt.
zugang g i bt, d e n n der ESP32 ist ja n icht mit F ü r d i e Vi s u a l isierung von Daten ist das
"' ., d e m I nternet verb u n d e n . Das ei nzige Ziel, Projekt Canvas Gauges (https://ca nvas-g a u
"' "'
das m a n erreichen ka n n , ist der ESP32 sel bst ges.com/) s e h r i nteressa nt. Es ist frei verfüg­
10 '0
bezi e h u n g sweise der Web-Server, der a u f bar, läuft i n so g ut wie a l len B rowsern u n d
0 0
d e m G e r ä t a u f A nfragen wa rtet. Wie o b e n bietet eine F ü l l e u n tersc h iedlicher Anzeige­
bereits besch rieben la utet d i e I P-Ad resse p e r I n stru mente. Listi n g i n d ex.html zeigt, wie
ou•

I I Voreinste l l u n g 1 9 2 . 1 6 8 . 4 . 1 u n d so fü h rt d e r
Aufruf von http:/1 1 9 2 , 1 68.4. 1 / z u r HTM L­
sich Tem perat u r und Luftfeuchtigkeit im
H a n d u m d rehen schick a nzeigen lassen.
Seite mit den a ktuellen Sensor-Daten. Die HTM L-Seite besteht i m Wesentlichen
Das macht schon mehr her als spröde E i n paar Zei l e n Code defi n ieren e i n en a u s zwei canvas-Eiementen fü r das Thermo­
Textausgaben. Web-Server, der a u f seinem eigenen WLAN- meter und das Hygrometer. Beide Elemente
werden ü ber d a t a -Attribute konfig u riert und
die tatsächlichen Sensor-Werte gehören i n s
Attri but mit dem Namen d a t a - v a l u e . Mög­

,J i ndex . h tm l
·
lich macht d ies die JavaScript-Bibl iothek des
Ca nvas-G a uges-Projekts, die i n der Datei
,...,
1 < ! doctype h t m l > gauge.min.js gespeichert ist und aus Gründen
2 <html> der Beq uemlichkeit ü ber das I nternet geladen
·""'
3 < h e a d> wird. I m finalen Projekt müssen a l so die I n hal­
4 <t i t l e> E S P3 2 T h e rmome t e r I Hygrome t e r< / t i t l e>
0 te der data-va l ue-Attribute dyna misiert wer­
5 </head>
6 <body> den u n d die JavaScri pt-Datei m u ss aus einer
"-.,
7 < c a nv a • i d= ' t h e rmome t e r ' anderen Quelle kom men, wei l der ESP32 -
8 d a t a - w i d t h= ' 1 00 '
,-_ und d a m it in der Regel auch der anfragende
9 dat a-he i g h t = ' 200 '
10 d a t a - t ype= ' l i n e a r-gauge ' C l ient - keine I nternet-Verbindung hat.

11 d a t a -t i t l e= ' Tempe r a t u r ' Es ist natürlich nur die h a l be Miete, wen n
12 dat a-un i t s= ' &#84 5 1 ; ' das a l les auf dem PC gut lä uft, denn d i e er­
"
13 d a t a -va l ue= ' 2 2 . 3 ' >
14 </canvas>
stel lten HTMLc, CSS- und JavaScript-Dateien
,....,
15 <ca nva s i d= ' hyg rome t e r ' lassen sich n icht ohne Weiteres auf den ESP32
16 d a t a -w i d t h = ' 200 ' kopieren, obwohl das Development-Board
r-. .
17 · data-he i g h t = ' 200 '
ü ber a u s reichend Flash-Speicher verfügt.
18 d a t a - t ype= ' r a d i a l - g a u g e '
,-.,
19 d a t a - t i t l e= ' Lu f t f e u c h t i g ke i t ' Sel bst wen n es so wä re, ·g ä be es keine offen­
""
20 dat a-un i t s= ' &#37; ' sichtliche Mög l i c h keit, sie von einem Pro­
21 d a t a -v a l u e= ' 66 . 3 ' > g ra m m aus zu lesen. G l ücklicherweise g i bt es
,..,_
22 </canvas> ·
23 <s c r i pt s r c= ' h t t p : / / cdn . rawg i t . com/ M i khus/ canvas-gauges/ fü r beide Probleme einfache Lösungen.
g h - p a � e s fd o w n l o a d / 2 . 1 . 5 / a l l / g a � g e . m i n . j s ' > Der " Ard u i n o ESP32 F i lesystem U p loader "
0
24 </ s c r i pt> ( h t t p s : / /g i t h u b . c o m / m e - n o-d ev/a rd u i n o­
.....,
25 </body>
esp32fs- p l u g i n ) erweitert d i e Ard u i no-I D E
26 </html>
u m d i e Mög l i c h keit, beliebige Dateien i n den
,-..
Flash-Speicher des ESP32 zu kopieren. Dazu

2 6 1 Make: ESP32 specia l 201 9


m u s s das P l u g - i n z u e rst h e r u nterg e lade n 0 • � l C:\Program Files (x86)\Ard uino\tools 0 X
( h tt p s:/I g i t h u b . c o m / m e - n o-dev /a rd u i n o­ H o rn e Sha re View 0

V

e s p 3 2fs- p l u g i n /re l ea s e s/d o w n l oad/v O . l I


... 1" « Windows (C:) > Program Files (x86) > Arduino > tools Search tools p
E S P 3 2 F S-vO. l .zip) u nd i n sta l l i e rt werden.
Name D a t e mod ified Type Si ze
I n sta l lation ist da bei e i n hochtra bender Jt

Quick access
P F 1 i l e� l d�
f o_ e__
r
Beg riff, denn die Zi p-Datei des P l u g - i n s m u ss �� S_
E� �_
32 S ----------�------ 201 8 - 1 - 26 1 5: 28__�F� ______

iJ �20
�� � 1� 1 0�1�
1 -� 2 :�

• WiFi101
Dropbox Mangier 1 8- 08 F i le fo ld er
nur ausgepackt u nd i n s tools-Verzeich n i s der

[iill' howto.txt
201 8- 1 1 - 1 0 1 2:08 Fi l e fo l d er
A rd u i no-l n sta l lation ko p i e rt werd e n . Nach ,_ OneDrive
201 8-09- 1 1 1 7: 35 TXT Fi l e 6 KB
einem N e u sta rt der IDE ta u c h t i m M e n ü � This PC

Werkzeuge e i n n e u e r Eintrag na mens " ESP32


- PC Backup ( F:)
S ketch Data U p l oad " auf.
Dieser Men ü p u n kt ist n i c h t ga nz e i n fach rJ# N etwork

zu ve rste hen u nd setzt e i n wen i g Wissen vo­ 4 items t


1 i e m selected

ra us. A l l e Dateien, d i e zu e i n e m P rog ra m m


gehören u nd zusa m m e n mit d e m Code des So sieht es aus, nachdem das Filesystem-Piug-in installiert wurde.
P rog ra m m s auf den ESP32 g e lade n werden
so l l e n, m ü ssen i n einem Verze i c h n i s nam e n s
data i m P rog ra m m -V e rze i c h n i s a b g e l egt Endspurt Das A r g u m e n t t r u e bewirkt, dass im Fa l l e
werden. l n diesem Fa l l s i nd das die Dateien e i n e s F e h l ers das Date i system fo rmat iert
i ndex.html u nd ga uge.m i n .js. J etzt g i lt es n u r n o c h , d i e e i nze l n e n Kom­ w i rd. l n der Reg el passiere n F e h l e r n u r, wenn
Sobald a b e r alle benötigten Date i e n im ponenten zu e i n e m g roßen Ga nzen zu ver­ zuvor noch nie ein Date i system a n g e l egt
data-Verzeich n i s l i egen, gen ügt e i n K l i c k auf b i nd e n u nd das e r l ed i g t L i st i n g w u rde u nd so ist dies das g ew ü n schte Ver­
den neuen Men ü p u n kt u nd schon werd e n We b H D C l 008 Pro.ino. Es i s t e i n e l e i c h t m od i­ ha lten.
s i e i n den F la s h - S p e i c h e r ü be rt ra g e n u nd fizierte V e r s i o n des V o rgä n g e r- P rog ra m ms, Weitere Ä nderu ngen g i bt es bei der Defi­
ste h e n dort u nter i h re n O ri g i na l na m e n zu r i st a b e r u m Lä n g e n fl ex i b l e r u nd d e u t l i c h n it i o n der Event-Handler. Der erste k ü m m ert
Verfü g u n g . einfacher zu erweite rn. s i c h um d i e Datei ga u g e. m i n .js. Statt d i e
D i e Datei i ndex . h t m l ( s i e h e S e i t e 2 6 ) Zu den b i s h e r verwendeten B i b l iotheke n Datei i n den Quel ltext ei nzu betten, wird sie
w u rde g e r i n g fü g i g m odifiziert u nd enthält w i rd a m A n fa n g des P rog ra m m s n o c h d i e j etzt m i t der Klasse S P I F F S a u s dem Flash­
jetzt d i e P latzha lter % T E M P E R A T U R E % u n d S P I F FS-B i b l i ot h e k (Serial Peri p h e ra l l nterface Speicher gelesen. Den Content-Type erm it­
% H U M I o I T Y % , d i e i m laufenden Betrieb jewe i l s F la s h F i l e Syste m ) e i n g e b u nd e n . Sie macht telt d i e AsyncWebServer- B i b l iothek in die­
d u rch die Sensor-Daten ersetzt werden m ü s­ es mög l i c h , Tei l e des F lash-Speichers a l s Da­ sem Fa l l automati sch. Er ka n n aber auch ex­
sen. Ferner w i rd die Datei gau g e. m i n .j s n i c h t tei system zu betrachten u nd dort Datei e n zu pl izit g esetzt werden.
m e h r von der Down l oad-Seite des Ca nvas­ e rzeugen, zu lesen u nd zu m odifiziere n . Die Ä h n l i c h erfolgt die A u s l ieferung der Datei
Ga u g es-P rojekts g e laden, sondern m u s s i m B i b l iothek w i rd in der s e t u p- F u n ktion d u rc h i ndex.htm l . Die ka n n a l l e rd i n g s n icht u nver­
selben Verzeich n i s liegen w i e i ndex.htm l . den A u fruf v o n s P I F F s . b e g i n i n itia l i s i e rt. ä ndert an den C l ient weitergegeben werden,

Werkzeug. H i lfe
j
Automatische Formatierung 'Strg+ T

Sketch archivieren

Kodierung korrigieren & neu la?en

Bib l i otheken verwalten ... Strg+ Umschalt+ I

Serieller Monitor Strg+ Umsch alt+ M


t i n clude <ESPAsyncWebServe r . h>
Seri eller P l otter Strg+ Umsch alt+. L
3 # i nclude <Adafruit_HDC l O O O . h>
4 # inc lude < S P I FFS . h>
I ESP32 Sketch Data U p l oa d
I 5
WiFi1 01 Firmware Updater 15 const char A S S ID = "MeinES P3 2 " ;

'I con s t char A PASSWORD = " t e s tpa s swort " ;


Board: " ESP32 Dev Module" >

Uploa d Speed: "921 600 " > � AsyncWebServe r server ( 8 0 ) ;

> 10 Adafruit_HDC1 0 0 0 sens o r = Adafrui t_HDC1 0 0 0 () ;


Flash Frequency: "80M Hz"
11
>
Flash Mode: "QIO" 12 void se tup ( ) {
Flash Size: "4MB (32Mti) " > 13 Serial . beqin ( 1 1 5 2 0 0 ) ;

> 14
P a rtition Scheme: "Standard"
15 {
:
i t ( ! S P I H S . beqin ( true l )
>
Core Debug Level : " Keine" 10 Serial . print ln ( " Da 'te i s y s r.em konnte n i cht i n i t i a l i s i ert werden . .. )

PSRAM: " Disabled" · > 17 return ;

> 18 "
Port

Boardinformationen holen

. . .. . . .. . . I
>

· �>
Programmer. "AVRISP mkll "

Bootl eader brennen

.. · . . . · . .

Das Filesystem-Piug-in erweitert die Arduino-IDE


um einen Menüpunkt Dateien lassen sich einfach per Plug-in auf den ESP32 laden.

Make: ESP32 special 201 9 l 27


WLAN

c WebH D C 1 008 / P ro i ndex . h tm l


<D 1 92 . 1 68.4. 1
1 < ! doctype h t m l >

()
2 <html>
3 <head> Temperatur �

n
4
.. ..
< t i t l e> E S P 3 2 T h e rmome t e r Hygrome t e r</ t i t le> "' U '"
5 </h ead>
6 <body>
n
.
"' "'
7 < c a n v a s i d= 1 t h e rmome t e r 1
40 40
8 d a t a - w i d t h = 1 1 00 1
,0
9 "' "'

.
data-he i g h t = 1 200 1

(\ 1 1
10 d a t a - t ype= 1 L i n e a r-gaug e 1 " "

data-t i t le= 1 Tempera tur 1


("...�
12 data-un i t 5= 1 &#845 1 ; 1
13 d a t a -va l ue= 1 % T E M P E R A T U R E % 1 >
14 </canvas>
('
' 15 <canvas i d= 1 hyg rome t e r 1
n 16 d a t a -w i d t h = 1 200 1
17 data-he i ght= 1 200 1
0 19
18 data-type= 1 radi a l-gauge 1
data-t i t l e= 1 Lu f t f e u c h t i g ke i t 1
r::· 2 1
20 dat a-un i ts= 1 &#37; 1 So sieht die fertige Webseite auf dem
d a t a-va l ue= 1 %HUMI D I TY% 1> Smartphone aus.

< s c r i p t s r c = 1 g a u g e·. m i n . j s 1 >


n 22 < / c a nvas>
23
n ' 24 </scri pt>
25 </ body> Fa l l ist es die F u n kt i o n r e p l a c e V a r i a b l e .
(' 2 6 '< / h t m l > F ü r jeden P l atzha lter e rfo l g t e i n Aufruf von

n
r e p l a c e V a r i a b l e mit dem N a m e n des
P latzhalters. Die F u n ktion l i efert den zu er­
setzenden Wert zurück u n d der w i rd in d i e
Z e i c h e n kette, d i e d e n Datei- I n h a l t reprä­
wei l sie noch Platzhalter fü r die Sensor-Werte perfekt zu %TEMPERATU RE% und % H U M I DI­ sentiert, geschrieben. Dabei w i rd d i e Datei
enthält. Praktischerweise u nterstützt d i e TY% in der Datei index.htm l . i m F l a s h-Speicher nicht verä n d e rt.
A s y n c W e b S e r v e r R e q u e s t -Kiasse d i e E rset­ Für die Ersetzung ruft A s y n c W e b S e r v e r R e ­ Für einen fi n a l e n Test w i rd das Prog ra m m
zung von P l atzha ltern, die d u rch zwei P ro­ q u e s t fü r jeden Platzhalter eine F u n ktion auf, ü be rsetzt u n d a u f den E S P 3 2 geladen. Fer­
zentzeichen eingera h mt werden. Das passt die man zuvor reg istrieren m uss. l n d iesem n e r m ü ssen d i e · dazugehörigen Dateien
ü be r d e n M en ü p u n kt Werkze u g e > ESP32
S ketch Data U pload i n d e n F l a s h-Speicher
kopiert werde n . Diesen Sch ritt d a rf m a n bei
späteren Ä n d e r u n g e n n icht vergessen,

WL·A N·SI C H E RH E I T sonst d rohen lange Debug-Sitzu ngen.


Die h ier verwen d eten Tec h n i ken zeigen
ü b r i g e n s n u r einen k l e i n e n Aussc h n itt der
Die meisten Netze d ü rften vor u nbefug­ die Qualität der verwendeten Passwörter M ög l i c h keiten, die die AsyncWebServer­
tem Zugang gesch ützt sein und fü r die­ über die Sicherheit des Gesamtsystems. B i b l iothek b i etet. S i e ka n n noch seh r viel
WPA und WPA2 g i bt es jeweils i n zwei
sen Schutz g i bt es unterschiedl iche Pro­ m e h r, u n d e i n gena ues Stud i u m der Doku­
tokol le. Die sichern n icht n u r den Zugang, m e ntation l i efert gewiss Ideen fü r neue Pro­
Auspräg u ngen. Die erste heißt Personai
sondern sorgen auch dafü r, dass a lle j e kte.
oder PSK (Pre-Sha red Key) u n d ist für den
Daten, die ü ber die Luftschnittstelle wa n­
Einsatz daheim odedn kleinen NetzWer­
dern, verschlüsselt werden.
ken gedacht. ln diesem Szenario teilen Fazit
sich a lle Nettteilnehmer einen gemeinsa­
Seit der ersten WLAN-Spezifikation gab es Es ist oft d i e Rede davon, wie l e i stu n g ssta rk
men Sch lüssel mit einer Länge von 256
im Wesentl ichen d rei Verfa h ren zur Absi­ die H a rdwa re des ESP32 i st, aber erst wenn
Bit. Jeder Tei l nehmer leitet zur Absiehe� ­
cheru ng: WEP (Wired Equ iva lent Privacy);
rung der eigenen Komm u n i kation yon m a n d i e WLAN-Fä h i g keiten des Geräts a u s­
WPA (Wi-Fi Proteeted Access) und WPA2
diesem Schlüssel einen Scll l ü ssel 'mit p r o b i e rt, beko m m � m a n e i n g utes Gefü h l
(Wi-Fi Proteeted Access Version 2). Schon dafü r, wa s wirklich i n d e m Winzl i n g steckt.
einer Länge von 1 28 Bit ab. Weil jeder
Teilnehmer i m WLAN somit einen eige-
lange g i lt WEP als u nsicher und sol lte
M ü h e l o s ve r b i n d et e r s i c h mit a l l e m , was
nicht mehr verwendet werden. Viel bes­ sich so a n WLANs fi n d et und h a t d a r ü ber
nen Sch lüssel hat, ist das Abhören u nter­
ser sieht die Lage bei WPA auch n iCht aus
einander nicht möglich, auch wenn a l le hinaus g e n u g Reserven, u m noch s i n nvol l e
und sel bst WPA2 ist n icht unangreifba r. D i n g e zu t u n .
den g leich.en PSK verwenden.
•Noch scheint zumi ndest WPA2 ausrei­
, Für das Enterpri se-Verfah ren benötigt
' H i nzu kom m t, d a s s d i e entsprechenden
chend sicher zu sein u n d es ist das beste
man 'Zusätz!ich einEm ·separaten Aut henti�
B i b l iotheke n es l e i c h t m a c h e n , a n spruchs­
Verfa h ren, das der Sta ndard derzeit bie­
'fi zierungsserver, den in der·Regel n ur g rö-
·

tet., Wie bei fast a l len Verfa h ren zur Zu- ·


vo l l e Anwend u n g e n i n n e rh a l b kü rzester
· , ':
· ß�re Ü nternehmen betreiben.
Zeit zu e rste l l e n . D r a h t l o s e I oT-P rojekte
g
gan skontrolle entscheidet nicht zuleti:t
waren noch nie so ei nfach u n d g ü n stig zu
haben. --dab

281 Make: ESP32 special 201 9


(.
( WebH D C 1 008Pro . i no
( 1 #i nc lude <Wi F i . h>

(
2 #i nc lude <ESPAsyncWebServe r . h>
3 # i nc l ude < A d a f r u i t _H D C 1 0 0 0 . h >

c
4 # i nc l ude <SPI F F S . h>
5

(
6 const char* S S I D = " M e i n E S P32 " ;
7 const c h a r* PASSWORD = " t e s t pa s s wo r t " ;

c
8
9 AsyncWebServer s e r ve r ( 80 l ;

c
10 A d a f r u i t _H D C 1 0 0 0 s e n s o r = A d a f r u i t _H D C 1 0 0 0 < l ;
11

(
12 vo i d s e t u p ( ) {
13 S e r i a l . be g i n ( 1 1 5 2 00 l ;

c
14
15 i f ( ! SPI FFS .begi n ( t rue ) ) {

(
16 S e r i a l . p r i n t l n ( " Da t e i sys t em kon n t e n i c h t i n i t i a l i s i e r t werden . " ) ;
17 return;

(
18
19
(
20 if ( ! s e n s o r . be g i n ( Ox43 l l
21 S e r i a l . p r i n t l n ( " Ko n n t e T e m p e r a t u r s e n s o r n i c h t f i n d e n . " ) ;
(
22 return;
23
( 24
25
Seri a l . pr i n t l n ( " Sensor wi rd i n i t i a l i si e rt . " l ;
senso r . d rySenso r ( l ; / / Brau c h t 1 5 Sekunden !
c 26
27 Wi F i . softAP ( S S I D 1 PASSWOR D l ;
( 28 S e r i a l . p r i n t ( " I P-A d r e s s e : " l ;
29 S e r i a l . pr i nt l n ( W i F i . softAPI P( l l ;
( 30
31 s e r v e r . o n ( " / g a u g e . m i n . j s " , H T T P_G E T , [ J ( A s y n c W e b S e r v e r R e q u e s t * r e q u e s t l _ {
( 32 r e q u e s t -> s e n d ( S P I F F S , " / g a u g e . m i n . j s " l ;
33 });
( 34
35
( r e q u e s t - >. s e n d ( S P I F F S , " / i n d e x . h t m l " , S t r i n g ( l , f a l s e , r e p l a c e V a r i a b l e l ;
s e r v e r . o n ( " / " , H T T P_G E T , [ ] ( A s y n c W e b S e r v e r R e q u e s t * r e q u e s t l {
36
37 });
( 38
39 s e rve r . begi n < l ;
( 40
41
( 42 vo i d l o o p ( l 0
43
( 44 S t r i ng rep l a ceVa r i a b l e ( const S t r i ng& va r l {

(
45 i f ( va r == " H U M I D I T Y " l
46 r e t u r n Str i ng ( se n s o r . r e a d H um i d i t y ( l , O l ;

(
47
48
49
·
i f ( v a r = = " T EM P E RATU R E " l
return S t r i ng ( senso r . readTempe r a t u re < l , 2 l ;
return S t r i ng ( l ;
( 50

Smarte· Gadgets

@ heise shop
Bestellen S1e ganz emfach onhne unter shop.heise.de oder per E·Ma11 service@shop.heise.de
MijjM@i!!ffi!iightj

Make: ESP32 speciai 20 1 9 1 29


BLU ETOOTH I--- I --- ---

Strahlendblauer
Funkenflug
Was d i e Ko m m unikation m i t d e r A u ßenwelt angeht, ist d e r ESP32 ein
wa h res M ultitalent. Neben WLAN spricht e r nämlich a uch fli e ßend
Bluetooth, was i h n z u einer exzellenten Basis fü r viele I oT-Projekte macht.

von M a i k Schmidt

Alles zum Artikel


I im Web unter
• make-magazin.de/xa4r

30 I Make: ESP32 special 20 1 9


G enau wie WLAN h i lft B l u etooth bei d e r
d rahtlosen Kom m u n i kation zwischen Ge­
räten. Wäh rend WLAN i n erster Linie als Ü ber­ S e r i a L B L ue t oot h . i no
tra g u n g stech n i k fü r beliebige D i e n ste u n d "
1 # i n c l ude " B l uetoothSe r i a l . h "
P rotoko l l e d i e nt, w u rde B l u etooth fü r e i n e 2
"
Vielza h l ko n kreter Anwend u ngen konzi piert. 3 B l u e t oo t h S e r i a l b l u e t oot h ;
Vorneh m l ich geht es bei Bl uetooth darum, Ka­ 4
"
5 vo i d s e t u p ( ) {
belverbi n d u n g e n zwi schen Geräten d u rc h
6 b l ue t oo t h . be g i n i " E SP32" l ;
!1
F u n kverbi n d u n g e n zu e rsetze n . Das betrifft 7
u nter a" nderem Tastaturen, Mäu se, Kopfh örer, "
8
9 vo i d L oop ( ) {
La utsprec her oder S ma rtp hones. Der ESP32
10 b l u e t o o th . p r i n t l n i " H i e r b i n i c h ! " ) ;
·'""
u nterstützt den B l u etooth-Sta n dard i n d e r 11 d e l a y 1 1 00D l ;
Version 4.2, was nicht zuletzt bedeutet, dass 12
('
er prinzipiell mit a l l e n zuvor genan nten Gerä­
te-Typen ko m tn u n izieren ka n n .
D e r aktu e l l e B l u etooth-Sta n dard zerfä l l t d e n . Dabei ist es v ö l l i g ega l , u m we l c h e Ge­
g rob i n zwei Tei le, die s i c h stark voneinander räte es sich ha n d e lt, sola n g e sie e i n e B l u e­
u nterscheiden. Auf der einen Seite g i bt es das toot h - E i n h e i t ha ben u n d a u f d i e seriel l e
klassische Bluetooth, das zur Ko p p l u n g zweier S c h n ittste l l e zug reifen kö n n e n .
Geräte d i ent, d i e lan gfristig u n d ü be r ku rze Listi ng Seria i B i u etooth .ino verwandelt d e n
Dista nzen m iteina n d e r ko m m u n iziere n . Ge­ ESP32 i n e i n B l u etooth-Gerät, d a s Nach ri c h­
brä u c h l i c h e Anwe n d u n g e n s i n d d i e F re i­ ten ü be r e i n e d ra h t l ose seriel l e S c h n ittste l l e
spreche i n richtung im Auto oder d i e d rahtlose vertei lt. Dazu b i n det das P rog ra m m zunächst
Ü bertra g u n g von M u s i k vom Smart p h o n e d i e B l u etoothSeria i - B i b l iothek e i n u n d d efi­
zum Ko pfh örer. Bei d i esen Anwe n d u n g e n n i e rt e i n g l o ba l e s O bj e kt d e r Klasse B l u e ­
sind S e n d e r u n d E m pfänger permanent a ktiv t o o t h S e r i a l m i t d e m Na m e n b l u e t o o t h .
u n d benötigen e i n e Menge Energie, um d i e Dieses O bj e kt i n itia l isiert d i e s e t u p-F u n ktion
Kom m u n i kation aufrechtzuhalten. m itte l s d e r F u n ktion b e g i n u n d ü berg i bt i h r
Da r ü b e r h i na u s g i bt es aber auch B l ue­ da bei d i e Z e i c h e n kette E S P 3 2 . Das i s t d e r
tooth Low Energy ( B LE), das s pezi e l l die Be­ Na me, u nter d e m d e r ESP32 erschei nt, we n n Der ESP32 erscheint als ei n ganz normales
d ü rfn isse von I oT-G e räten ( I nternet of m a n nac h B l u etooth-Geräten i n d e r U m ge­ Bluetooth-Gerät.
Th i n g s) adressiert. B L E e i g n et sich z u m Bei­ bung sucht.
spiel hervorragend fü r m o b i l e Sensoren, d i e Die L o o p - F u n kt i o n g i bt a n s c h l i e ß e n d i m
i h re Daten a n a l l e E m pfä n g e r i n d e r näheren Seku n d e nta kt e i n e n Text a u f d e r seri e l l e n
U m g e b u n g senden. Ebenso ermög l i c h t BLE B l uetooth-Sc h n ittste l l e aus. Das i s t genauso
O rt u n g und Nav i gation i n n e r ha l b v o n Ge­ e i n fach, wie d i e Au sgabe ü be r die herkö m m ­
bä uden. l i c h e seri e l l e S c h n ittstel l e, d e r Text w i rd a b e r
B l u etooth-Geräte m ü ssen n icht beide per F u n k ü bertragen.
Te i l e des Sta n dards i m p l e m e n t i e r e n . Das
hei ßt, es g i bt Geräte, d i e n u r d i e klassische Gegenüber·
Va riant� oder nur B L E a n biete n . V i e l e Geräte
i m p l e mentieren aber beides u n d der ESP32 Jetzt feh l t noch e i n E m pfä n g e r u n d dazu eig­
gehört dazu . Für beide Formen d e r Ko m m u ­ n et sich jedes Gerät, das e i n e seri e l l e S c h n itt­
n i kation g i bt es e i n e V i e l za h l u nters c h i ed­ ste l l e v ia B l u etooth eta b l ieren kan n u n d ü ber
l icher E i n satzmög l i c h keiten. e i n seriel les Term i na l ve rfü gt. P r i n z i p i e l l geht
das a l s o z u m Beispiel mit fast a l l e n PCs und
Kabellos a uf Draht S ma rt p h o n es.
Es g i bt tatsä c h l i c h recht g ute seri e l l e Ter­
E i n e d e r einfach sten u n d s i n nv o l l sten Anwen­ m i na l s fü r Smartphones u n d s i e lassen sich
d u n gen des klassischen B l u etooth i st der Auf­ i n der Regel e i n fach bed i e n e n . Die A n d roid­
bau einer d rahtlosen .seriellen Verbi n d u n g . U r­ A p p Serial B l u etooth Te rm i na l (https://play.
sprünglich wu rde B l u etooth sogar entwickelt, g o o g l e . c o m /sto re/a p ps/deta i l s ? i d =d e . ka i _
um e i n e RS23 2-Sc h n ittste l l e o h n e Ka bel zu m o r i c h .se rial_b l u etoot h_te r m i na l ) ko m m t
rea l isieren. P rog ra m mtec h n isch fu n kt i o n i e rt beispielsweise o h n e g roßen S c h n i c kschnack
d iese Schn ittste l l e sowo h l a u s Sicht des da h e r und ze i g t die M e l d u n g e n d e s ESP32
Cl ients als auch a u s der Sicht des Servers wie a n , soba l d man das G e rät gekoppelt hat.
eine d rahtgebundene, aber sie kommt o h n e Wichtig ist nat ü r l i c h , zuvor d i e B l u etooth­
eine phys i ka l ische Verb i n d u n g aus. F u n kt i o n des Smart p h o n e s a u c h zu a kti­
Erfre u l icherweise ist d i e seri e l l e Ko m m u ­ vieren.
n i kation Bestandteil d e r B l u etooth-S pezifi ka­ Selbstve rstä n d l ich fu n ktioni ert d i e seri e l l e
tion u n d so g i bt es B i b l i ot h e ke n , wie z u m Kom m u n i kation auch auf d e m PC oder d e m
Beispiel B l u etooth Serial, d i e es k i n d e r l e i c h t M a c . M o d e r n e Betriebssyste m e erste l l e n Smartphone-Terminals sind unverzichtbare
machen, zwei Geräte m iteina n d e r zu v e r b i n - nä m l i c h b e i m Ko ppe l n mit e i n e m B l u etooth- Helfer bei der Bluetooth-Entwicklung.

Ma ke: ESP32 special 20 1 9 1 31


B LU ETOOTH 1�-------·

G coMs
Oevi ce M an ager

File Action View Help

>
>
_

_
Disk drives
Display adapters
111
> - DVD/CD-ROM drives Hi e r bin i ch !
> At Human Interface Devices


> .. IDE ATA/ATAPI controllers Hie r bin i ch !
> lmagi n g devices
Hie r bin i ch !

(8
> Ei3 Keyboards
> Mice and other pointing devices Hie r bin i ch !
> r;J Monitors
> � Network a d apters
Hie r bin i ch !
> p Other devices
Hi e r bin i ch !
Portable Devices

Jii
v iji Ports (COM & LPD Hi e r bin i ch !

iii
Communications P ort (C O M l )
Hie r bin i ch !
ij
Silicon Labs CP21 0x USB to UARl Brid ge (COM6)
Standard Serial over Bluetooth link (COMS) Hi e r bin i ch !
jp Stan d ard Serial over Blu etooth link (COM7)
> r;::;:J Print queues Ausgaben funktionieren in PuTTY problemlos.
> D Processors
> S Sensors
> J Software devices
> (I Soun d, video and g ame controllers a u c h Nac h richten a n den E S P 3 2 s e n d e n .
· > � Storage controllers Listi ng Seria i B i u etoot h B i d i re c t i o na l . i n o l i est
> _ System devices
zum B e i s p i e l a l l e Daten, d i e ü be r die B l ue­
> f
0 Autoscroll D Zeitstempel anzeigen
Universal Serial Bus controllers
tooth-Sc h n ittste l l e h e rei n k o m m e n u n d g i bt
sie d i rekt wieder auf der reg u l ä re n seriel l e n
S c h n ittste l l e a u s .
Windows erzeugt gleich zwei GOM-Ports für den Bluetooth-Nachrichten kann man auch im
U m zu sehen, wie d a s fu n kt i o n i ert, m u ss
ESP32. seriellen Monitor der Arduino-IDE lesen.
ma n zwei seri e l l e Te r m i na l s öffn e n . Den seri­
e l l e n M o n itor öffnet ma n i n der Ard u i n o-I D E
wie gewo h nt fü r die d ra h tg e b u n d e n e
Gerät automatisch e i n e seri e l l e S c h n ittste l l e, F ä l l e n auch ein wenig ü be rtrieben, die ga nze
S c h n ittste l l e des E S P 3 2 . Pa ra l l e l öffnet man
ü ber die ma n mit dem Gerät ko m m u n izieren Ard u i n o - I D E n u r fü r den seriell e n Mon itor zu
PuTIY und ste l l t den COM-Port der B l ue­
ka n n . U nter Windows fi ndet man im Ge räte­ i n sta l l ieren. S i n nv o l l e r i st es, e i n P rog ra m m
tooth-Sc h n ittste l l e ein. Alle Nac h ric hten, d i e
Manager nach der Kop p l u n g mit dem ESP32 w i e PuTIY (https://www.putty.o rg/) z u i n sta l­
ma n da n n i m E i n ga befe n ster von PuTIY e i n ­
g l e ich zwei n e u e COM-Ports. D i e G r ü n d e l i eren, das g e na u fü r d i esen Zweck e rste l lt
g i bt, ersc h e i n e n sofo rt i m seri e l l e n Mon itor
dafü r s i n d tec h n i s c h e r Nat u r u n d fü r e rste w u rde. Neben d iversen a n d e ren P roto ko l l e n
d e r Ard u i n o - I D E .
Expe rim ente ist der erste COM-Port die rich­ u n terstützt PuTIY n ä m l i ch a u c h d i e seri e l l e
Mit der Kom m u n i kation i n b e i d e R i c h t u n ­
tige Wa h l . Kom m u n i kation u n d m a n ka n n s i e d i rekt
g e n l ä sst s i c h natü r l i c h e i n e M e n g e a n fa n ­
Jetzt benötigt ma n n u r n o c h e i n seriel les nach d e m Sta rt zusa m m e n m i t der seri e l l e n
g e n . Z u m B e i s p i e l ka n n d e r E S P 3 2 S e n sor­
Term i nal, u m d i e Nac h richten des ESP32 zu S c h n ittste l l e auswä h l e n . Soba l d ma n d i e Ver­
daten per F u n k ü bertra g e n . Der ESP32 ka n n
lesen bezi e h u n g sweise um i h m neue Nach­ b i n d u n g d u rc h e i n e n K l i c k a u f d e n O p e n ­
a b e r a u c h Ko m ma n d o s e m pfa n g e n , u n d
richten zu senden. Am e i nfachsten geht das Button g eöffnet hat, g i bt PuTIY m u nter d i e
L i st i n g B l u etoothSwitc h . i n o i m p l e m e nt i e rt
mit dem serie l l e n M o n itor der Ard u i n o - I D E . Nac h richten a u s, d i e p e r B l u etooth em pfa n ­
e i n e n pri m itiven Lichtschalter. E m pfä n g t der
Dort wä h l t m a n i m M e n ü Werkze uge > Port gen werd e n .
E S P 3 2 eine 1 , so schaltet e r d i e Stat u s - L E D
d i e seriel l e S c h n ittste l l e d e r B l u etooth-V e r­
a u f d e m Dev e l o p e r- B oard e i n . S e n d et m a n
b i n d u n g a u s u n d s c h o n t r u d e l n d i e Nac h ­ Vice Versa e i n e 0, schaltet er sie w i e d e r a u s .
richten e i n .
Da n k e i n e r weits i c h t i g e n S pezifi kat i o n
Al lzu komfo rtabel ist der seri e l l e Mon itor Das Ga nze fu n kt i o n i e rt auch a n d e r s h e r u m ,
u n d robuster I m plementierungen i n moder­
der Ard u i n o - I D E n i c ht und es wäre i n v i e l e n d a s h e i ßt, ma n ka n n ü be r d i e S c h n ittste l l e
nen Betriebssystemen u nterscheidet sich der
Zug riff auf B l u etooth ka u m vom Zug riff auf
d ra h tg e b u n d e n e seri e l l e S c h n ittste l l e n . Der

� P uTTY Confi g, u rati on ? X ESP32 wird so im Ha n d u m d rehen zu e i n e m


vo l l we rt i g e n B l u etooth-Gerät, d a s s i c h auf
Category: vielfä ltige Weise e i n setzen l ä sst.

I Basic options, for your Pu TTY session


Nat ü r l i c h m u ss die Kom m u n i kation n i cht
�?· Session ü be r e i n serielles Te r m i na l erfo l g e n . Das geht
: . ... logging
r? ·· Tenninal
Specify the destination you want to connect to genauso g u t m i t sel bst entwickelten Anwen­

Sg_eed
d u n gen i n beinahe jeder P rog ra m m ierspra­
Keyboard
'
Serial line
Bell jcoMSI 1 19600 I
che, d e n n so g u t wie jede P rog ra m m ierspra­
che ka n n auf seri e l l e S c h n ittste l l e n zug reifen.

Features
$·· Window
t...o nnect1on tyPe :
0 Ra� 0 Ieinet 0 Riog[n 0 �SH
. I @ Se[ial I Das geht a u c h s m a rter
. • . ...

Da s kla s s i s c h e B l u etooth fu n kt i o n i ert a u f


PuTTY kommt gut mit seriellen Verbindungen zurecht. d e m ESP32 p r i ma, aber fü r v i e l e l oT-Anwen-

32 1 Make: ESP32 special 201 9


d u n gen ist B l u etooth Low Energy ( B LE) deut­
l i c h besser geeig net. Das l i egt z u m e i n e n a m
geringen Stro mverbra u c h , a b e r a u c h a n d e r S e r i a L B L ue t oot hBi d i rect i ona l . i no
Art u n d Wei se, w i e d i e Kom m u n i kation bei
1 # i n c l ude " B l uetoothSe r i a l . h �
BLE a bgewickelt wird. Wä h rend i n d e r klassi­
2
schen Va riante G e räte gekoppelt werden '
3 B l u e t oot h S e r i a L b l ue t oot h ;
m ü ssen und i m m e r nur ü be r e i n e Point-to­ ·'"'
4
5 v o i d s_e t u p ( l {
Poi nt-Verb i n d u n g ko m m u n izieren kö n n e n ,
r
6 S e r i a l . be g i n ( 1 1 5 2 00 l ;
ermög l i c h t B L E B road cast-Na c h richten u n d 7 i f ( ! b l ue t oot h . beg i n ( " E SP32" l l
Mesh-N etzwe rke. Opti m i ert w u rd e B L E fü r .�
8 S e r i a l . p r i n t l n ( " B l ue t oo t h kon n t e n i c h t a k t i v i e r t w e r d e n . " ) ;
das s c h n e l le Verse n d e n u n d E m pfa n g e n klei.­ 9 e lse {
r
10 Se r i a L . p r i n t L n ( " D e r ES P 3 2 k a n n g .e k o. p p e L t w er d e n . " ) ;
n e r Date n pa kete ü be r D i sta nzen b i s zu 40 11
Mete rn. ,..., 12
13
B LE-Geräte benöti gen kei n e perma nente
r 14 vo i d Loo p ( ) {
u n d energ i e h u n g rige Verbi n d u n g . Sie s c h la­
15 w h i L e ( b l ue t oo t h . ava i L a b l e ( ) )
fen die m e i ste Zeit ü ber und kom m u n izieren 16 S e r i a l . w r i t e ( b l u e t oo t h . rea d ( l l ;
r
nur bei Beda rf. Für Fitness-Tracker, medizi n i ­ 17 }
sche Anwe n d u n g e n o d e r v i e l e G e räte z u r ('"' 18 delay(20 l ;
19
Hei mauto mati s i e r u n g i s t d a s idea l , d e n n s i e
m ü ssen n i c h t u n e ntwegt a u f Send u n g se i n
-,...,
u n d kö n n e n so s e h r la nge von e i n e r Kno pf­
ze l l e ze h ren. ? X
Die vielfältigen Anwe n d u n g s m ög l i c h kei­
ten mac h e n es n otwe n d i g , Date nfo rmate �ategory:
t;J· Session
u n d Protoko l l e weitestg e h e n d zu sta n dardi­
sieren, aber trotzd em noch genug Ra u m fü r I Qpticms. corntrnllirng the �ermirnal emulation I
Set vaMol!ls termirnal optiorns
'···· logging
Neu entwickl u n g e n zu la ssen. Das geschieht

0 Aurto wrap mode irnitially on
bei BLE mit relativ ei nfachen M itte l n , d i e im Terminal .
! --
0 D EC Girigin Mode irnitially orn
Deta i l aber e i n i germaßen ko m p l ex s i n d . Keyboard
Erfre u l i c h i st, d a s s d i e Bete i l igten e i n e r
O· lmplicit OR. in every LF
!-- · Bell
BLE-Ko m m u n i kation n u r Server o d e r C l ients �---- Features
sein kö n n e n . Wä h re n d B L E-Server i h re U m ­ l$J -- Winclow 0 lmplicit LF in every C:R.
g e b u n g i n reg e l mä ß i g e n Abstä n d e n be­
! .. 1\ppearance -0 Use baCkgrol!lncl colour to erase screen
scha l l en u n d ü b e r i h re Existenz i nfo r m i e ren,
suchen BLE-Ciients u m g e ke h rt nach B L E-Ser­
! --· Bernaviour D Ernable blirlkinrg te)l[
vern, m i t d e n e n s i e s p i e l e n kö n n e n . Haben ! ... Translatiorn .Ans.w erback to "E:
sie wa s I n te ressa ntes gefu n d e n , ba u e n sie !---- Selectionr !Pl!ITTY
eine Verbi n d u n g a u f, um mehr I nfo rmatio­ ...
L Cdlours
nen zu beko m m e n . EI· Conrnectiorn Une clisciplinre optiorns
!---· Data
Profi l e suchen ! --· Proxy Local ·echo :
0 1\m.o @ Force on 0 Force off
!--· Te'lnet
!-- · Rloginr
Doch w i e ka n n e i n C l i e n t festste l l en, o b e i n Local line eclitinrg
best i m mter Server ü be r ha u pt i n teressa n te 0 Aurto @ Force orn 0 Force off
I nfo rmat i o n e n a n bietet u n d ob d e r C l i e n t $ - SS H
ü berha u pt i n d e r Lag e i st, d i ese zu ve rste­ L ... sernal Remote�ontrnlled printing
hen? Beispielsweise kön nte eine Smartphone­
App ja nach Fitness-Trackern i n d e r U m g e­ Damit man in PuTTY auch etwas sehen kann, muss man ein paar Einstellungen ändern.
b u n g s u c h e n . D i e A p p wä re in d i es e m Fa l l
der C l i e n t u n d d e r Fitness-Tracker d e r Server.
Wie kö n n en die beiden sich erste l l e n, dass sie
d i eselbe S p ra c h e sprechen und Daten a u s­
ta u s c h e n kö n n e n ? S i c h e r l i c h wä re es n i cht
h i lfreich, wen n jeder Fitn ess-Tracker d i e a k­
t u e l l e P u l sfreq uenz in seiner eigenen Kodie-
·
r u n g senden wü rde.
"
Die Lös u n g des Prob l e m s s i n d d i e B l ue-
toot h - P rofi l e . Dav o n g i bt es gleich m e h re re
Dutze n d u n d s i e l e g e n fest, ü be r we l c h e Fä­
h i g keiten e i n G e rät verfü gt. Mä u s e u n d Tas­
tat u re n i m p l e m e n t i e r e n z u m B e i s p i e l das
H u ma n I n te rface Dev i c e P rofi l e ( H I D) , u n d
wer ei n e seri e l l e S c h n ittste l l e a n b i etet, i m - Hier kommunizieren zwei serielle Terminals über Bluetooth miteinander.

Make: ESP32 special 201 9 l 33


B LU ETOOTH �---- -----
B lüeToot h S w i t c h . i no
#i nc lude "BluetoothSer i a l . h"
B L U ETOOTH
c o n s t u i n t 8_t L E D_P l � = 2; U NT E R L I N UX
B l uetoot h Se r i a l b l uetoot h ; Auch u nter Linux ka n n man per Bl ue­
vo i d s e t up ( ) { tooth mit dem ESP32 seriell Daten aus­
p i n M o d e ( L E D_P I N , O U T P U T ) ; tauschen, a l lerdings ist dazu mehr
S e r i a l . be g i n ( 1 1 520D l ; Handarbeit nötig. U nter U b u ntu 1 6.04
i f ( ! b l uetoot h . beg i n ( " ESP32 " l l
gelang es, den ESP32 zu koppel n. Al ler­
S e r i a l . p r i n t l n ( " B l u e t o o t h k o n n t e n i c h t a- k t i v i e r t w e r d e n . " ) ;
e l se { dings fragt Linux u nter Umstä nden
S e r i a l . p r i n t l n ( " D e r E S P 3 2 k a n n g e k o p p el t w e r d e n . " ) ; · nach einer Pin, die man auf dem. ESP32
eingeben soll. Ignorieren Sie die Auf­
forderu ng und klicken ei nfach auf
voi d L oopO { "Fortfa h ren". Anschließend können Sie
w h i l e ( b l ue t oot h . ava i l a b l e ( ) ) ü ber das Tool rfcom m per s u d o
c o n s t i n t c = b l u e t oo t h . r e a d < l ;
rf comm connec t 1
Seri a l . wri t e ( c l ;
i f ( c = = '· 1 ' l { u u : v v : w w : x x : y y : z.z Z eine seriel le
d i g i t a l W r i t e ( L E D_P I N , H I G H l ; Verbindung mit 9600 Baud auf der
e l se i f ( c = = ' D ' l {
Schn ittstelle /dev/rfcom m 1 a ufba uen.
d i g i t a L W r i t e ( L E D_P i N , L O W l ;
Die Beispiele mit BLE i n Chrome fu n k­
d e l a y ( 20 l ; tionierten bei u n s leider nicht. ·

p l e m e ntiert d a s Serial P o rt P rofi l e ( S P P ) . g i bt, bedeutet a l so n i cht, dass es in Z u ku nft hen. Profi le bilden eine H iera rchie und kön­
S m a rtphones i m p l e m entieren oft e i n e a u c h kei ne geben wird. nen aus einem oder m e h reren Diensten be­
ga nze R e i h e v o n P rofi l e n , wie z u m Beispiel Das Konze pt d e r Profi l e w u rde schon i n steh e n . Dienste wiederu m bestehen a u s
das Adva nced Audio D i stri bution P rofi l e d e n Anfä n g e n d e r Sta n d a rd i s i e r u n g d efi­ e i n e r o d e r meh reren C h a ra kteri sti ken . E i n e
(A2DP), d a s Head set P rofi l e ( H S P), d a s n i ert.- Weil a ber fü r BLE e i n e g a nze M e n g e C h a r a kteristi k setzt sich a u s verschiedenen
H a n d s F ree P rofi l e ( H F P) u n d d a s P h o n e­ n e u e r D i e n ste z u e rwa rten i st, s i e h t d e r Eigenschaften, e i n e m Wert u n d e i ner Liste
book Access Profi l e (PBAP). l n Kom b i nation B l u etöoth-Sta n d a rd dafü r e i n ü berg reife n ­ von Deskri ptoren zusa m men.
ermög l ichen d iese Profi l e das beq ueme Te­ des Profi l m i t dem N a m e n G e n e r i c Attribute Die Eigenschaften einer C h a ra kteristi k de­
lefo n ieren im Auto. P rofi l e (GATT; https://www.bl u etooth .com/ fi n ieren, a uf welche Weise C l ients a u f d i e
s pecificati o n s/gatt) vor. U nterh a l b d ieses C h a ra kterist i k z u g reifen kö n n e n . Beispiels­
Profil zeigen P rofi l s kö n n e n H e rste l l e r fl exi be l weitere weise können manche Charakteristiken gele­
Dienste (Services) defi n ieren. sen u n d/oder geschrieben werde n . Beim
S o g u t w i e a l l e P rofi l e s i n d o ptio n a l , a be r Die Liste d e r BLE-Dienste ist schon jetzt S c h reiben g i bt es zwei u ntersc h ied l i c h e
a l le Geräte m ü ssen das G e n e r i c Access P ro­ recht l a n g u n d vielfä ltig. A ngefa n g e n bei Spielarten, n ä m l ich ei ne, b e i der dem Cl ient
fi l e (GAP) i m p l e mentieren, d e n n das rea l i ­ einem Dienst, der ü ber den a ktu e l l e n Lade­ eine Q u itt u n g ü berm itte lt w i rd ( " write re­
siert d i e g r u n d legenden Z u g riffsmechan is­ zu sta nd der Batterie i n fo r m i e rt, bis h i n zu q uest "), und ei ne, bei der das n icht der F a l l
men und die Verwa l t u n g von Verb i n d u n ­ einem Dienst, der konti n u ierlich den Bl utzu­ ist ( " write command " o d e r " write without re­
g e n . Ü brigens l a s s e n s i c h P rofi l e per Soft­ ckerspiegel ü berwacht, ist schon eine ga nze sponse ") .
ware nachrüsten, was i n s beso ndere fü r den Menge d a bei. Ferner kö n n e n C l ients s i c h a utomatisch
ESP32 interessant ist. Dass es fü r besti m mte U m mit BLE-Diensten zu a rbeiten, i st es ü ber Verä nderu ng.e n des Wert�s einer Cha­
Profi l e heute noch kei n e I m p l e mentieru n g wichtig, Profi l e und deren Aufba u zu verste- ra kteristi k i nformieren lassen. Die dazugehö­
rigen Eigenschaften h e i ß e n N otifi kation
( " notify") u n d I n d i kation C,i n d icate " ). Eine No­
tifi kation m u ss der Client n i c h t q u ittieren,
eine I n d i kation hi ngegen schon. Darüber hi­
naus g i bt es noch eine ga nze Reihe weiterer
E1g e n schaften, wie zum Beispiel die B road­
cast-Eigenschaft, d i e festlegt, dass der Wert
Profi l Dienst Charakteristik
e i n e r C h a ra kteristik a u c h via B roadcast be­
ka nnt gegeben werden ka n n .
Zusätzlich zu d e n Eigenschaften speichert
d i e C h a ra kterist i k d e n tatsäc h l ichen Wert
u n d e i n e Liste opti o n a l e r Deskri ptoren, d i e
BLE-Profile haben eine hierarchische Struktur. d i e C h a ra kteristik noch weiter besc h reiben.

341 Make: ESP32 special 201 9


Bei spielsweise kö n n e n De�kri ptoren Werte­
bereiche ei nsch rä n ken oder Ausga beforma­
te defi n ieren.
Das klingt a l les h a l bwegs kom p l iziert, ist

('
B l eSe rve r . i no

1 # i n c l ude <BLEDev i ce . h>


I
i h der P raxis aber ganz ei nfa ch . Kon kret defi­ 2
0 3 c o n s t c h a r * S E R V I C E_U U I D = " 4 f a f c 2 0 1 - 1 f b 5 - 4 5 9 e - 8 f c c - c 5 c 9 c 3 3 1 9 1 4 b " ;
n iert der B l u etooth-Sta n d a rd im GATT-Profi l
('
4 c o n s t c h a r * t H A R A C T E R I S T I C_U U I D = '' b e b 5 4 8 3 e - 3 6 e 1 - 4 6 8 8 - b 7 f 5 -
z u m Beispiel e i n e n Dienst n a m e n s " Battery ea07361 b26a 8 " ;
Service " fü r d e n Ladezu sta nd der Batterie. r,
5
Die Chara kteristik des Dienstes hat die Lese­ 6 vo i d s e t up ( ) {
7 BLEDevi c e : : i n i t ( "Me i nESP32 " l ;
Eigenschaft u n d optional die N otify-Eigen­ (' 8 B L ES e r v e r * s e r v e r = B L E D e v i c e : : c r e a t e S e r v e r ( J ;
schaft. Der D i e n st l i efert e i n e n vorzeichen­ 9 B L E S e r v i c e * s e r v i c e = s e r v e r - > c r e a t e S e r v i c e ( SE R V I C E_U U I D l ;
.�
losen 8-Bit-Wert zwischen Oo/o u n d 1 00%, der 10 B L E C h a r a c t e r i s t i c* c h a r a c t e r i s t i c = s e r v i ce->
cr e a t e C h a r a c t e r i s t i c (
den Ladezusta nd der Batterie repräsentiert. ('-
11 C H A R A C T E R I S T I C_U U I D ,
12 B L E C h a r a c t e r i s t i c : : P R O P E R T Y_ R E A D I B L E C h a r a c t e r i s t i c : :
('
I m Dsc h u ngel zu rechtli nden P R O P E R T Y_W R I T E l ;
r
13 c h a r a c t e r i s t i c - > s e t V a l u e ( " -H a l l o , M a k e - M a g a z i n ! " ) ;
14 s e r v i c e -> s t a r t < > ;
Schon heute g i bt e s e i n e g roße Anza h l a n 15 s e r v e r -> s t a r t Adv e r t i s i n g ( ) ;
c
Diensten, Cha ra kteristiken u n d Deskri ptoren, 16
und in Zukunft werden gewiss noch ein paar r 17
1 8 vo i d Loop ( ) {
h i nz u kommen. Damit Cl ients sch n e l l u n d
'\ 19 d e l a y ( 2000 l ;
sicher feststellen kön nen, ob ein Server einen 20
bestim mten Dienst a n bietet, haben alle Bl ue­ 0

tooth-Entitäten nicht n u r einen Namen, son­


dern werden darü ber h i n a u s auch m it einer
U U I D ( U n iversa lly U n ique ldentifier) versehen. B L E-Server. D e r defi n i e rt e i n e n n e u e n Auf der g lobalen Ebene defi n iert das Pro­
Eine U U I D ist eine Za h l mit 1 28 Bit, a l so 1 6 D i e n st i n kl u s ive e i n e r C h a ra kte ristik u n d g ra m m zwei Ko nstanten fü r die U U I D des
Bytes. Diese Za hlen können mithi lfe d iverser bietet i h n C l ients i n der U mg e b u n g a n . Die nstes und der Chara kteristik. Diese U U I Ds
Algorithmen erzeugt werden und kön nen fü r D a s P rog ra m m b i ndet d i e B L E Device- Bi­ kö n nen beliebig gewä h l t werden, wei l der
viele Anwendu ngsfä l l e a l s eindeutig betrach­ b l iothek e i n, d i e a l les bietet, u m B L E-Server Dienst kei n Sta n d a rd-Dienst ist u n d auch
tet werden. Zwa r ist es d u'rchaus möglich, und C l ients i n vielen verschiedenen A u s p rä­ kei ne Sta nda rd-Cha ra kteristik verwendet.
dass ein und d ieselbe UUID zwei mal erzeugt g u ngen zu schreiben. Erfre u l ic h e rweise fi n­ Die eigentliche Arbeit fi ndet i n der s e t u p­
wird, aber dieser Fa l l ist eher unwa h rschein­ d e n sich dazu auch e i n i g e B e i s p i e l e i n der F u n ktion statt und sie macht mit der Funktion
lich u n d fü r viele Anwend ungen auch n icht Ard u i no- I DE. B L E D e v i c e : : i n i t den ESP32 i m Bluetooth-
releva nt.
Da rgestellt werden U U I Ds in der Regel a l s
Hexadezi malza h len m i t 3 2 Ste l l e n . Z u r Ver­ !9 l11 tllJ 0 ($) 11 !'J'l * . � ... 45 % . 1 0: 5 6 {9 l! LUJ 0 1!!1 ($) '"
;t . � .• 45 % . 1 0: 56
besserung der Lesbarkeit hat sich das Schema
8-4-4-4- 1 2 d u rchgesetzt und so sieht eine Devices D I S C O N N ECT D evices D ISCON N ECT .
typische UUID wie folgt aus: 1 23e4567-e89b-
1 2d3-a456-426655440000. ln dieser Da rstel­ M E I N ESP32
X M E I N ESP32
DEO ADVERTISER )ED ADVERTISER X
B4:E6:2D: B 9: C F: F3
l u ng benötigt die U U I D wegen der Bindestri­ B4: E6: 2D: B9: C F: F3

che 36 Zeichen. CONNEC ...


CLIENT SERVER
Zur Erze u g u n g von U U I Ds g i bt es jede BO N D EO :e • •
Menge Tools auf der Komma ndozeile oder in
Form von I nternet-Diensten. Auch bieten die
Generic Attribute P R I MARY S E RV I C E
meisten Prog ra m m iersprachen B i b l i otheken U U I D : Ox1 801
P R I M A RY S E RV I C E
Generic Access
zur Generierung von U U I Ds an. Wer a l so einen
U U I D : Ox1 800
neuen B l uetooth-Dienst entwickelt, ka n n sich Generic Access P R I M A RY SERV I C E
sch nel l und kosten los die dazu benötigten
U U I D : Ox1 800
U U I Ds·besorgen. Unknown Service
P R I M A RY S E R V I C E
Der Bl uetooth-Sta ndard verwendet zur U U I D : 4fafc201 -1 fb5-459e-8fcc-c5c9c331
Identifizierung von Diensten u n d Cha ra kteris­ Unknown Service 1 4b
tiken ü brigens U U I Ds, die n u r 1 6 Bits l a n g U U I D: 4fafc201 -1 fb5-459e-8fcc-c5c9c33 1 P R I MARY SERV I C E
s i n d . D a s macht die Spezifi kation etwas ü ber­ ..!. .!..
1 4b
Un�nown Characteristic
sichtlicher und es verei nfacht auch die Identi­ P R I MARY S E RV I C E
U U I D: beb5483e-36e1 -4688-b7f5-ea 07 ...
fizierung von Sta nda rd-Diensten fü r C l ients
P roperti es : READ, WRITE
und Server. Beispielsweise hat der Battery Ser­


vice die Kurz- U U I D Ox 1 80F.

Hat's gefun kt? •


Nach der ga nzen Theorie i m p l ementiert Lis­ n R F Connect findet BLE-Dienste in der Die eigens definierte Charakteristik sieht exakt
t in g BleServer. i n o m i t wenig Aufwa nd e i n e n Umgebung zuverlässig. so aus, wie sie definiert wurde.

Make: ESP32 specia l 201 9 l 35


BLU ETOOTH I-- I -- - ----

ß:J m A o I!! e ·· * . � .. . 45 % . 1 o : 5 6 (9 a 0 I!! I& 11 * � . . 42 % ..;. 1 1 :22

= Oevices D ISCO N N ECT 1 D evices D ISCON N ECT 1

DEO
M E I N ESP32 M E I N ESP32
DEO ADVERTISER X
B4"E6.20 89 CF-F3
ADVERTISER
B4:E6:2D: B 9 : C F : F3 X

CONNEC ... CONN EC . ..


CLIENT SERVER CLI ENT S E RV E R
B O N D EO LOA BONbEb
- -· · -· · - . · - - ----
Write value N EW
D l t\ JIVIJ-\ t\ T V C. f'\ l71
v 11T"
C:l"
E___

Hallo TE . . Generic Access


U U I D : Ox1 800
P R I MARY S E RV I C E

Unknown Service
U U I D : Ox1 800
A D D VA L U E P R I M ARY S E RV I C E

Unknown Service
U U I D : 4fafc20 1 -1 fb 5-459e-8fcc-c5c9c33 1

Save a s . . .
1 4b
P R I MARY S E RV I C E U U I D : 4fafc20 1 -1 fb5-459e-8fcc-c 5c9c33 1

Unknown Characteristic
1 4b
P R I M A RY S E RV I C E

Unknown Characteristic _!_ _!_


U U I D : beb5483e-3 6e1 -4688-b7f5-ea07 .. . Advanced V

P r o p e rt i e s : R EAD, W R I T E
Va l u e : ( Ox ) 48-6 1 -6C-6C-6 F-2C-20-4D-6
U U I D : beb 5483e-36e1 -4688-b7f5-ea07 ...
SAVE CANCEL SEND
P r o p e rt i e s : R EAD, W R I T E .

Va l u e : ( Ox ) 48-61 -6C-6C-6F, " H a l lo"


1 -6B-65-2D-4D-61 -67-6 1 -7 A-69-6E-21 ,
" H a l lo, M a ke-Magazi n ! "

• •
Auch der Wert der Charakteristik stimmt. Neue Werte zu setzen ist auch kein Problem. Der neue Wert steht sofort zur Verfügung.

Spektru m u nter dem Namen MeinESP32 be­ N a m e n M e i n ESP32 a u ft a u c h e n . Die F u n ktion F u n kwe l l e n reitet. Ferner bieten s i e eine g e­
ka n nt. Anschließend erzeugt sie einen neuen C o n n ect ve r b i n d et d i e A p p dann m i t dem n e r i s c h e B e n u tzu n g s s c h n ittste l l e, m i t d e r
Server und fü r den Server einen neuen Dienst. ESP32. Der n e u d efi n i e rte D i e n st trägt den s i c h z u m B e i s p i e l We rte b e l i e b i g e r Daten­
Dem Dienst wird dabei die zuvor festgelegte Namen " U n known Service", weil seine U U I D typen lesen und s c h re i b e n l a s s e n .
U U I D zugewi ese n . Zu beachten ist h i e rbei, n i c h t z u d e n b e ka n nten Service- U U I Ds ge­ F ü r reg u läre Ben utzer u n d rea l e Anwen­
dass die meisten F u n ktionen der BLE-Bibl io­ h ö rt. Ü ber d i e U U I D, d i e i m Prog ra m m verge­ d u n g e n t a u g e n A p p s wie n R F C o n n ect h i n­
thek Zeiger auf Objekte zurückgeben. Bei­ ben wu rde, lässt er s i c h a be r trotzd e m e i n ­ g e g e n n i c h t. H i e r m u s s s c h o n e i n e e i g e n e
spielsweise l iefert B L E D e v i c e : : c r e a t e S e r v e r wa n dfre i erke n n e n . Anwe n d u n g h e r u n d d a s ist d a n k a ktue l l er
einen Zeiger auf ein B L E s e r v e r -Objekt . E i n K l i c k auf den Dienst zeigt d i e C h a r a k­ Tec h n o l o g i e n nicht m e h r g a n z so ko m p l i ­
I m weiteren Ve rl a u f erzeugt d a s P ro­ terist i k des D i e n stes a n . A u c h s i e lässt s i c h z i e rt w i e n o c h v o r e i n p a a r J a h re n .
g r a m m e i n e C h a ra kte r i st i k m i t d e r zu A n ­ ü be r d i e U U I D i d e n t ifizieren u n d hat d i e Zu e i n e m g uten u n d n ützl ichen C l ient g e­
fa n g fe stg e l eg t e n U U I D u n d d e n S c h r e i b­ E i g e n s c h afte n Lesen ( R EAD) u n d S c h re i ben h ö rt a b e r a u c h e i n s i n nvo l l e r Server. Listi ng
u n d Lese- E i g e n s c h afte n . D i e C h a ra kte r i s t i k (WRITE) . Ein Klick a u f d e n k l e i n e n Pfe i l , der B l eServe r. i n o vera n sc h a u l icht zwa r g ut, wie
erhä l t den Wert " H a l lo, M a ke-Magazi n ! ". nach u nten zeigt, fö rdert d en a kt u e l l e n Wert man eigene C h a ra kteristi ken d efi n ieren
Sch l i e ß l i c h w i rd s owo h l d e r D i e nst a l s zutage. Mit dem lcon, dessen Pfe i l n a c h oben ka n n , a be r d i e gesendeten Daten s i n d pro­
a u c h d e r Server gesta rtet. A b d i es e m M o­ wei st, lässt sich ein neuer Wert fest l e g e n . pri etä r u n d kö n n e n von Werkze u g e n wie
ment kö n n e n C l ients in d e r U m g e b u n g d e n D a z u m u s s m a n z u e rst d e n T y p des Werts nRF Co n n ect nur a n g ezeigt u n d n i cht i nter­
neuen Dienst fi n d e n . Weil a l l d i ese Akt i o n e n a u swä h l e n , was in d i esem F a l l Text i st. Zwa r p retiert werd e n . D a h e r wä re e i n B LE-Server
i m H i n terg r u n d a u s g efü h rt werd e n , ka n n ka n n m a n d e n Wert a u c h in Form h exadezi­ h i lfre ich, der auf e i n e n der Sta nda rd-Dienste
sich d i e l o o p - F u n kt i o n sch lafe n l e g e n . mal kod i e rter Bytes ei n t i p p e n , a be r das ist der B l u etooth-S pezifi kation setzt.
Um d a s Prog ra m m zu testen, benötigt m a n schon etwa s u m stä n d l i c h . A l s Beispiel-Anwe n d u n g d rängt sich gera­
einen BLE-Ciient u n d d a z u e i g n et s i c h e i n Hat m a n e i n e n n e u e n Wert e i n g egeben, dezu auf, d i e Werte eines H DC l 008-Sensors
Smartphone a m besten. A l l e rd i n g s feh l t noch w i rd e r d i re kt ü be rn o m m e n . Sch ritt fü r d ies m a l n icht per WLAN u n d HTIP, sondern
eine passende App und wäh rend der Entwick­ Sch ritt ka n n m a n sich so in e i n e m u n beka n n­ per B l u etooth Low E n e rgy zu vertei l e n .
l u n g ist es s i n nvo l l , einen generischen B l ue­ ten BLE-Dienst o rientieren oder a b e r p rüfen, Wen i g ü berrasc hend defi n i e rt der B l u etooth­
tooth-Ciient zu verwenden, der m i n utiös da rü­ o b der e i g e n e D i e n st s i c h C l i e nts gegen ü be r Sta n d a rd bereits e i n e n Dienst fü r solche U m­
ber Ausku n ft g i bt, was sich auf der Luftsch n itt­ g e n a u s o p räsentiert, wie es g e d a c h t war. weltse nsoren. Der Dienst hat den N a m e n En­
stelle gerade so tut. Sowo h l u nter iOS a l s a u c h vironmental Sensing und d i e I D Ox 1 8 1 A. I n­
u nter Android ist n R F Connect eine g ute Wa h l . Geht das au.ch in schön? nerha l b des D i e n stes g i bt es e i n e l a n g e Liste
Wichtig i s t e s , sowo h l Bluetooth a l s auch B L E m ö g l i c h e r Charakteristiken u n d d i e fü r Te m­
i n d e n Einstel l u ngen d e s S m a rtphones zu a k­ Zu D e b u g g i n gzwecken s i n d A p p s w i e n R F pera t u r und Luftfe u c h t i g keit h a b e n die I Ds
tivieren, wen n das noch nicht geschehen i st. C o n n ect u n verzi c h t b a re H e l fe r, d e n n s i e Ox2A6E bezi e h u n g sweise Ox2A6F. Weitere
Sucht man i n der App nach Geräten i n der geben b i s a u fs B i t g e n a u d a r ü be r A u s ku nft, Sensoren lassen sich bei Bed a rf leicht nach­
Umgebung, sol lte d e r E S P 3 2 u nter dem was in d e r nä heren U m g e b u n g g e r a d e d i e rüste n .

36 1 Make: ESP32 special 20 1 9


Listing BleSensor.i n o i m pl ementiert einen (" '

c
B LE-Sen sor, d e r d i e Daten eines HDCl 008-
Sensors konti n u ierlich a u s l iest und a n seine B l eSensor . i no
Umgebung sendet. Die Ü bertra g u n g erfolgt
mithi lfe des Sta n d a rd-Dienstes, so dass a l l e 1 # i n c l ude < BL E D e v i c e . h>
2 # i n c l ude. <BL E S e r v e r . h>
Clients, d i e dessen P rotoko l l e i m plementie­
3 # i n c l ude <BLEUt i l s . h>
ren, die Daten verstehen kön n e n . 4 # i n c l ud& <BLE2902 . h>
D a s Prog ra m m i s t n icht ü bermäßig lang, 5 # i n c l ude < A d a f r u i t _H D C 1 0 0 0 . h >
n u tzt a ber einige n e u e F u n ktionen und r 6
7 A d a f r u i t_H D C 1 0 0 0 s e n s o r = A d a f r ui t_H D C 1 0 0 0 C l ;
F u n ktional itäte n . Der Anfa n g wirkt jedoch
8
vertra ut, denn d o rt werden nur alle benötig­ 9 B L E D e s c r i p t o r h u m i d i t y D e s c r i p t o r ( B L E U U I D C C u i n t 1 6_t l O x 2 9 0 1 l l ;
ten Bibl iotheken eingebunden und ein g loba­ 10 B L E D e s c r i p t o r t e m � e r a t u r e D e s c r i p t o r ( 8 L E U U I D ( ( u i n t 1 6_ t J O x 2 9 0 1 l l ;
les Objekt der Klasse A d a f r u i t ....: H D C 1 0 0 0 de­ 11
12 BLECha racteri sti c humi di tyCha racteri st i c (
fi niert, das zum Auslesen des HDCl 008-Sen­
13 B L E U U I D ( ( u i n t 1 6_t l 0 x 2 A 6 F l ,
sors dient. 14 B L E C h a r a c t e r t s t i c : : P R O P E R T Y_R E A D I B L E C h a r a c t e r i s t i c : :
Dan n folgen weitere globale Variablen, die P R O P E R T Y_N O T I F Y l ;
g rößtentei l s zur Defi n ition der BLE-Chara kte­ 1 5 B L E C h a r a c t e r i s t i c t empe r a t u r e C h a r a c t e r i s t i c (
16 B L � U U I D ( ( u i n t 1 6_t l 0 x 2 A 6 E l ,
ristiken dienen. Die ersten beiden sind I n sta n­
17 B L E C h a r a c t e r i s t i c : : P RO P E R T Y R E A D I B L E C h a r a c t . r i s t i c : :
zen der Klasse B L E D e s c r i p t o r. Sie werden im P R O P E R T Y_N O T I F Y l ;
-
-

weiteren Verla uf verwendet, u m die Charakte­ 18


ristiken mit textuellen Beschreibungen zu ver­ 1 9 b o o l b l e C l i e n t C o n n ec t e d fa lse;
sehen, die der Cl ient den Benutzern anzeigen 20
2 1 c l a s s MyServerCa llbacks pub l i c BLEServe rCa l lbacks
ka n n . Dazu sieht der Sta ndard die I D Ox290 1
22 v o i d o n C o n n e c t ( B L E S e r v e r * s e r v e rl {
vor, die zur Konstru ktion der beiden Objekte 23 b l eC l i ent Connec t ed = t rue;
verwendet wird. Al lerdings kan n die Kurzform 24 };
der U U I D nicht d i rekt verwendet werden, son­ 25
26 vo i d o n D i sconne c t ( B L E S e rver* s e r ve r )
dern muss m it dem Ma kro B L E U U I D in d i e
27 b l eC l i ent Connec t ed = fa l se ;
richtige F o r m gebracht werden. 28
Die zwei Objekte der Klasse B L E C h a r a c t e ­ 29 };
r i s t i c werden auf ä h n l iche Weise konstru­ 30
3 1 voi d s e t up ( ) {
iert, d ienen a ber e i n e m g ä nzlich a n d e ren
32 S e r i a l . be g i n ( 1 1 5200 ) �
Zweck. Sie werden zur Defi n ition der Chara k­ 33 i f ( ! s e n s o r � b e g in ( O x 4 3 ) ) {
teristiken des Dienstes benötigt u n d enthal­ 34 S e r i a l . p r i n t l n ( " Ko n n t e T e m p e r a t u r s e n s o r n i c h t f i n d e n . " ) ;
ten spä�er neben den Deskriptoren auch die 35 I / return;
I nformationen über d i e Tem perat u r u n d die 36
37 Seri a l . pr i n t l n ( "Sensor wi rd i n i t i a l i si e rt . " l ;
Luftfeuchti g keit. Der Sta nd a rd sieht fü r d i e
38 I I s e n s o r . d r y S e n s o r O ; ·1 1 B r a u c h t 1 5 S e k u n d e n !
Tem peratur d i e I D Ox2A6E u n d fü r die Luft­ 39
feuchtigkeit die ID Ox2A6F vor. Zusätzlich zur 40 B L E D e v i c e : : i n i t ( " E S P3 2- S E N S O R " l ;
U U I D muss die Chara kteristi k a ber auch fest­ 41 BLESe rve r* server = BLEDevi ce : : c reateServer C l ;
42 s e r v e r -> s e t C a l l b a c k s ( n e w M y S e r v e r C a l l b a c k s C l l ;
legen, auf welcheWeise Clients auf die Daten
43 B L E S e r v i c e * s e r v i c e = s e r v e r ->
zug reifen können. l n d iesem Fall ist das lesend \
c r e a t e S e r v i c e ( B L E U U I D ( ( u i n t 1 6_ t l O x 1 8 1 A l l ;
oder per Notifi kation möglich. 44
45 h um 1 d i t y D e s c r i p t o r . s&tVa l u e ( " Lu f t f e u c h t e 0- 1 0 0% " ) ; .
46 humi d i tyCha racte r i s t i c . addDescri ptorC&humi di tyDescr i ptor l ;
C a l l backs 47 h u mi d i t y Ch a r a c t e r i s t i c . a d d D e s � r i p t o r ( n e w B L E 2 9 0 2 C l l ;
48 s e r v i c e�>a d d C h a r a c t e r i s t i c C & h um i d i � y C h a r a c t e r i s t i c l ;
Die Boolesche Va riable b l e C l i e n t C o n n e c t e d 49
zeigt den a ktu e l l e n Verbi n d u ngsstatus a n . 50 t empe r a t u r e D e s c r i p t o r . s e t Va l u e ( " Tempe r a t u r -40- 1 2 5 ' C " l ;
-
51 t e m p e r a t u r e C h a r a c t e r i s t i c . a d d D e s c r i p t o r < & t e m pe r a t u r e D e s c r i p t o r l ;
Wen n d e r ESP32 gerade m i t einem Client ver­ (' . 52 t empe r a t u r e C h a ra c t e r i s t i c . a d d D e s c r i p t o r ( ne� B L E 2 90 2 C l l ;
bunden ist, hat sie den Wert t r u e , sonst den 53 s e r v i c e - > a·d d C h a . r a c t e r i s t i c ( & t e m p e r a t u r e C h a r a c t e r i s t i c ) ;
Wert l a l s e. Das fu n ktioniert n icht a utoma­ 54
tisch, sondern muss mithi lfe von CaH back­ 55 s e r v i c e-> i t a r t ( l ;
F u n ktionen erledigt werden. Die defi n iert die 56 s e r v e r -> s t a r t A d v e r t i s i n g C l ;
57 }
Klasse M y S e r v e r Ca l l ba c ks, die von der Klas­
58
se B L E S e r v e r C a l l B a c k s a bgeleitet wird. 5 9 vo i d loop ( ) {
Die Klasse enthält die Fu n ktionen o n C o n ­ 60 i f ( b l e C l i ent Conne c t e d l
n e c t u n d o n D i s c o n n e c t , d i e i m me r d a n n 61 c o n s t u i n t 1 6_t h u m i d i t y = 5 0 ;
62 � o n s t i n t 1 6_t t e m p e r a t u re = 5 0 ; _
a ufgerufen werden, w e n n e i n e Verbi n d u n g
63. h u m i d i t y C h a r a c t e r i s t i c . s e t V a l u e ( ( u i n t 8_t * l & h u m i d i t y , Z l ;
miteinem Cl ient hergeste l l t bezi e h u n g swei­ 64 humi d i t yC h a r a c t e r i s t i c . no t i f y C l ;
-
se a bgebaut w u rde. Sie setzen den Wert der 65 t e m p e r a t u r e C h a r a c t e r i s t i c . s e t V � l u e ( ( u i n t 8_t * l & t e m p e r a t u r e , Z l ;
Va ria blen b l e C l i e n t C o n n e c t e d entspre­ 66 tempera tureCharacte r i st i c . no t i fy� l ;
67
chend. Beide F u n ktionen erha lten einen Zei­
68 d e l ay C 500 l ;
ger auf das B L E S e r v e r-Objekt, das die Ver­ 69 }
b i n d u n g a u f- bezieh u ng sweise abgebaut

Make: ESP32 special 201 9 1 37


B LU ETOOTH �---------
hat. F ü r d e n vorl i e g e n d e n Anwe n d u n g sfa l l e rfa h re n . Der Text ka n n frei gewä h l t werd e n zwei Bytes, die eine vorzeichenbehaftete u n d
wird d ieser Para m eter a be r n icht benötigt. u n d m u s s d a h e r n i cht u n be d i n g t s i n n vo l l e eine vorzeichen l ose Za h l repräsentieren, vers­
Damit d e r g a nze Mecha n i s m u s fu n ktio­ I nfo r m a t i o n e n e n t h a l t e n . e n d et. Die Klasse 8 L E c h a r a c t e r i s t i c hat
n ie rt, m u s s noch e i n O bj e kt d e r Klasse M y ­ Der zweite Deskri ptor h a t d i e I D Ox2902 daher eine s e t V a L u e - F u n ktion, d i e neben
ServerCa l lbacks bei m e n t s p rec h e n d e n und die ste ht fü r C l i e n t C h a ra cte ristic Co nfi­ einem u i n t 8_ t -Zeiger auch noch d i e Anza h l
8 L E s e r v e r-Objekt reg i striert werd e n . D a r u m g u ration (CCCD). Mit d i esem Deskriptor hat der zu ü bertragenden Bytes erwa rtet.
k ü m m ert sich d i e s e t u p - F u n ktion, d i e a be r der C l i e n t d i e M ög l i c h keit, das S e n d eve r h a l ­ S c hl i e ß l i c h sorgt die n otify- F u n kt i o n
erst e i n m a l d i e serie l l e Sc h n ittste l l e u n d den ten des Servers zu ste u e r n . I m vo r l i e g e n d e n dafü r, d a s s d i e n e u e n We rte a u c h ü be r d i e
H D C 1 008-Sensor i n it i a l i s ie rt. H i e r g i bt es kei­ F a l l ka n n d e r S e rver Sen s o r-Daten ü be r d e n Luftsc h n ittste l l e beka n n t gemacht werd e n .
nerlei U ntersch iede zu r WLAN -Va ria nte u n d N otifikati o n s m e c h a n i s m u s a n e i n e n ve r­
w i e a u c h d o rt e m pfie h l t es s i c h , den Aufruf b u n d e n e n C l i e n t verte i l e n . Wei l d i eses Ver­ Ein erster B l i c k
der F u n kt i o n d r y S e n s o r wä h re n d der Ent­ ha lten, bei dem pote n z i e l l v i e l e Datenpa ke­
wickl u n g a u szukommentieren. te g e s e n d et werden, fü r m a n c h e C l ients u n ­ D a s P r o g ra m m i st n i c h t a l lzu l a n g u n d tut
Nur geringe U ntersc h i ede g i bt es bei der erwü n s c h t i st, l ä sst es s i c h ü be r d e n CCCD im G r u n d e auch n i c h t s S p e kta k u l ä res u n d
l n it i a l i s i e r u n g d e r B l u etooth-Ko m m u n i kati­ e i n - u n d a u ss c h a l t e n . d o c h i s t d i e i m p l izite Ko m p l exität h o c h .
o n . Dies m a l o p e r i e rt d e r ESP32 u nter dem N a c h d e m d i e beiden Chara kteristiken kon­ Bevor man a l so einen passenden C l ient
N a m e n E S P 3 2 - S E N S O R und w i e a n g e k ü n ­ fi g u riert w u rden, sta rtet die � e t u p - F u n ktion b a u t, ist es ratsa m, m i t g e n e ri s c h e n Werk­
d i g t w i rd d a s Obj e kt d e r Klasse M y s e r v e r ­ sowo h l den Dienst a l s auch den Server. ze u g e n , w i e z u m B e i s p i e l n R F C o n n ect,
c a L L b a c k s bei m B L E-Server reg i striert. A n ­ Die L o o p- F u n ktion trägt jetzt n u r noch i n s i c h e rzuste l l e n , dass a u c h die richtigen Bits
·

sch l i e ß e n d w i rd e i n D i e n st m i t d e r I D reg e l m ä ß i g e n A bstä nden d i e a ktu e l l e n Sen­ ü be rtra g e n werd e n .


Ox1 8 1 A ( E n v i ro n m e nta l S e n s i n g ) e rze ugt. sor-Daten in die C h a ra kteristiken ein. Dazu Das ist sc h n e l l erledigt u n d nachdem m a n
Dem D i e n st s e l bst w e r d e n d a n n zwei prüft sie z u n ä c h st, ob ü berha u pt ein C l i e n t s i c h m i t d e m G e rät n a m e n s ESP32-SENSOR
C h a r a kteristiken - eine fü r d i e Te m pe ratu r mit dem Server verbu nden i st. Ist dies der F a l l , verb u n d e n hat, zeigt nRF Con nect a n , dass
u n d e i n e fü r d i e Luftfe u c h t i g keit - zugewie­ l iest sie d i e Sensor-Daten aus, m u lt i p l iziert sie es d e n Environmental S e n s i n g -D i e n st gefu n ­
sen. Die C h a r a kteristiken entha lten wieder­ m i t 1 00 u n d weist s i e Va ria b l e n vom Typ d e n h a t . We n n m a n d e n d u rc h e i n e n K l i c k
um jewe i l s zwei Deskri pto ren. Der erste De­ u i n t 1 6_ t bezi e h u n g sweise i n t 1 6_ t zu. expa n d i e rt, ersc h e i n e n d i e C h a ra kteristi ken
skriptor ist vom Typ Ox290 1 ( C h a racteristic Dabei werden etwa ige N a c h ko m maste l l e n fü r die Tem pe rat u r und die Luftfeuchtigkeit.
User Descri pti o n ) und besc h re i bt d e n I n h a l t a bgesc h n itten . Die C h a ra kteristiken s e l bst lassen s i c h
des S e n s o rwerts etwa s g e n a u e r . Z u m B e i ­ D i e s e Form der Aufbereitung ist n otwen­ w e i t e r a ufkl a p pen u n d so ka n n m a n d i e
s p i e l kö n n e n C l i e n t s fü r d e n Te m peratu r­ dig, wei l d i e Messwerte gemäß der Spezifi ka­ zuvor festgelegten Besch rei b u n g e n a u s d e n
We rt den Text " Te m peratu r -40- 1 2 5 °(" a n ­ tion i n exa kt d iesem Format ü bertragen wer­ Deskri ptoren u n d d i e a ktu e l l e n Sensorwe rte
ze i g e n . D a m i t kö n n e n N u tze r etwas m e h r den m ü ssen. Das hei ßt, sowo h l die Tem pera­ lesen. Es g i bt sog a r e i n lcon, mit dem sich der
ü be r d e n S e n s o r u n d s e i n e E i g e n s c h afte n tur a l s a uc h die Luftfeuchtig keit jewe i l s a l s Notifi kat i o n s m e c h a n i s m u s a ktivieren l ä s st,

II ® :t • <' .• 66 % • 1 2: 3 5 I I I!! ® :t • <' .• 66 % • 1 2: 3 6 II I!! ® :t • <' .• 66 % • 1 2:37

= Devices DISCON N ECT l = Devices D I S CO N N ECT l D evices D I S CO N N ECT l

ESP32-SENSOR ESP32-S E N S O R
ESP32-SENSOR ED ADVERTISER X >ED A DVERTISER X
DEO ADVERTISER
84 E6 20 89 CF F3 X 84 E6 20_ 8 9 C F · F 3 B4: E6: 2 D B9 : C F: F3

CONNEC ... . CONNEC ... CONNEC ...


CLI ENT S E RVER CLIENT SERVER C UE N T SERVER
B O N D EO B O N D EO B O N D EO
- - - ---- - -- - · · .- ·· - · · ----

Generic Attri bute Environmental Sensing U U I D : Ox29 0 1

U U I D : Ox1 801 U U I D : Ox1 8 1 A G l ient Ghara cteri stic Gonfiguration .!.


P R I M A RY S E RV I C E P R I MARY S E RV I CE U U I D : Ox2902

Generic Access
Temperature H um idity .!. _...
U U I D : Ox2A6E U U I D : Ox2A6F
U U I D : Oxl 800
P rop ert i e s : NOTIFY. READ P r o p e rt i e s : N OTI FY, READ
P R I M A RY S E RV I C E
Descrlptors:
.!. ..!.
Va l u e : 30.00%
Environmental Sensing Characteristic User Descriptors:
.!. ..!.
U U I D : Oxl 81 A Description
Ghara cteristic User
P R I MARY SERVl C E U U I D : Ox2901 .
.!.
Description
Cl ient Ghara cteristic Gonfiguration U U I D : Ox2901
U U I D : Ox2902 Va l u e : Luftfeu chte 0-1 00%

Humidity .!. _... C l i ent Ghara cteristic Gonfi g u ration .!.

• •
U U I D : Ox2A6F U U I D : Ox2902
P rop ert i e s : N OTI FY, READ

nRF Connect erkennt den Environmentai­ nRF Connect kann auch die gesendeten Die Sensor-Daten zeigt nRF Connect
Sensing-Dienst auf dem ESP32 sofort. Charakteristiken i nterpretieren. ebenfalls an.

3 81 Make: ESP32 special 20 1 9


0 (fJ :t : � (fJ :t (fJ *
������

� !!II .. . 62 % • 1 3 : 1 6 � !!II 0 · ""' -" 62 % • 1 3 : 1 6 � !!II 0 . ."". " 62 % . 1 3 . 1 6

� BLE TOO L . i ronmenta l Sensi r@ . iron menta l Sensi r@


Te m perature
Env i ro n menta l
D etected C h a racterist i c

®a
ESS Sen s i ng Tem peratu re

H u m i d ity
ES M e a s .

Flags

S a m p l i n g Fu n c .

M e a s . Period

Upd ate I nterv a l

BLE Tool erkennt sofort, dass auf dem ESP32 der Beide Charakteristiken werden von BLE Tool B L E Tool kann n u r d i e Temperatur lesen, bereitet
Environmentai-Sensing-Dienst läuft. erkannt. sie aber nett auf.

so d a s s d i e Werte a u tomatisch a ktu a l i s i e rt h a be n , a u f der sie l a ufe n . A u s S i c h t der S i · s o n d e r s gut u n d e i nfa c h fu n kt i o n i ert d i es
werd e n . c h e r h e i t ist d i ese E i n s c h rä n ku n g n a c h vo l l ­ m o m e ntan mit Goog les C h rome-Browser.
Es g i bt a u c h A p ps, wie z u m Beispiel B L E ziehbar, a be r es macht d i e Plattform fü r man­ Der zeigt u nter der URL ch rom e://bluetooth­
Tool, die Sta n d a rd-Dienste etwas a n sprechen­ c h e h a rdwa re n a h e n Anwe n d u n g e n h ö c h st i nterna l s/ zum Beispiel m e h r I nfo rmati onen
der visua l i sieren kön n e n . BLE Tool spielt klag­ u nattra ktiv. ü be r B l u etooth-Ad a pter u n d -Geräte an, als
los mit dem ESP32 zusa m m e n und erke n nt Da n ke n swerterweise g i l t d iese E i n sc h rä n ­ manch d e d i z i e rtes B l u etooth-To o l . Das g i l t
den Environmentai-Sensi ng-Dienst u n d seine k u n g n i c h t fü r B l u etooth, d e n n es g i bt d e n sowo h l fü r den Desktop a l s a u c h fü r die mo­
beiden Chara kteristiken. Zurzeit ka n n d i e App Web B l u etooth-Sta n d a rd, den m e h rere b i l e Versi o n .
a ber nur die Tem peratur a nzeigen. B rowser bereits u nterstütze n . M itte l s Web­ Prinzi p i e l l sol lte W e b B l u etooth mit a l l en
B i u etooth ist es mög l i c h , per JavaScri pt mit G e räten fu n kt i o n i eren, die B l u etooth 4.0
M arke Eigenbau B l uetoot h - D i e n sten zu kom m u n izieren. Be- oder h ö h e r i m p l e m entieren. Die Web- B i ue-

Letzten Endes w i rd m a n fü r d i e meisten P ro­


j e kte a be r eine e i g e n e Anwe n d u n g benöti­
gen, d i e i m g ü n stig sten Fall nicht nur a u f ver­
schiedenen S m a rt p h o n es, sondern a u _!: h a u f
dem PC oder Mac l ä uft. D a m i t fa l l e n native ANONYM E FUN KTIONEN U N D
Apps fü r A n d roid oder iOS schon m a l d u rc h s
Raster, _ de n n d i e l a ufe n n u r auf S m a rtphones
u n d s i n d obendre i n a u c h schwierig zu entwi­
LAMBDA-AUSDRÜCKE
c ke l n und zu ve rte i l e n . Entwickl u n g s u m g e­ Das Konzept d e r a nonymen F u n kt i o n e n bezi e h u n g sweise a n a n d e re F u n ktionen
b u n g e n wie Th u n ka b ,l e u n d App l nventor l i n ­ kom m t a u s d e r fu n kt i o n a l e n Prog ra m ­ ü bergeben. Der Begriff Lam bda-Aus­
d e r n a n fa n g s den g rö ßten S c h m e rz, kö n n en m i e r u n g . Verei nfacht g e s a g t defi n i e rt d ru c k steht syn o n y m fü r a n o nyme
a be r l ä n g st n icht a l l e Probleme nativer Apps m a n e i n e a nonyme F u n kt i o n a n d e r Stel ­ F u n kt i o n e n und h a t seinen U rs p r u n g im
lösen. l e , wo m a n s i e b e i d e r i m perativen P ro­ La m ba-Ka l kü l , e i n e r fo r m a l e n Sprache
E i n e s i n nvo l l e Altern ative s i n d Web-An­ g ra m m ie r u n g a ufrufen wü rde. A n statt zur U nters u c h u n g von F u n kt i o n e n .
wen d u ngen, d i e auf HTM LS, CSS3 u n d Java­ a l s o e i n e F u n kt i o n sepa rat zu d e k l a rieren
Wer b i s l a n g i n C oder C + + pro g ra m m iert
Script basieren. Sie l a ufen ü bera l l dort, wo ein und zu defi n i e ren, s c h re i bt man s i e e i n ­
hat, benötigt e i n e Wei l e, um sich an ano­
moderner Web-Browser l ä uft, sind ei nfach zu fac h d o rth i n , wo m a n s i e benötigt.
nyme F u n ktionen zu gewö h n e n . Sie ma­
entwicke l n und kö n ne n leicht a n die u n ter­
Pri nzi p i e l l ka n n man d iese F u n kt i o n e n chen Code aber we n i g e r feh leranfä l l ig
schied l ichsten Clients verteilt werden.
ü be r Refe renzen o d e r Zei g e r a n s prec h e n u n d lesbarer.
Ihr g rö ßtes M a n ko i st, dass sie kei n e n 'u n­
e i n g esch rän kte n Z u g riff a u f d i e H a rdwa re

Ma ke: ESP32 special 20 1 9 l 39


BLU ETOOT H � I ---- -- -- --- ------ -----------

[j Bluetooth lntema!s '


·
+ •• e ® (§) 1 3: 1 3
I �:e6:2d:b9:cf:ß @ ;
m
� 7 C 8 Chrome c h rome-J/bluetooth-i ntemalsfil'devices V
ome:// b l u etooth-interna l s
Bluetooth ESP32-SENSOR j Oisconnect I Forget I
I nternals
Status
- ESP32-S E N S O R J Dlsconnect ]j Forget ]
Adapter
Name: ESP32-SENSOR
Dev1ces
Address: B4:E6:2 0: B9:Cf: fl Status
ESPl2·SENSOR
GATT Connected: Connected Name: ESP32-SENSOR

Latest RSSI: U n known Address: B4:E6:20:B9:CF:F3

Services: 3
GATI Connected: Connetted

-70
Services
Latest RSSI:

Services: 3
Serv•ce

Services
00001801 -0000-1 000-8000-0080Sf9b341b

Service li'lfo

1 0: B4:E6:20: B9:Cf: f3/00001 801 ·0000· 1 000-8000-0080Sf9b341b_OOO 1

U U I O: 00001 80 1 -0000- 1 000-8000-0080Sf9b34fb

Type: Pri mary

Characterlstics

Charactenst1c
00002aOS-0000-1000-8000 0080Sf9b34fb

Chracterlstlc Info

1 0: B4:E6:20:B9:Cf: f3/00001 801 ·0000· 1 000·8000·0080Sf9b34fb_000 1 /00002a05·0000· 1 000·8000-00805f9b341b_0002


Auch in der mobilen Version ist Chrome in Bezug
U U I O: 00002aOS-0000·1 000·8000·0080Sf9b34fb
auf Bluetooth auf dem neuesten Stand.

Propertles �
tooth-S c h n ittste l l e ist e i n i g e r m a ß e n kom­
Chrome gibt bereitwillig Auskunft über Bluetooth-Geräte in der Umgebung.
p a kt und Goog l e bietet i m N etz jede Menge
B e i s p i e l e , i n sbeso n d e re fü r B l u etooth Low
E n e rgy ( https://g o o g l e c h ro m e . g i t h u b.io/

0 We b B l u etooth I C haracteristic sa m p l es/web-bl u etooth/) . M i t d i esen Bei­


s p i e l e n ka n n m a n u nter a n d erem s�hon die
P rope rties S a m p i e M eta-Daten des E n v i ro n m entai-Sen s i n g ­
D i e n stes a uf d e m E S P 3 2 a u s l e s e n (https://
Available i n Chrome 48+ 1 View o n GitH u b 1 B rowse S a m P-Ies
g o o g l e c h rome.g i t h u b.i o/sa m p l es/web-b l u e
tooth/read-descri ptors. h t m l ? service= O x 1 8 1
The Web B l u etooth AP I Iets websites d iscover and com m u n i cate with devices over the a&cha racte ristic= Ox2a6e).
Bluetooth 4 wireless sta ndard using the Genarie Attribute Profil e (GATT). lt is currently
partially i mplemented i n Android M , Ch rome OS , Linux, and Mac.
Viele Versp re c h u n gen
This sample i l l ustrates the use of the Web B l u etooth API to d i splay al l properlies of a
specific characteristic from a nea rby B l u etooth Low Energ y Device. You may want to try Spa n 11ender i st es natürlich, e i n e eigene An­
th is demo with the BLE Peri phera l S im ulato r A pp from the Googfe Play, Store and check wen d u n g zu s c h reiben und dazu benötigt
out the Characteristic PröP-ertie� (A§y,nc Await) sampl e . m a n nur e i n wenig HTM L und JavaScript. Eine

loc::x.:.:.1:.c
8 1.::.
a.
____ __JI c
lox=-2::..:
•6.::.•. ____ __JI I Get Bluet�ot.h characteristic prope rties I Beispie l-Anwe n d u n g sol l konti n u ie r l i c h d i e
Te m peratu r-Werte a l s N otifi katio n e n vom
ESP32 e m pfangen und da rste l l e n . Als Ben ut­
Live Output z u n g s s c h n ittste l l e d i e n e n eih Sta rt- und e i n
Stop-Button, u m den Em pfa n g der Werte z u
R e q u e s t i n g B l uetooth Dev i c e . , . .
starten bezi e h u n g sweise zu stoppen. U m d a s
C o n n e c t i n g t o GATT S e r v e r . . .
Gett i n g S e r v i c e . .. .
Beispiel mögl ichst ü bersichtlich zu gesta lten,
Gett i n g C h a r a c t e r i s t i c . . . zeigt es die Luftfeuchti g keit nicht a n .
> C h a r a c t e r i s t i c UUI D : 00002a6e - 0000 - 1000 - 8 000 - 00 8 0 5 f9b 34fb
Das ku rze Listi n g i n d ex. html defi niert d i e
> Broadc ast : false
> Read : true Oberfläche der Anwend u n g mit ei nfachsten
> Write w/o r e s po n s e : false M itte l n . Die a ktu e l l e Tem peratur steht i m Ele­
> Write : false
ment mit der ID tem peratu re Lind die beiden
> Not ify : t rue
> I n d i c at e : false Butto n - E l e m e nte d i e n e n zum Starten u n d
> S i gned W r i t e : false Stoppen d e r Kom m u n i kation. Am Ende d e s

Aux i l i a r i e s :
> Queued W r i t e : false
Dokuments w i rd d i e Datei notifications.js ge­
> Writable false
laden, die die eigentliche Arbeit erled igt.
Der JavaScri pt-Code besteht i m Wesentli­
Mit den Google-Beispielen kann man auf den ESP32 zugreifen. chen a u s d rei F u n ktionen u n d einer g lobalen

40 I Make: ESP32 special 20 1 9


Va riablen n a m e n s m y C h a r a c t e r i s t i c , in der
d i e Tem peratu r-C h a r a kterist i k gespeichert
wird. Die F u n ktion a n s t a r t B u t t o n C l i c k w i rd
i ndex . htm l
a ufg e rufen, we n n d e r Sta rt-Button a ktiviert
1 < l doctype h t m l >
wird. Sie defi n i ert zwei Va riablen fü r die U U I Ds 2 <html lang="en">
des Environmental Sensing-Dienstes u n d der 3 <head>
Tem peratu r-C h a ra kteristi k. Da n n sucht sie 4 <me t a c h a r s e t � " u t f -8 " >
5 < t i t l e > B l u e t o o t h L 'o w E n e r g y - S e n s o r < / t i t l e >
nach B l u etooth-Geräten i n der Nähe. 6 </head>
I m Browser ka pseit d a s O bj e kt n a v i g a ­ 7 <body>
t o r . b l u e t o o t h d e n B l u etooth-Ad a pter des 8 <p i d= " t empe r a t u r e " > O . O &#xOObD ; C < / p>
9 < b u t t o n i d = " b t n_s t a r t " > S t a r t < / b u t t o n >
Rec h n e rs. Die F u n kt i o n request Devi ce
10 < b u t t o n i d = " b t n_s t o p " > S t o p < / b u t t o n >
sucht n a c h Geräten, d i e besti m mte Krite rien 11 < s c r i p t s r c = " n o t i f i c a t i o n s . j s " > < / s c ri p t >
erfü l l e n . l n d i esem Fa l l sucht sie n a c h Gerä­ 12 < / body>
ten, d i e den Service m i t d e r I D Ox 1 8 1 A a n bie­ 1 3 </html>

ten. Die F u n ktion ka n n a be r auch ri ach vielen


a n d e re n Krite r i e n , w i e z u m Beispiel d e m
N a m e n des Geräts, fi lte r n . tion a utomatisch a l s A rg u ment a n d i e F u n k­ sucht nach e i n e m B l u etooth-Gerät, das den
Das w i r kli c h beso n d e re a n d e r F u n ktio n tion des fo l g e n d e n t h e n-Aufrufs ü bergeben Environmental S e n s i n g - D i e n st a n bietet. Hat
r e q u e s t D e v i c e i st d e r Typ i h res R ü c kg a be­ wird. Das bedeutet i m kon krete n F a l l , dass es ein s o l c h e s gefu n d e n , verb i n d et es s i c h
wertes. Sie l i efert n ä m l i c h e i n P ro m i se-Ob­ das D e v i c e -Obj e kt, d a s von r e q u e s t D e v i c e mit dem GATI-Server a u f d e m Gerät u n d be­
jekt zurück und das ist ein M u ster, d a s sich in gefu n den wu rde, automatisch a n das nach­ sorgt sich d o rt e i n e Referenz auf den Sen sor­
'
m o d e r n e m Javas cri pt-Code bewä h rt hat. fol g e n d e t h en ü bergeben w i rd . Der La m bda­ D i e n st. Bei d i esem e rfra g t d a s P rog ra m m
W e i l viele F u n kt i o n s a ufrufe i n JavaScript Ausdruck des n a c hfo l g e n d e n t h e n l iefert ein d a n n d i e Charakteristi k d e s Te m peratu r-Sen­
asynchron, a l so paral i e l zum H a u ptfl u s s des Objekt der Server-Klasse zurück u n d das w i rd sors u n d weist sie der g l o b a l e n Va r i a b l e n
P rog ra m ms, e rfo l g e n , hat man frü h e r oft d a n n w i e d e r u m a n d e n fo l g e n d e n Aufruf m y C h a r a c t e r i s t i c zu.
Ca l l back- F u n kt i o n e n verwe n d et u n d d i ese von t h e n ü bergeben und so weiter. Es d a u ­ Da n n sta rtet d a s Prog ra m m den Notifi ka­
a n a n d ere F u n kt i o n e n weitergereicht Das e r t e i n e n Mome nt, bis ma'n sich a n d iesen Sti l tionsmecha n i s m u s u n d h i e r passiert noch
fu n kt i o n i e rte bei e i nfa c h e n Ko ntro l lfl ü s s e n gewö h n t hat, a be r er fi ndet i m m er m e h r Ver­ etwa s Beso nderes. I n nerha l b eines t h e n -Auf­
noch e i n i g e r m a ß e n g ut, a rtete bei h a l bwegs breitu n g u n d hat v i e l e Vorte i l e geg e n ü be r rufs e rfo l g t e i n weiterer t h e n -Aufruf auf
ko m p l exen P rog ra m m e n a be r sch n e l l a u s d e m a lten S p a g h etti-Code. e i n e m neuen Promise-Objekt Das i st vö l l ig
u n d w u rde s e h r u n ü bersichtl i c h . We n n man das P r i n z i p der Prom ises l e g i t i m , sol lte a be r n u r m a ßvo l l e i n g esetzt
d u rc h d r u n g e n hat, l iest sich d e r Code g a n z werd e n . Beme rken swert ist noch der N a m e
Versp rechen e i nfa c h . D i e F u n ktion o n S t a r t B u t t o n C l i c k des Parameters, der a n den i n neren Lambda-

P r o m i ses l ö s e n d i eses - u n d n o c h e i n p a a r
a n d ere P r o b l e m e - a u f e l eg a nte A rt u n d [j B lue toot h low En e rgy· Sens ;t X +
D X

W e i s e . E i n P r o m i se-Obj e kt ka pseit n ä m l i c h � -7 C CD Datei I -tl


file:///G:/My%20Drive/ESP32-Sonderheft/O... <D
e i n e zu e r l e d i g e n d e Aufg a b e u n d zwei F u n k­
� 6J Elements Conscle Sources Network Perform.,nce M e m ory » X
t i o n e n . We n n d i e Aufg a be e rfo l g re i c h e r l e­
[0 6) top • 0 Filter Oefa ult I evei s •
digt werd e n ko n n te, w i rd d i e e rste F u n ktion
S u c h e n a c h B l uetooth - G e räte n . not ificat ions . j s : 7
a ufg e rufen, a n d e r n fa l l s d i e zwe ite. D a b e i
�leb B l u etooth i s exp e r imental on t h i s pl atform . See h t t P.2..!..ll g� notifications . jtl
ka n n d i e zu e r l e d i g e n d e Aufg a be asynch ron \oJe b B l uetoothCG/I'Ie b - b lu etooth/ b lob/ g!l:.�gllii..!!! P-1 eme ntation - s t atu s . md
noti f i c a t i o n s . js : 29 ·
bea rbeitet werd e n . Das m u s s a be r n i c h t
DOf"'E xception

S u c h e nach B l uetooth - G e räte n . not i f i c ations . jB


zwa n g s l ä ufig d e r Fa l l sei n . Heb B luetooth is experime n t a l on t h i s platform . See h t t p� github . c om/ not if ic a t i ons . j�
WebBlue toothCG /\-i e b • b l1.1etooth /b lob/g iJ.:.�glli.!.!r! P-1 erne n t a t ion - s t a t u s . rnd
Die W e b B l u etooth-API m a c h t reg e n Ge­
Ve r b i n d u n g mit dem GATT - S e rver . n o t i f i c a t i o n s . js : 10
b ra u c h von P r o m i ses, was man sch n e l l an
S tJ c h e d e n S e n s o r - Die n s t . n oti f i c a t ions . js : 14
der l a n g e n Ka skade von Aufrufen d e r F u n kti­ S u c h e d i e Tempe ratur - C h arakt e r i s t ik . n ot i f i c a t i o ns . j�

o n t h e n erke n n e n ka n n . Diese F u n kt i o n ist Notifikation e n werden empfa n ge n . notifi c at i o n s . j�

e i n e Methode d e r P r o m i s e -Klasse u n d l iefert 0 2 3 . 73 noti f i c a t i o ns . j s : 47

23 . 74 noti f i c a t i o ns . js : 47
sel bsr w i e d e r e i n P r o m i s e -O bj e kt z u r ü c k. 0 2 3 . 73 notifi c a t i o n s . js : 47
D a h e r beko m mt a u c h t h e n potenzi e l l zwei 23 . 71 notifi c a t i o n s . js : 47

F u n ktionen ü bergeben, a be r i n vielen F ä l l e n 0 2 3 . 73 noti f i c a t i o ns . j�

i st es n u r d i e fü r d e n Erfo l g sfa l l , wei l sich a m 0 2 3 . 74 noti f i c at ions . js : 47

23 . 73 noti f i c a t i o n s . js : 47
E n d e d e r Ka skade d i e F u n ktion c a t c h u m d i e 23 . 74 noti f i c a t i on s . js : 47

Beha n d l u n g von F e h l e r n kü m m e rt. 23 . 73 noti f i c a t i o n s . js : 47

23 . 74 n oti fications . js : 47
Die Ü bergabe der F u n ktionen e rfo l g t oft
23 . 73 noti f i c a t i o n s . js : 47
in Form e i n es La m b d a -A u s d r u c ks . Das ist
0 2 3 . 74 noti f i c a t i o n s . js : 47
e i n e beso n d e rs ko m p a kte S c h re i bweise zur Not i f ika t i on e n \o'lerden i g n o riert . noti f i c a t i o n s . js : 36
Defi n i t i o n einer a n o n y m e n F u n kt i o n , a l so
einer F u n ktion ohne Namen. E i n solcher Aus­
d ru c k wi rd mit d e m = > -Operator e rzeugt. ! Console X
S c h l i e ß l i c h ist es noch wichtig zu wissen,
dass d e r R ü c kga bewert d e r a n onymen F u n k- Auf dem PC kann man BLE-Ciients bequem im Browser bauen.

Ma ke: ESP32 special 20 1 9 l 41


B LU ETOOTH �· �����-�

( "_" ),
Ausdruck ü bergeben w i r d . Der ist n ä m l i c h a u fg e rufe n wird. Die w i rd weiter u nten noch in e i n e vorzeichenbehaftete 1 6 Bit-Za h l um­
e i n U nterstrich weil d e r P a ra m eter i n ­ d efi n i e rt. g ewa ndelt werd e n . D i e Va r i a b l e v a L u e i st
nerha l b des L a mbda -A us dr u cks n i c h t ver­ Vö l l i g analog a rbeitet . die F u n kt i o n vom Typ D a t a V i e w u n d solche Objekte ka p­
wendet wird. a n S t o p B u t t o n C L i c k . Sie stoppt d e n N otifi ka- . sein den Zug riff auf e i n A r r a y B u f f e r -Objekt,
Zum Sc h l u ss w i rd mit d e r F u n kt i o n a d d ­ t i o n s m e ch a n i s m u s u n d entfernt d i e Ca l l ­ d a s i n JavaScript z u r Verwa l t u n g b i n ä rer
E v e n t L i s t e n e r noch e i n e Ca l l back- F u n ktion back-Fu n kt i o n wieder. Daten d ient. Dieses A r r a y B u f f e r -Objekt ent­
bei der Tem pe ratu r-Charakteristik reg istriert. h a n d L e .N o t i f i c a t i a n s beko m mt a l s Para­ hält zwei Bytes, die wieder zu einer 1 6 Bit-Za h l
Dieser Aufruf sorgt dafü r, dass i m me r d a n n, meter e i n Ereig n i s mit.dem a ktu e l l e n Tem pe­ zusa m m e ngebaut- werden s o l l e n . Dabei h i lft
we n n sich der Wert d e r C h a ra kteri sti k geän­ ratu r-Wert ü bergeben. Der ist g e n a u so ko­ d i e F u n ktion g e t i n t 1 6 . Sie erhält den I n dex
dert hat, die F u n ktion h a n d L e N o t i f i ca t i a n s diert, wie es der Sta n d a rd vorsieht und muss der 1 6 Bit-Za h l im A r r a y B u f f e r und das Ar­
g u ment t r u e l egt fest, in welcher Reihenfolge
d i e Bytes a bgelegt sind C,l ittle endia n").
A m �nde desProg ra m m s werden noch die
beiden Ca l l back- F u n ktionen fü r die Button s
mit den entsprechenden Button s verkn ü pft.
not i f i ca t i ons . j s
1 va r myC h a ra c t e r i s t i c ;
2 Klick m i c h !
3 · f u n c t i on on S t a r t Bu t tonC L i � k ( )
4 L e t serv i ceUu i d = Ox1 81 a ;
5 L e t c h a r a c t e r i s t i cUu i d = Ox2a6e; Der Vortei l von Web-Anwendüngen ist, dass
6 sie a u f so vielen P l attformen fu n ktionieren.
7 c o n s o L e . L o g ( ' .S u c h e n a c h B L u e t o o t h - G e r ä t e n . ' ) ; Die Datei i ndex.html ka n n m a n zum Beispiel
8 navi gator . b L uetoot h . requestDevi c e ( {f i L ters :
mit dem C h rome-Browser auf dem PC laden
[ { servi ces : [servi ceUu i d J } ] } )
9 . t h e n ( d e.v i c e = > {. u n d auf d e n Sta rt-Button klicke n . D a n n öffnet
10 c o n s o L e . L o g ( '. V e r b i n d u n g m i t d e m G A T T - S e r v e r . ' ) ; sich e i n Dia l og-Fenster, in d e m der B rowser
11 return devi ce . gatt . connect < l ;
(' 12 })
nach B l u etooth-Geräten in der N ä h e sucht.
13 · . t h e n ( s e r v e r => { Hat e r d e n ESP32 gefu n d e n , ka n n m a n i h n
14 c o n s o L e . L o g ( ' S u c h e d e n S e n s o r - D i e n s t. ' ) ; ko p pe l n u n d schon sol lten d i e Te m pe rat u r­
15 r e t u r n s e rve r . ge t P r i ma ryServi c e ( s e r v i c e U u i d l ; Daten eintru d e l n . E i n Kl ick auf den Stop-But­
16 })
17 . t h e n ( s e r v i ce => { ton beendet den . Date n reichtu m. Wen n man
18 conso L e . L og ( ' S u c h e d i e Tempe r a t u r- C h a r a k t e r i s t i k . ' ) ; noch d i e JilVaScri pt-Ko n s o l e ü be r das M e n ü
19 r e t u r n s e r v i c e . g e t C h a r a c t e r i s t i c ( c h a r a c t e r i s t i c Uu i d l ; Weitere Too l s > Entwicklertools öffnet, ka n n
20 })
m a n s i c h para l l e l a u c h n o c h d i e Log-Ausga­
r 21 . t h e n ( c h a r a c t e r i s t i c => {
22 myC h a ra c t e r i s t i c = c h a r a c t e r i s t 1 c ; ben des Progra m m s a n sehen.
23 r e t u r n my C h a r a c t e r i s t i c . s t a r t N o t i f i c a t i on s ( l . t h e n (_ = > { Genauso fu n ktio n i e rt d i e Anwen d u n g im
24 c o n so L e . L og ( ' No t i f i ka t i o n e n w e r d e n e mp f a ng e n . ' ) ; C h rome-Browser auf dem S m a rtphone. A l l er-
25 myC h a r a c t e r i s t i c . a d d Eve � t l i s t e n � r
( ' c h a r a c t e r i s t i cva L uecha nged ' ,
26 hand L eNot i fi cat tons l ;

11 1!! 0 @
27 });
28 })

0
29 . ca t c h ( e r ro r => { conso L e . L og ( e r ro r l ; } ) ;
30 om e://b l uetooth-i ntern a l s
31
32 funct i on onStopBu� tonC L i c k ( )
33
34 m y C h a �a c t e r i s t i c . s t o p N o t i f i c a t i o n s ( )
i f (myCha racteri st i c ) { _ ESP32-SENSOR Dlsconnect ��
35 . then( => {
36 conso L e . Log ( ' No t i f i ka t i onen werden i g n o r i e r t . ' l ;
Status
37 ' my C h a r a c t e r i s t i c . r e m o v e E v e n t L i s t e n e r
( ' c h a r a c t e r i s t i cva Luechanged ' , · Name: ESP32·SENSOR
38 hand L eNot i f i ca t i on s l ;
Address: 84:E6:20:89:CF:F3
39 })
GATT Connected: Connected
40 . c a t c h ( e r r o r = > '{ c o n so L e . L og ( e r ro r l ; } ) ;
r 41 Latest RSSI: ·70
42 Services: 3
r 43
4 4 func t i on hand L eNot i f i ca t i ons( even t ) Services
45 L e t va L u e = event . t a rg e t . va L u e ;
46 const t = va Lue . get int 1 6 (0, t ruel 1 00 . 0 ;
47 conso L e . L og ( t l ;
4� documen t . querySe L e c t o r ( ' # t empe r a t u r e ' )
. i n n e r HTML = t + ' &#xOObO; C ' ;
49
50
5 1 d o c u m e n t . q u e r y S e L e c t o r ( ' # b t n_s t a r t ' l . a d d E v e n t l i s t e n e r
( ' c L i c k ' , onStartButtonC L i c k l ;
5 2 d o c u m e n t . q u e r y S e L e c t o r ( ' # b t n_s t o p ' l . a d d E v e n t l i s t e n e r
'""
( ' c L i c k ' , o n S t opBu t t onC L i c k l ;
Auch in der mobilen Version ist Chrome in Bezug
auf Bluetooth auf dem neuesten Stand.

4 2 1 Make: ESP32 special 201 9


d i n g s g i bt es noch e i n paar Dinge zu beach­ tooth- o d e r B l u etooth- Low- E n e rgy-Anwen­ :t '?' .oll 68 % 11 1 3:06

:tps://maik�schmidt.de m
ten. Wä h rend der Entwickl u n g auf d�m Desk­ d u n g e n zu entwicke l n .
top ka n n m a n ü be r Dateien, d i e m a n l o ka l D a s bedeutet aber nicht a utomatisch, dass i
oder ü ber einen Web� Server, d e r a u f loca l h ost d i e U m setz u n g eigener Projekte e i n Kinder­
l a u scht, g e l a d e n hat, bei n a h e beliebigen spiel i st. Wer versch i edene B l u etooth-Geräte
Code a usfü h re n . Das i st a u s Sicherheitsg rün­ im Einsatz hat, wei ß sicherlich, wie zickig man­
den n icht erlau bt, wen n m a n die Dateien ü ber
a n d e re Q u e l l e n bezieht. Wer eine Web-A n­
che davon ·sein können u n d wie zeita ufwen­
dig und nervena ufreibend sich die Kop p l u n g
2 3.81 oc
wend ung, die auf B l u etooth zug reift, a n bietet, u n d Sync h ro n i sation zweier Geräte gesta lten

I II
m uss das daher per HTTPS t u n . ka n n . Daher i st es wichtig, sich vo r und wä h­

I
D a r ü b e r h i n a u s m u ss d e r B l u etoot h - E i n ­ rend der Entwickl u n g mit den richtigen Werk­
s a t z d u rc h e i n e N utzer-A kti o n i n it i i ert wer­ zeugen a u szustatten u n d vertraut zu m achen. S t a rt St o p
den. ln der vorl iegende n Anwe n d u n g i st das Man ka n n gar n i cht g e n u g B h..i etooth­
der Klick auf den Sta rt- B u tto n . Es ist a l so Apps auf dem S m a rt p h o n e h a b e n , w e n n
n i c h t e rl a u bt, s i c h d i rekt nach d e m Laden m a n seine 'eigenen I d een u m setzen w i l l u n d
einer Seite m it e i n e m G e rät zu verbi n d e n m a n sol lte j e d e n Wi nkel d e r Web B l u etooth­
u n d Daten a u szuta u sc h e n . API z u m i n d est e i n m a l gesehen h a b e n . Fer­
n e r schadet es n ic ht, e i n e n ti efe n B l i c k i n d i e
Spezifi kation zu we rfen u n d s i c h m i t d e n be­
Fazit stehenden Diensten vertra ut zu machen. N u r
so ka n n m a n verh i n dern, d a s s m a n d a s Rad
W i e s o oft; wei ß d e r E S P 3 2 a u c h bei m u n nötiger Weise neu erfi n d et.
T h e m a B l u etooth zu ü be rze u g e n . Di� H a rd ­ H a l bwegs e rfa h rene Entwickler fi nden i m
wa re u n d d i e Software s i n d sta b i l u n d b i e ­ E S P 3 2 u ri d s e i n e r Software a b e r a l les, u m
ten a l l e s , was d a s E n tw i c k l e r h e rz beg e h rt. m a l a u f d i e S c h n e l l e e i n e n n e u e n GATT- Auch mobil funktioniert die Temperatur­
Selten wa r es so leicht und prei swe rt, B l ue- C l i e n t oder -Server zu bauen. -dab Anwendung.

Lesestoff für Maker


Aaron Newcomb Peter A. Henning
Linux für Maker SmartHorne Hacks
SmartHorne
Hacks
Raspbian - das Betriebssystem des Machen Sie aus Ihrem Haus oder Ihrer
Raspberry Pi richtig verstehen und effektiv Wohnung ein SmartHome! Lernen Sie, rnit
nutzen. Entwickeln Sie Ihre Projekte weiter Hausautomationssystemen individuelle .
und entdecken Sie Neues! bedarfsgerechte Lösungen zu entwickeln.

ISBN 97839600901 20
ISBN 97838649051 1 7
shop;heise.dellinux-maker
ftJI.N · shop.heise.de/smart-home-hacks

Charles Platt Gordon F. Williams


Make: Elektronik Maker-Projekte mit JavaScript
Maker-Projekte mit
Eine unterhaltsame Einführung für Maker,
Kids und Bastler - die Elektronik entdecken
JavaScript
Mit Esprulno und JavaScript
Mit Espruino und JavaScript aus Alltagsobjekten
intelligente Maschinen bauen - perfekt
aus Atftilpobjekten lrrtelligente
und ihre Gesetze durch beeindruckende Maschinenbauen geeignet für Einsteiger und für fortgeschrittene
Experimente v�rstehen. Maker.

· ISBN 9783864903687 ISBN .9783960090779


shop.heise.de/make-elektronik shop.heise.de/maker-projekte

('

Diese und mehr s p annende Bücher ab 1 5 € p ortofrei unter shop.heise.de/buecher


@ heise shop
1 25
t... AG �

fUNc rtON ,

Signalerzeugung
mit dem ESP32
D e r ESP32 i s t e i n M e i ster d e r d ra h tlosen Ko m m unikation, aber e r be h e rrscht
a uch das klassische Mikrocont rolle r-Reperto i re. Unte r anderem kann e r analoge
Si gnale n icht nu r lesen, sond e rn a uch e rze u g en. Alles zum Artikel
I im Web unter
von M a i k Schmidt • make-magazin.de/x43f

441 Make: ESP32 specia l 201 9


S el bst in e i n e r Weit, d i e i m m e r m e h r von
d i g italen Tech n o l o g i e n a b hä ngt, s p i e l e n
a n a loge S i g n a l e weite rh i n e i n e g roße R o l l e .
ste l l t und auch h e ute n o c h kö n n e n s i c h M u ­
s i ke r fü r d i ese s e h r s pezi e l l e K l a n g a rt b e ­
g e i stern. ( Constant . i no
Das w i rd s i c h verm u t l i c h a u c h n i e ä n d e r n , ( 1 vo i d s e t up ( ) {
weil d i e meisten physika l i schen P h ä n o m e n e, Zähne zeigen 2 dacWr i t e ( DAC1 , 255 ) ;
wie zum Beispiel d e r Sc h a l l , a n a log s i n d . ( 3
F ü r v i e l e A n w e n d u n g e n m ü ssen M i kro­ U m d e m ESP32 s o l c h e We l l e nfo rmen z u ent­ 4
(' 5 vo i d Loop ( ) { }
contro l l e r d a h e r a n a l og e Daten vera rbeiten locken, muss man d e n DAC mit den Werten
oder e rze u g e n kö n n e n . Dazu b r a u c h e n sie der entsprec h e n d e n Ku rve füttern. J e nach­ (

_r
Baustei n e, d i e a n a l o g e I nfo rmati o n e n i n d i­ d e m , wie sch n e l l m a n das tut, ä n dert s i c h d i e
________________________ _J
g i t a l e u m wa n d e l n u n d u m g e ke h rt. S o l c h e F req uenz des e rzeugten S i g n a l s .
H e lfer hei ßen A n a l og -/D i g i ta l -Wa n d l e r (ADC; Viele Wel l enfo r m e n lassen sich p ro­
An a log-/D igital Converter) bezi e h u n g sweise g ra m matisch sehr ei nfa c h erze u g e n . Listing
Dig ita l -/Ana log-Wa n d l e r ( DAC; D i g it a l -/ Ana­ Sawtoot h . i n o g e n eriert z u m Beispiel e i n e
(

(
log Converter) . Sägeza h n ku rve. D i e h e i ßt s o , w e i l sie e i n e m
Der E S P 3 2 beherrscht b e i d e D i szi p l i n e n S ä g e b l a tt a h n e l t u n d s i e ze i c h n et s i c h d a ­ Sawtoot h . i no
g u t u n d er hebt s i c h i n s besondere bei d e r E r­ d u rch a u s, dass i h r S i g n a l konti n u ierlich l i nea r
( 1 vo i d s e t up ( ) { }

· c
zeug u n g a n a l o g e r S i g n a l e von d e r Ko n k u r­ · a n steigt u n d d a n n sch l a g a rt i g w i e d e r a u f 2
renz a b . Er hat n ä m l i c h g l eich zwei DACs m it den Anfa n g swert a bfä l lt. 3 vo i d Loop ( ) {

(
e i n e r Aufl ö s u n g von jewe i l s 8 Bit. Somit ka n n Das P rog ra m m erledigt den A n stieg der 4 f o r . ( u i n t 1 6_t i = 0 ; i <
256; i ++ )
d e r ESP32 a u f zwei Ka n ä l e n Spa n n u n g e n von Ku rve m i t h i lfe einer t o r -S c h l eife u n d g i bt
(
5 dacWri t e ( DAC1 , i l ;
0 bis 3,3V i n 256 Abstufu n g e n e rze u g e n . Ver­ Sch ritt fü r Sch ritt d i e Werte von 0 bis 255 ü ber 6

c
b u n d e n s i n d die DACs m it den G P I O- P i n s 25 d e n DAC auf Ka n a l 1 aus. D a n a c h sorgt d i e 7
u n d 26. L o o p-Fu n ktion dafü r, d a s s das S p i e l v o n vorne
beg i n nt. Mit einem Oszi l l oskop l ässt sich der c
Konstant gespannt typische Verlauf der Ku rve visual isieren.

List i n g Consta n t . i n o d ü rfte d i e M i n i m a lver-


sion eines P rog ra m m s sein, das den DAC a u f
d e m E S P 3 2 verwe n d et. i n fü nf Ze i l e n C o d e
setzt es d e n A u s g a n g swert des DAC a u f
Ka n a l 1 ( G P I O - P i n 25) a uf den Maxima lwert
2 5 5 . Dazu n utzt es d i e F u n kt i o n d a c W r i t e
u n d d i e Konstante D A C 1 .
D i e Spa n n u n g , d i e a m G P I O - P i n 25 a n ­
l i egt, w e n n m a n d a s Prog ra m m a u f d e n
E S P 3 2 l ä dt, beträgt c i rca 3,2V. Das i s t etwa s
wen iger, a l s d i e erwa rteten 3,3V. U m g e ke h rt
l i egt d i e A u s g a n g s s pa n n u n g knapp ü be r OV,
wenn m a n e i n e 0 an DAC 1 sendet. Die a n a­
loge Weit ist e b e n n i c ht so dete r m i n istisch
wie d i e d i g it a l e und hier m u s s man F ü nfe
schon m a l gerade sein lassen. Sowo h l bei der
E rze u g u n g als auch bei d e r Mess u n g e i n es
S i g n a l s ka n n e i n iges sch iefgehen u n d etwa i­
Eine Sägezahnkurve ist schnell erzeugt.
ge F e h l e r s u m m ieren s i c h schnell a uf.
Das g i l t a u c h fü r d i e Abstufu n g des S i g -
n a l s . R e i n t h e o retisch s o l lte s i c h d i e S p a n ­
n u n g i n S c h ritten von 3 , 2V/2 5 6 = 1 2,5mV
verä n d e r n l a s s e n . i n d e r P ra x i s i st d a s Ver­
o:; .,..
ha lten der DACs auf dem E S P 3 2 a be r n i c h t 0"1 •-..
o•-
•·­
Q l. Oro' to•,..
g a n z so l i near. D i e Q u a l ität ist d e n n o c h fü r D • •.,
o-�
0•-
viele Anwen d u ngen, wie zum Beispiel d i e ··­

.....
o·- •..
o .. .......
A u s g a be v o n A u d i o s i g n a l e n , vö l l i g a u s re i ­ o .. c,.�-
o .-._._
o ..._. - 0
......
""' ­
chend. O • P-
0 • ..,_...,.

... .
o ,_
I n s be s o n d e re r e i c h t d i e Q u a l ität a u s, u m o .. ... .....
0 • · 0..0.'""
o o.., (J<l<
D • · --
g r u n d l e g e n d e S i g n a l e synthet i s c h e r M u s i k 0 • · """"' _..

z u e rze u g e n . Dazu g e h ö re n u n ter a n derem


Rechteckwe l l e n , D r e i e c kwe l l e n und S i n u s ­
we l l e n . i n d e r Zeit d e r H o m e-Co m p u t e r
ha ben M u s i ke r z u m B e i s p i e l a u f d e m Com­
modore 64 m it nur vier We l l e nfo r m e n und
d rei Sti m m e n epoc h a l e Ko m po s i t i o n e n er- Mit dem DAC-Maximalwert von 255 gibt der ESP32 knapp 3,2V aus.

Make: ESP32 special 201 9 l 45


F U N KT I O N SG E N E RATO R �----1----
Das Verfa h re n l ä sst s i c h a u f be i n a h e be­
l i e b i g e S i g n a lfo r m e n ü be rtra g e n . Listing
Si ne . i no S i n e . i n o s e n d et b e i s p i e l sweise e i n e S i n us­
ku rve ü be r d e n G P I O - P i n 25. Auch d i eses
1 vo i d s � t u p ( ) { }
2 Prog ra m m ist kurz und nicht viel a n s pruchs­
3 voi d loop ( ) { vo l l e r als d e r Sägeza h n - G e n e rator, we n n
4 f o r ( u i n t 1 6_t i = 0 ; i < 3 6 0 ; i + + ) { m a n m i t d e n wichtigsten Eigensch aften der
5 d a c W r i t e ( D A C 1 , i n t ( 1 28 + 1 2 7 * s i n ( i * PI I 1 80 l l l ;
S i n u sfu n ktion vertra ut ist.
6
7 Z u e rst e i n m a l ist es wichtig zu wissen,
dass d i e s i n - F u n ktion i n der Ard u i no-Bibl io­
---- ---- ··---�-
thek ein Arg u m e n t im Bog e n m a ß (Rad i a n )
u n d n i c h t i n G rad e rwa rtet. Somit ka n n d e r
S c h l eife n i ndex n i c ht d i re kt ü bergeben wer­
d e n , sondern w i rd d u rc h d i e M u lt i p l i kation
m i t P l / 1 80 i n Ra d i a n u m g ewa n d e l t. Der
R ü ckga bewert d e r F u n kt i o n l i egt zwi schen
- 1 u n d 1 u n d muss s i n nvo l l auf den Ziel be­
reich von 0 bis 255 a b g e b i l d et werd e n . Dazu
w i rd er zunäc hst mit 1 2 7 m u lt i p l iziert, womit
s i c h We rte zwischen - 1 2 7 und +1 2 7 ergeben.
D u rc h die a n s c h l i e ß e n d e A d d i t i o n von 1 28
ergeben s i c h i n sgesamt Werte von 1 bis 2 5 5 .
Selbstverstä n d l i c h l ä sst s i c h d i e Form der
S i n u s k u rve beliebig m o d ifizieren. So ka n n
m a n beispielsweise d i e A m p l itude va riieren,
we n n man n i c ht d e n g a nzen Wertebereich
des DACs verwe n d e n w i l l .
Auch eine Sinuskurve ist kein Problem.

Konservenwel len
Angespornt d u rc h d i ese e rsten Erfo l g e
Si neWi t hTab l e . i no ko m m t m a n sch n e l l a u f d i e I d ee, a u s dem
ESP32 e i n e n g ü n st i g e n F u n ktionsgenerator
r

u i n t 8_t W a v e F o r m [ S A M P L E � ] = { 0 1 ;
1 c o n s t u i n t 1 6_ t S A M P L E S = 3 6 0 ; zu b a u e n . Das ist ein Gerät, das period ische
2
S i g n a l e, wie z u m Beispiel Rechteck, Dreieck
3 u i n t 1 6_t p o s i t i o n 0 ,.
4 oder S i n us, erze ugt. Ferner lassen sich oft die
5 voi d setup ( ) { F req uenz und die A m p l itude des erzeugten
("
6 f o r ( u i n t 1 6_t = 0 ; i < S AM P L E S ; i + + ) { S i g n a l s e i n stel l e n .
7 Wave Form[ i J i n t ( 1 28 + 1 2 7 * s i n ( i * P I I 1 80 l l ;
8 A u c h w e n n d i e b i s h e ri g e n B e i s p i e l p ro­
9 g ra m m e ü bersc h a u ba r s i n d und sich l e i c h t
10 auf a n d ere Wel l e nfo rmen ü bertragen lassen,
11 voi d loop ( ) {
h aben s i e ein p a a r g raviere n d e N a chte i l e,
12 d a c W r i t e ( DA C 1 , Wave Form [ pos i t i on++l l ;
13 po s i t i on % = S A M P L E S ; w e n n s i e i n e i n e m mög l i c h st g e n e r i s c h e n
14 F u n kt i o n s g e n e rator zu m E i n satz ko m m e n
sollen.
Z u e rst e i n m a l u ntersc h e i d e n s i e s i c h i n
d e r Geschwi n d i g keit, m i t d e r d a s S i g n a l er­
zeugt w i rd . Wä h re n d d e r Sägeza h n s e i n e
A u s g a n g swerte mit a n n ä hernd u n g e b rems­
ter Geschwi n d i g keit a n d e n DAC sendet,
m u ss s i c h d e r S i n u swel len-Generator d u rch
d i e träge s i n - F u n kt i o n u n d l a n g wierige
F l ießkomm a-Operationen q u ä len, bis er end­
lich zu e i n e m Ergeb n i s kommt. I n s besondere
a u f e i n e m M i kroco n t ro l l e r wie d e m ESP32
schlagen s i c h s o l c h e U nte r schiede deutl i c h
i n d e r A n za h l d e r b e n ötigten C P U -Zykl e n
n i eder.
Ein weiteres P r o b le m ist die Anza h l der
Werte (Sa m p les), d i e z u r Erze u g u n g der un­
tersc h i ed l i c h e n S i g n a l e verwe n d et werd e n .
Wä h rend es beim Sägeza h n n u r 256 sind, be­
Eine Sinuskurve kann auch mit vorberechneten Werten erzeugt werden. nötigt d i e S i n u s k u rve 360. Um den Resso u r-

461 Make: ESP32 special 201 9


cenbed a rf fü r a l l e We l l e nfo r m e n mög l i c h st
g l e i c h zu h a lten, wä re es von Vorte i l , jede
We l l enfo rm m i t derselben A n za h l a n Sam­ � S i neWi t h F i xedTab le . i no
pies zu d efi n ieren. [\ 1 c o n s t u i n t 1 6_t S A M P L E S = 2 5 6 ;
Für beide Probl�me g i bt es eine e i nfa c h e 2 u i n t 8_t W a v e F o r m [ S A M P L E S ] = { 0 } ;
,.....
Lös u n g : Statt a l l e F u n kt i o n swerte i m m e r 3 u i n t 1 6_t p o s i t i o n 0;
wieder neu zu berec h nen, wen n sie benötigt "....
4

.I
5 vo i d s e t u p ( ) {
werd e n , be rec h n et m a n s i e e i n m a l zu A n ­
6 f o r ( u i n t 1 6_t i = 0 ; i < S A M P L E S ; i + + ) {
('
I
fa n g des Prog ra m m s u n d l e g t s i e i n e i n e r 7 u i n t 1 6_t d e g r e e = m a p ( i , 0 , 2 5 5 , 0 , 3 5 9 ) ;
sepa raten Ta be l l e fü r jede F u n ktion a b . Die 8 W a v e F or m [ i J = i n t ( 1 2 8 + 1 2 7 * s i n ( d e g r e e * P I I 1 8 0 l l ;
(' 9
Zug riffszeit auf d i e Ta b e l l e n e i nträge ist kon­
("'
10
sta nt u n d so benötigt d i e Berec h n u n g eines 11
F u n ktion swerts fü r alle We l l e nfo r m e n d i esel­ ("'
12 vo i d L o p ( ) {
be Zeit. 13 d a c W r t e ( DA C 1 , Wave F o r m [ pos i t i on++J l ;
'"" 14 pos i t o n % = SAMPLES;
List i n g S i n eWithTa b l e . i n o d e m o n striert 15
das Prinzip a n h a n d d e r S i n us-F u n kt i o n . Das
[\
P rog ra m m d efi n i e rt eine Ko n st a n te fü r die
Anza h l d e r F u n kt i o n swerte, die berec h n et
u n d a u sgegeben werden so l l e n . l n d i esem
Fa l l s i n d d a s 360 Werte u n d daher w i rd e i n
Feld n a m e n s W a v e F o r m m i t a u s reichend P latz
a n g e l egt. Die Va r i a b l e p o s i t i o n d i e n t z u r
S p � i c h e r u n g d e r a ktu e l l e n Position i n n e r­
h a l b des Feldes.
D i e F u n kt i o n s e t u p berec h n et die 360
Werte d e r S i n u s k u rve u n d s p e i c h e rt s i e im
F e l d W a v e F o r m . A n sc h l ießend m u s s d i e L o o p­
F u n kt i o n d i e zuvor berec h n eten We rte n u r
noch konti n u i e r l i c h a u sgeben. Dazu wi rd d i e
Va riable p o s i t i o n b e i j e d e m Aufruf erhöht.
M i tte l s des M od o l o-Ope rators (%) w i rd ge­
prüft, o b der a kt u e l l e We rt von S A M P L E S
d u rch 2 5 6 te i l b a r i st u n d gegebenenfa l l s a u f
0 z u r ü c kgesetzt. So werd e n d i e Werte i m
Feld W a v e F o r m i m m e r w i e d e r a u sgegeben. 256 Werte reichen völlig, um eine Sinuskurve darzustellen.
Obwo h l d i e P rog ra m m e SineWithTable.ino
u n d S i n e . i n o i m P r i n z i p d i eselben Werte a u s­
geben; u ntersc heiden sich die erzeugten Sig­
n a l e auf dem Oszi l l os ko p erheblich. Wä h rend vom Vorg ä n g e r nur im Wert d e r Ko n stanten Formenvielfa lt
bei der d i rekten Berec h n u n g u n g efä h r eine S A M P L E S und i n d e r s e t u p - F u n ktion. Die be­
Schwi n g u n g zu sehen i st, s i n d es bei d e r ta­ rec h net statt 360 Werten n ä m l ich n u r noch B i s h e r h a b e n a l l e P rog ra m m e i h re Daten un­
"
b e l l e n g estützte n Varia nte fa st fü nf. D a ra u s 2 5 6 . Trotzd e m i st die S i n u s - F o r m e l a n n ä ­ g e b re m st m it der F u n ktion d a c W r i te a n den
fo l gt, d a s s d i e Berec h n u n g d e r S i n u s-We rte hernd d i e g l eiche. Sie ve rwe n d et den Schlei­ DAC gesendet. Für v i e l e Anwe n d u n g e n
d e n P rozess um d e n F a ktor F ü nf ve r l a n g ­ fe n i n d ex a l l e rd i n g s n i cht mehr d i rekt, s o n ­ re i c h t das a u s, a b e r es wä re s i n nvo l l , w e n n
s a m t . Es l o h n t sich a l so, d i e F u n ktion swerte dern d i e lokale Va ria b l e d e g r e e . m a n d i e F req uenz des S i g n a l s ä n d ern kö nn­
vorzu berec h n e n . D i e wiederum bed ient sich d e r m a p - F u n k­ te. D a r ü ber h i n a u s wäre es a u c h h i lfreich,
A u f d iese Weise kö nnen period ische F u n k­ t i o n d e r A rd u i n o-Bi b l i ot h e k, m i t d e r m a n we n n man d i e S i g n a lfo r m wählen kön nte .
tionen mit maxi m a l e r Effizienz erzeugt wer­ e i n e n Wertebere i c h a u f e i n e n a n d eren a b­ List i n g WaveForms.ino i m p l e m entiert a l l das
den. Sie kö nnen sich a ber weiterhin in der An­ b i l d e n ka n n . l n d i e s e m Fa l l b i l d e t s i e d e n und macht aus dem E S P 3 2 e i n e n echten
za h l der Sampies u nterscheiden. Da m it w ü r­ Wert d e s S c h l eife n i n d ex proport i o n a l v o m F u n kt i o n s g e n erator. Das P rog_ra m m ka n n
den d i e dazu gehörenden S i g n a l e noch I n te rva l l 0 b i s 2 5 5 a uf d a s I nterva l l v o n 0 b i s v i e r vers c h i e d e n e We l l e nfo r m e n (Rechteck,
i m mer i n u ntersch ied licher Zeit e rzeugt wer­ 359 ab. S i n u s, Dreieck u n d Säg eza h n ) m i t konfi g u ­
d e n . Dieses Problem w i rd gel öst, i n dem d i e A u f d e m Oszi l l o s ko p s i n d j etzt n o c h rierbare r F req uenz erze u g e n .
Ta bellen mit den F u n ktion swerten a l l e d iesel­ m e h r P e r i o d e n d e r S i n u s k u rve zu s e h e n D a z u benutzt es d i e b i s h e r vorg este l lten
be G röße - zum Beispiel 256 - verwenden. u n d d a s ist l o g i s c h , d e n n z u r Erze u g u n g d e r Tec h n i ke n u n d d efi n i e rt zuerst e i n m a l e i n
Für S i g n a l fo r m e n w i e Rechteck, Dreieck Ku rve w e rd e n 1 04 We rte w e n i g e r ( 3 6 0 - p a a r Kon sta nten. M A X_W A V E_T Y P E S enthält
oder Sägeza h n ist d i e Anza h l d e r vorberech­ 256 = 1 04) a n d e n DAC g e s e n d et. Obwo h l d i e Anza h l d e r We l l e nfo rmen, d i e das P ro­
neten Werte e i n igermaßen u n erheblich, a ber d i e G e n a u i g ke i t a u f d e m P a p i e r d e u t l i c h g ra m m e rze u g e n ka n n u n d S A M P L E S die An­
e i n e S i n u s k u rve scheint z u n ä c hst a n d i e 360 g e r i n g e r a u sfä l l t, r e i c h t s i e fü r d i e m e i sten za h l der F u n ktion swerte, mit denen die ein­
Grad g e b u n d e n zu sei n . Wie ka n n man d i ese A n we n d u n g e n a u s . Die Za h l 256 w u rd e ze l n e n Sign�le repräsentiert werd e n . ln
a l so auf 256 We rte ru nterrec h n e n ? d a b e i m e h r o d e r we n i g e r w i l l kü r l i c h g e ­ M I C R O S_P E R_S A M P L E fi n d et m a n d i e Anzah l
List i n g S i n eWit h F ixedTa b l e . i n o zeigt, w i e wä h l t u n d i n v i e l e n F ä l l e n re i c h e n we n i g e r der M i kroseku n d e n , d i e m a n zwischen zwei
es g e h t . Das P rog ra m m u n tersc h e i det s i c h Werte. DAC-Sc h re i bvorg ä n g e n wa rten m u ss, d a m it

Ma ke: ESP32 special 20 1 9 l 47


F U N KT I O NSGE N E RATO R I
I-----------

,.) d a s generierte S i g n a l mit e i n e r F requenz von


e i n e m H e rtz, a l so e i n e r Schwi n g u ng pro Se­
k u n d e, a u sgegeben wird.
W�ve Forms . i no Z u r Verbesser u n g d e r Les barkeit l i stet der
A u fzä h l u n g styp W a v e T y p e s a l l e We l l e nfor­
0 1 c o n s t u i n t 8�t M A X_W A V E_T Y P E S = 4 ;
men a uf. Ansch l ießend w i rd das zwe i d i m e n ­
2 c o n s t u i n t 1 6_ t S A M P L E S = 2 5 6 ;
3 c o n s t u i n t 1 6 t M I C R O S_P E R_S A M P L E 1 000000 I SAMPLES; s i o n a l e F e l d W a v e F o r m s a n g e legt. Es d i ent
4 z u r Speicheru n g d e r vorberec h n eten F u n k­
0 5 enum WaveTypes
t i o n swerte fü r a l l e u nterstützten S i g n a lfor­
6 SINE,
7 TRIANGLE, m e n . Wie gewo h n t e n t h ä l t d i e Va r i a b l e
& SAWTOOTH, p o s i t i o n d i e a ktu e l l e Position i n n erha l b d e s
9 S Q UA R E zu e rzeugenden S i g n a l s .
10 };
11 Es fo l g e n v i e r F u n ktionen z u r Vorb·erech­
12 n u n g der S i g n a l we rte. Neu s i n d n u r d i e

{ 0 } , I I S i ne
13 u i n t 8 t W a v e F o r m s [ M A X -W A V E - T Y P E S J [ S A M P L E S J { F u n kt i o n e n z u r Berec h n u n g d e r Rec hteck­
14
u n d Dreieckku rven, a be r sie d ü rften leicht zu
15 { 0 }, I I Tri ang le
16 { 0 }, II Sawtooth ve rste h e n sei n . Die s e t u p -F u n kt i o n ruft
17 { 0 }, II Square l e d i g l i c h a l l e vier F u n ktionen a u f.
18 }; Vor d e r l o o p - F u n kt i o n werden noch zwei
19
20 weitere Kon stanten d efi n ie rt. .w a v e_t y p e legt
21 u i n t 1 6_t p o s i t i o n = 0 ; fest, we lches S i g n a l a u f d e m DAC l a n d et u n d
22 f r e q u e n c y besti m mt d i e F re q u e n z des S i g ­
23 v o i d . c a l c u l a t e_s q u a r e ( )
n a l s. Die l o o p - F u n ktion sel bst u ntersc hei det
24 f o r ( u i n t 1 6_ t i = 0 ; i < S A M P L E S ' 1 2 ; i + + )
25 Wave Forms[ SQUAREJ [ i J = 2 5 5 ; sich von den bisherigen n u r d u rc h . d e n Auf­
26 W a v e F o r m s [ S Q U A R E J' [ S A M P L E S - i - 1 J = 0 ; ruf d e r F u n kt i o n d e l a y M i c r o s e c o n d s . Der
27 } '
sorgt d afü r, dass das Signal nicht m e h r u n ge­
28
29 brem st, s o n d e r n mit der g ew ü n schten F re­
30 q u e n z a u sgegeben wird. Die Konfi g u ration
31 v o i d c a l c u l a t e_t � i a n g l e ( ) { im Listi n g e rzeugt a l so e i n Sägeza h n-Sig n a l
32 u i n t 8_t v a l u e = 0 ; .
m i t e i n e r F req uenz v o n 1 O Hz.
Änderung
33 f o r ( u 1 n t 1 6_t i = 0 ; i < S A M P L E S I 2 ; i + + ) {
' D u rc h zwe i e r Ko nstanten l a s ­
s e n s i c h m i t d i esem P rog ra m m d i e E i g e n ­
34 W a v e fo r m s [ T R I A N G L E J [ i J = v a l u e ;
(' ' 35 W a v e F o r m s [ T R I A N G L E J [ S AM P L E S - i - 1 J = v a l u e ;
36 va lue += 2;
sch aften des e rzeugten S i g n a l s recht ei nfach
37
38 va r i i e r e n . A l l e rd i n g s m u ss dazu d a s P ro­
39 . g ra m m jedes Mal neu ü be rsetzt und auf den
40 ESP32 gespielt werd e n . Sonderlich ko mforta­

f o r ( u i n t 1 6_t i = 0 ; i < S A M P L E S ; i + + ) {
41 voi d ca l cu l ate sawtoot h ( ) {
42 bel ist das n icht.
43 W a v e F o r m� [ S A W T O Ö T H J [ i J = i ; E i n e s i n nvol l e Erweiterung wäre a l so eine
44 M ög l i c h keit z u r Ä n de r u n g der Werte von
45
w a v e_ t y p e u n d f r e q u e n c y von a u ßen. Das
46
47 kön nte zum Beispiel ü be r d i e serie l l e Sch n itt­

f o r ( u i n t 1 6_� i = 0 ; i < S A M P L E S ; i + + ) {
48 vo i d ca l c u l a t e s i ne ( ) stel l e, per WLAN oder per B l u etooth erfolgen.
49
Den kba r wä re auch der E i n satz weiterer H a rd­
50 u i n t 1 6_t d e g r e e = m a p ( i , 0 , 2 5 5 , 0 , 3 5 9 ) ;
51 WaveForms [ S I N E J [ i J = i n t ( 128 + 1 2 7 * s i n ( de g r e e * PI 1 8 0 )) ; wa re, wie zum Beispiel eines Potentiometers.
52 Pri nzi p i e l l s i n d solche E rweite r u n g e n kei n
53 P r o b l e m , a be r m a n m u s s d a b e i beachten,
54
d a s s zu sätzl i c h e r Code i n d e r l o o p - F u n kt i o n
55
56 voi d setup ( ) { s i c h a u f d a s Laufzeitverha lten a u swi r kt. Z u m
57 c a l c u l a t e_s q u a r e ( ) ; B e i s p i e l b e n ö t i g e n Z u g riffe a u f d i e seri e l l e
58 c a l c u l a t e_t r i a n g l e ( ) ; .
· S c h n ittste l l e verg l e i c h sweise v i e l Zeit, u n d
59 c a l c u l a t e_s a w t o o t h ( ) ;
60 c a l c u l a t e_s i n e ( ) ; d i e m ü sste b e i d e r Berech n u ng d e r Ve rzöge­
61 r u n g m itte l s d e l a y M i c r o s e c o n d s b e r ü c k­
62 s i c htigt werd e n . A n dernfa l l s hätte d a s S i g n a l
63
64 c o n s t W a v e T y p e s w a v e_t y p e = S A W T O O T H ; n i c h t m e h r d i e g ew ü n schte F req u e nz.
0
65 c o n s t u i n t 1 6_ t f r e q u e n c y = 1 0 ; Das w ü rd e a b e r n u r d a n n fu n kt i o n i eren,
(' 66 wen n d i e Laufzeit a l l e r Anwe i s u ngen, d i e in
67
der l o o p- F u n kt i o n zusätz l i c h zu d a c W r i t e
68 vo i d l o op ( ) {
69 d a c W r i t e ( D A C 1 , W a v e F o rm s [ w a v e_t yp e J [ po s i t i o n J ) ; a u s g efü h rt werd e n , ko nstant wä re. Das ist
n 70 pos i t i on++; höchst u n wa h rschei n l ic h u n d l ä sst sich zum
71 po s i t i on %= SAMPLE S ; . Beispiel fü r Code, d e r a u f d i e serie l l e Schn itte
72 d e l a y M i c r o s e c o n d s ( M I C R O S_P E R_S A M P L E f requency l ;
73 ste l l e zug reift, ka u m g a ra ntieren. Der Kön i g s­
n weg wäre es da·her, das Senden der Daten i n ­
terru ptgesteuert oder per DMA zu erledigen .

48 1 Make: ESP32 special 20 1 9


Das w ü rd e a be r d e n Ra h m e n des Arti ke l s
sprengen.

Am schnel lsten
Alternativ zur Erze u g u n g einer Rechteckspan­
nung per DAC ka n n m a n natü rlich auch ein­
fach einen G P IO-Pi n s des ESP32 n utzen und
ei nfach seine Ausgangs level zwischen H i g h
u n d Low h i n u n d h e r schalten. Dabei erreicht
m a n F requenzen von k n a p p 4MHz. List i n g
Toog lePin.ino zeigt, wie es fu n ktioni ert.

Fazit
Die Dig ita l-/A n a l og -Wa n d l e r werten den
Das USB-Dszilloskop ist mit 4MHz bei der Darstellung schon überfordert.
ESP32 a l s Plattform noc h m a l deutlich auf, i n s­
beso ndere weil s i.e so ei nfach zu bed ienen
s i n d . Zur Ausgabe von Audiosi g n a l e n reichen
sie a l le m a l und fü r d iesen Zwec k g i bt · es be­
reits ausgefei l te B i b l iotheken (http://www.
xtron ical .com/the-dacaud io-l ibra ry-down load­
and-insta l l atio n/) . Aber auch fü r viele a n d ere
Anwe n d u ngen, die auf a n a logen S i g n a l e n
basieren, sind s i e eine g roße H i lfe. -dab

c
c Togg l ePi n . i no
( 1 c o n s t u i n t 8_t T O G G L E_P I N = 2 5 ;

(
2
3 voi d setup ( ) {

c
4 p i n M o d e ( T O G G L E_P I N , O U T P U T ) ;
5

(
6
7 voi d loop ( ) {
8 d i g i t a l W r i t e ( T O G G L E_P I N , H I G H ) ;
( 9 d.i g i t a l W r i t e ( T 0 G G L E_P I N , L O W ) ;
10
(
Mit einem leistungsfähigeren Oszilloskop kann man die Signale genauer anzeigen.
HALL-S E N SO R �----- ----

Magnetfelder
ntessen
N icht n u r Fu nkwelle n d ressiert d e r ESP32 mit Leichtigkeit.
Dank eines e i n g eba uten Hall-Sen sors fü hlt e r sich a uch in
Magnetfeld ern sch n e l l h e i m isch .

von M a i k Schmidt

Alles z u m Artikel
I im Web unter
.... make-magaiin.de/xwpn

--

50 I Make: ESP32 special 201 9


(
H a i i-Sensoren n utze n d e n n a c h Edwi n
H a l l benan nten H a l l-Effekt, um M a g n et­
fe l d e r zu messen. Der H a l l - E ffekt besch rei bt
c ke n oft in Lautsprechern, Ko pfh örern u n d i n
m a n c h e n Ki n d e rs p i e l z e u g e n . S i e s i n d a be r
a u c h bei v i e l e n O n l i n ec H ä n d l e r n i n u nter­ c Ha L L Sensor . i no
d a s E ntste h e n e i n e r S pa n n u n g a n e i n e m schied l i c h e n Formen und G rößen e r h ä l t l i c h .
( 1 voi d setup ( J {

(
stro m d u rchfl o s s e n e n Leiter, der sich in Beim U m g a n g m it Neodym-Ma g n eten i s t 2 S e r i a l . be g in ( 1 1 5200 J ;
e i n e m M a g n etfe l d befi n d et. e i n e gewisse Vo rsicht ratsa m , d e n n s o l c h e 3

(
Das klingt n a c h d e m Physik-U nterricht in M a g n ete kön n e n m a g n etisierte Datenträger, 4
5 voi d loop ( ) {

c
d e r Sch u l e, a be r H a l l - S e n soren s i n d e i n e wie z u m B e i s p i e l M a g n etstreife n a u f EC­ 6 Seri a l . println(
p r a ktische A n g e l e g e n h e it, wen n m a n z u m oder Kred itka rten d u rc h a u s zerstören. Ferner ha l l Read < J J ;

c 8
7 de l ay ( 1 0D J ;

---_j
Beispiel konta ktlose u n d weitestg ehend ver­ sind die Mag n ete oft seh r klein und kö n ne n
s c h l e i ßfreie S c h a lter braucht. V i e l e M e n ­ von Kl e i n ki n d e r n versc h l u c kt werd e n .
s c h e n ko m m e n bei n a h e täg l i c h m it H a l l-Sen­ F ü r erst� Exper i m e nte m i t d e m H a l l-Sen­ _r �
soren i n Berü h ru n g und m erken es gar nicht. sor ist es h i lfreich, d i e Messwerte im serie l l e n
Die Sensoren stecken u nter a n d erem oft i n P l otter d e r A rd u i n o- I D E zu betra c h t e n . D e r 1 00 M i kroseku n d e n e i n g e l egt. Bei
d e n G u rtsc h l össe_rn moderner Autos, u m zu verb i rgt s i c h h i nter d e m M e n ü Werkze uge > 1 000 Messungen s u m m iert sich die Gesa mt­
erken nen, o b j e m a n d a n g e sc h n a l l t i st. A u c h Seriel l e r P l otter. Bei e i n e m e rsten Test wurde wa rtezeit so auf eine M i l l isekunde, was fü r die
zur Erke n n u ng von offenen Tü ren w e r d e n sie der H a l l-Sensor fü r d i e e rsten knapp 1 00 a u s­ meisten Anwen d u n g e n vernachlässigbar sein
gerne verwe n d et. g e g e b e n e n Werte i n R u h e g e l a ss e n . Da n n d ü rfte.
w u rd e e i n Neodym-1'0ag net b i s u n g efä h r Beso n d e rs zu beachte n ist ir_l der l o o p ­
E i ngeordnet z u m zwe i h u n d e rtsten Wert i n d i e N ä h e des F u n ktion der Datentyp d e r Va riablen va l u e .
Sensors g ebracht. Nach einer weiteren R u he­ Der m u ss so gewä h lt werden, d a ss es n icht
Wie d i e Berü h r u n g s s e n soren l ä sst s i c h d e r p h a se ka m der M a g n et noch e i n m a l i n u m ­ zu einem Ü berlauf kommt.
H a l l - S e n s o r d e s E S P 3 2 m i t e i n e r e i nzigen g e ke h rter R i c h t u n g zum E i n satz. Lädt man das P rog ra m m a uf den ESP32
F u n kt i o n a u s l e s e n . ln d i esem Fall h e i ßt s i e Die Messdaten ergeben d u rc h a u s e i n e und w i e d e r h o l t d a s Experi m e n t mit e i n e m
h a l l R e a d . L i sti n g H a i i Se n s o r . i n o ruft d i e Rechteckku rve, a be r es g i bt e i n i g e A u s rei ßer. Neodym-Mag neten, d a n n e rg i bt sich e i n
F u n kt i o n a l l e 1 00 M i l l i se k u nd e n a u f u n d I n s be s o n d e re i st die Ku rve d u rchweg recht d e u t l i c h r u h i g e res B i l d i m seri e l l e n P l otter
sendet i h re n R ü c kg a bewert a n d i e s e ri e l l e · zittrig, obwo h l sich i n s b e s o n d ere d a n n , der Ard u i no-IDE. U n g efä h r bei Messwert 280
Schn ittste l le. w e n n kei n M a g n et i n der N ä h e i st, n ichts t u n wu rde der Mag net noch e i n m a l in derselben
Nachdem d a s P rog ra m m a u f d a s Deve­ sol lte. Das l ä sst sich a be r l e i c h t beheben. Ausrichtung a n den Sensor gebracht wie zu
lopm ent-Boa rd g e l a d e n wu rde, ka n n man i m Anfa n g . Diesmal wa r der A bsta nd zum Sen­
seri e l l e n M o n itor s e h e n , we l c h e n Wert d e r M a g netisch u n d ·
s o r a l l e rd i n g s geringer und so fi e l e n d i e
H a l l - S e n s o r g e r a d e m i sst. N ä h e rt m a n s i c h Messwerte entsprechend höher a u s .
stro m li n i enförm i g
d e m Board m it e i n e m Mag neten, ka n n m a n
d i e Verä n d e r u n g i n d e n We rte n sofort sehen. Wie bei vielen Sensoren, ist e s a u c h beim H a l l ­ Mag netl ichtscha lter
D i e Abstä n d e zwi s c h e n zwei bena c h b a rten S e n s o r des ESP32 s i n nvo l l , d i e Messwerte
Werten entsprec h e n d a bei u n g efä h r e i n e m nicht d i re kt zu i nterpretieren, sondern D u rch­ M i t verl ä s s l i c h e n S e n s o r-Daten i st es e i n
M i l l itesla (mT) . schn ittswerte über ku rze Zeiträ u m e zu erm it­ Leic htes, d e n H a l l-Sensor a l s konta kt losen
D e r verwe n d ete M a g n et m u ss a l l e rd i n g s tel n . Listi ng H a i i SensorAvg . i n o tut geriau das. Schalter ei nzu setzen . Das ku rze P rog ra m m i n
schon e i n igermaßen sta rk s e i n u n d d i e bes­ Statt d i e Messwerte d i rekt auf der serie l l e n �ist i n g H a i i Switc h . i n o schaltet d i e Status-LED
ten Effekte e rzi e l e n Neodym-M a g n ete. N eo­ S c h n itts t e l l e a u szugeben, w e r d e n jewe i l s des Entwickl u n g sboards ein, soba ld ein Mag­
dym zä h l t zu den Seltenen Erden und w i rd 1 000 Werte a k ku m u l i e rt u n d a m E n d e d e r n et nah g e n u g am Boa rd i st. Entfe rnt m a n
zur H e rste l l u n g der d e rzeit stä rksten D a u e r­ D u rchsch n ittswert g e b i l d et. Zwi schen d e n d e n M a g neten, scha ltet d a s Prog ra m m d i e
mag neten verwe n d et. S o l c h e M a g nete ste- e i n ze l n e n Mess u ngen wi rd e i n e Pause von LED wieder a u s .

G coM6 0 X

3 00 . 0

oo o
: .

1 00 . 0

0.0

-100 . 0

Neodym-Magnete in vielen Formen und Größen . Die Hall-Sensor-Werte erscheinen manchmal etwas zittrig.

Make: ESP32 special 20 1 9 1 51


Der Code i st e i n e leichte Abwa n d l u n g von
Listi n g H a i i Se n s o rAvg . i n o u n d d efi n i e rt zu­
H a L L S� n s o r A v g . i n o n ä c h st Konstanten fü r den LED-Pin, fü r den
S c h we l l we rt u nterh a l b dessen d e r H a l l ­
1 c o n s t u i n t 1 6_t S A M P L E S = 1 0 0 0 ;
Sensor a l s a ktiv g i lt u n d fü r d i e Anza h l d e r z u
3 vo i d s e t up ( ) {
2 '
a g g regierenden Sensor-Werte. A n s c h l ießend
4 S e r i a l . be g i n ( 1 1 5 2 00 ) ; fo lgt eine F u n ktion n a m e n s c l e a n H a l l R e a d ,
5
d i e d a s ,.sau bere" A u s l esen des H a l l-Sensors
6
7 vo i d l o op ( ) { ü bern i m mt u n d leicht i n a n d eren Kontexten
8 � n t32 t va l u e = 0 ; wiederverwendet werden ka n n .
9 f o r ( u i n t 1 6 t i = 0 ; i < S A M P L E S ; i ++ ) { . D i e s e t u p- F u n ktion i n itia l i s i e rt d i e seri e l l e
10 va l u e += ha l l Read ( ) ;
11 d e l a y M i c r o s e c o n d s ( 1 00 ) ; S c h n ittste l l e u n d versetzt den L E D - P i n i n den
Ausgabemodus. Ä h n l i c h r u h i g geht es i n der
SAMPLE� ;
0 ' 12
13 Seri a l . pr i nt ln (va lue F u n kt i o n l o o p z u . D i e l iest d e n a ktu e l l e n
14
SensoreWert u n d berech n et dessen Absol ut-
betrag m i t h i l fe der a b s - F u n kt i o n . F ü r den
S c h a lter soll e s n ä m l i c h u n erheb l i c h s e i n ,
welche S e i t e des M a g n eten sich i h m n ä h e rt.
Daher geht es n u r um d e n a bsol uten Wert

G coM6
u n d n icht u m dessen Vorzeichen.
0 . X
Sch l i e ß l i c h verg leicht das Pro g ra m m noch
30 0 . 0
d e n g e l es e n e n Wert m i t d e m Schwe l l wert
u n d schaltet d i e LED entweder e i n oder a u s .

oo
Der Schwel lwert m u s s a u f jeden A n w e n ­
: .0
d u n g'sfa l l a bgesti m m t werden, weil er m a ß­
g e b l i c h vom e i n g esetzten Mag n eten u n d
10 0 . 0 d e r m i n i ma l e n D i sta nz z u m H a l l-Sensor
a b h ä ngt. Das ist beso n d e rs rel eva nt, we n n
d e r ESP32 i n e i n e m G e h ä u s e stec kt.
0 .0 N ä h e rt man s i c h dem .E S P 3 2-Board m i t
e i n e m M a g neten, n a c h d e m m a n das P ro­
g ra m m a ufs Board g e l a d e n hat, w i rd d i e Sta-
-1 oo . o +--------1or-
o-----;-
oo
_ _____o
t-
1 o-----4;-o -------1
o- s oo 3
: tus-LED a b e i n e m besti m mten A bsta nd ein-
r==
li!� =
::::::=
:::::;roo =::::::=
::!!.aud ::::::""'
i .;,"j g e s c h a ltet. S o b a l d d e r M a g n et d iesen Ab-
L____:__________________�-------=====::::J
sta n d wieder ü bersch re itet, erl ischt die LED.
Die Sensor-Werte werden deutlich sauberer, wenn man sie aggregiert.
'
I rgendwas m it I nternet
E i n solcher Mag n etscha lter kön nte pri nzi pie l l
V
d a z u d i e n e n , offe n e T ü r e n o d e r F e n ster z u
,
Ha L L Swi t ch . i no erke n n e n . A u c h kö n nte m a n fests t e l l e n , ob
e i n Gegensta n d bewegt w u rde. Dazu m ü sste
1 c o n s t u i n t 8_t L E D_P I N = 2 ; m a n den Gegenstand l ed i g l ic h in der N ä h e
2 c o � s t u i n i8_t T H R E S H O L D = 4 0 ;
5 c o n s t u i n t 1 6_t S A M P L E S · = 1 0 Ö Ö ; des Sensors p latziere n u n d m i t einem Mag­
4. neten verse h e n . We i l es Neodym-M a g n ete
5 i n t 1 6_t c l e � n H a l l R e a d ( ) { a u c h a l s Kle bestreife n g i bt, i st das gar n icht
6 i n t 3 2_t v a l u e = 0 ;
so schwierig.
7 f b r ( u i ri t 1 j t i = 0 ; i < S A M P L E S ; i ++ ) {
8 va l u e += ha l l Re a d < > ; Jedoch w ü rd e d e r Scha lter i n seiner jetzi­
9 d e l a y M i c r o s ec o n d s ( 1 0 0 ) ; gen Form n icht viel n utzen, d e n n er müsste
10 }
d i e Info r m a t i o n d a rü ber, d a s s er a ktiviert
11 r et u r n v a l u e . I S A M P � E S ;
12 w u rde, ja noch i rgendwie weitergeben. Dazu
13 d rä n g e n s i c h die WLAN- F ä h i g keiten des
Cl
14 vo i d s e t u p ( ) { ESP32 g e radezu a uf. Das hei ßt, wa n n i m mer
15 S e ri a l . be g i n ( 1 1 5 2 00 > ;
(
16 d e r Schalter a ktiviert w i rd, soll e r e i n e Nach­
' p i n M o d e ( L E D_P I N , O U T P U T ) ;
17 } richt senden.
18 Z u k l ä ren i st dann i m mer noch, woh i n der
19 v o i d' l o o p O {
ESP32 eine N a c h richt senden sol l . Beispiels­
20 i f ( a bs ( c l eanHa l l Read ( ) ) > THRESHOLD)
21 d i g i t a l W r i t e ( L E D_PI N , H I G H ) ; weise kön nte e r eine E-M a i l oder eine SMS
22 e l se ü b e r einen ents p rec henden I nternet-Dienst
23 d i g i t a l W r i t e ( L E D_PI N , L O W ) ; s c h i c ke n . F ü r d iesen F a l l wä re das e i n e h a l b-
24
. wegs a kzepta b l e Lös u n g , a b e r we n n m a n
g l eichzeitig e i n e H i storie a l l e r Schalterbewe­
-�---J g u n g e n fü h re n möchte, kom m t man d a m it

5 2 1 Make: ESP32 specia l 2 0 1 9


n i c h t weit. N o c h d e u t l i c h e r w i rd d a s, w e n n G Bibliotheksverwalter X

d e r E S P 3 2 a n d e re S e n s o r-Werte, w i e zu m
v I Themo ]AIIe V I Ithingspeakj
B e i s p i e l Tem pe ratu r-Daten s e n d e n sol l . D i e
'"'-k by -Worb .
stiften per S M S oder E-M a i l n u r w e n i g S i n n . ThingSpeak Communication Ubrary for Arduino, ESP8206 • EPS32Thing5peiik ( ht:tps://WVM".'thingspttllk.com ) is a n •na lytic IoT
pbltform service that allovs you to a g g regat., visualize and an•lyz• live data streams in the clou d .
E i n e weitere m ö g l i c h e Lös u n g des P ro­ �
b l e m s wä re die P rog ra m m ie r u n g e i n e r Web­
·
Anwe n d u n g , die ü be r den Zusta n d des
Scha lters i n fo r m i e rt. Der ESP32 kön nte d a n n
i m F a l l e e i n e r Ä n d e r u n g e i n e Anfra g e a n Die ThingSpeak-Bibliothek kann über den Bibliotheksverwalter installiert werden.
d iese Web-Anwe n d u n g ste l l e n . A l lzu er­
q u i c k l i c h ist d i ese Vorste l l u n g a be r n i c ht,
d e n n e i n e s o l c h e Web-Anwe n d u n g zu pro­
g r a m m i e ren und z u betre i b e n ist a n stren­
gend u n d zeitra u be n d .
Da n ken swerte r Weise g i bt es m itt l e rwe i l e

S i g n up T h i ngSpea k
v i e l e IoT- P i a ttfo r m e n , d i e a l l d iese P r o b l e m e
fo r
a u f e i n e n S c h l a g l ö s e n . I h r e i n z i g e r Zweck
, lt is free to sign up for ThingSpeak. Free accounts �ffer a fi.JIIy functional experience on ThingSpeak with Iimits on certain functionality.
ist es, Daten von I oT-Geräten zu sa m m e l n, Commercial users may sign Up for a time-limited free evaluation. To send'data faster to ThingSpej:tk o r to send more data, consider our paid
s i e a n zentra l e r Ste l l e zu r Verfü g u n g zu license options for commercia_l, academic, home and student usage.

ste l l e n und a n s p r e c h e n d a u fzu b e reite n . To start using ThingSpeakyou must create a new MathWorks account, or, click cancel and log i n using an existing Mat�Works account.

F e r n e r b i et e n s i e d i e M ö g l i c h keit, a u f bec
Create MathWor1<s Account
sti m mte M u ster in den Daten a ut o m a t i s c h

""' r- � �
zu rea g i e r e n . Em;�ll Address

F ü r d e n jetz i g e n A n w e n d u n g sfa l l fie l d i e [ contaCt@malK-sc.nrnidtde


Wa h l o h n e b e s o n d e r e n G r u n d a u f Th i n g ­ B To access your o rganlzation 's MATLAB license, use your
schOol or work emall . . . DATA A ATIO N

� 1
Spea k ( http://t h i n g s pea k.com/). D i e P l att­ • . AND ANALYTICS
Location ___, c;JThlngSpeak· ,
[ Germany
.
fo rm ist po p u l ä r, fü r viele Anwen d u n g sfä l l e
koste n l o s u n d s i e w i rd v o n v i e l e n P ro g r a m ­
H � �· 9
MATLA B'

�·
FirstName
m i e ru m g e b u n g e n u nterstützt. A u c h fü r d i e
A rd u i n o-I D E g i bt es e i n e B i b l i o t h e k, d i e s i c h
! Mail<
o l ��
� .
S M A R T CONNECTID D E V I C E S
. �
Last Name
ü be r d e n B i b l i o t h e ksve rwa l t e r i n sta l l i e re n f Schmidt o l � ALGORITHM DEVHOPMENT
S E N S O R ANALYTICS

l ä sst. Dort m u ss m a n i m S u c hfel d n u r T h i n g :


Spea k e i n g e b e n u n d d a n n d e n I n sta l l i e re n -
Knopf d rü c ke n . Eine Anmeldung b e i ThingSpeak ist schnell erledigt.
Da m i t wä re d i e U n te r s t ü tz u n g a u f d e r
Seite des C l i ents s c h o n m a l vorbere itet. U m
T h i n g S p e a k n u tzen zu kö n n e n , m u ss m a n M a g n etsc h a lte r
s i c h d o rt z u n ä c h st reg i s t r i e r e n . W i e ü b l i c h
Channei iD: 1 Dies ist ein Ka nal zur
g i bt m a n e i n e E-M a i l -Ad resse u n d e i n P a s s­ Author: • · Überwachung eines
wort a n . Z u sätzl i c h w i rd n o c h e i n B e n utzer­ Access: Private Magnetschalters.

n a m e v e r l a n g t . Hat m a n sich e rfo l g re i c h re­


g i striert und sei n e E-Mai l-Ad resse verifiziert,
Private View Public View Channel Settings Sharing API Keys Data Im port / Export
ka n n es d i re kt losg e h e n .
Wer D a t e n ü be r T h i n g S pea k sa m m e l n
m ö c h te, m u s s d i e s i n F o r m v o n Ka n ä l e n D Add Visualizations D Add Widgets

( C h a n n e l s ) t u n . D i e werd e n ü be r d i e F u n k­
P.;l Export recent data MATLAB V1sL ac�;:at1 on
t i o n N e w C h a n n e l a n g e l egt. J e d e r Ka n a l

C h a n n e l Stats
beko m m t e i n e n N a m e n u n d e i n e Beschrei­
bung. Ferner ka n n e r g l e ichzeitig b i s zu a c h t
vers c h ied e n e S e n s o r- D a t e n in Form so
Entries: 0
g e n a n nter F e l d e r ( � i e l d ) s a m m e l n . F ü r d e n
Mag netsc h a lter reicht e i n e i n z i g e s F e l d .
f1eld 1 Chart 13' 0 .f X
D a r ü b e r h i n a u s ka n n m a n j e d e n Ka n a l
m it e i n e r g a nzen Rei h e v o n Meta- I nfo r m a ­
Magnetschalter
t i o n e n Verse h e n . D a z u g e h ö re n u nter a n de­
rem Li n ks a u f e i n e zum Ka n a l g e h ö re n d e
Webseite o d e r e i n G i t h u b- P roje kt. N ützl i c h
i s t d i e Mög l i c h keit, d a s l oT-G e rät m i t e i n e r
P o s i t i o n zu verse h e n , d e n n i n s be s o n d e re
fü r G e räte, d i e U mwelt-Daten a u fze i c h n e n ,
Date
ist d a s e i n e w i c h t i g e I nfo r m a t i o n . F ü r e i n e n ThingSpult.com

ersten Test-Ka n a l ka n n m a n d i e m e i st e n
Felder leer lassen. Schon ist der Kanal für den Magnetschalter angelegt.

M a ke: ESP32 speciai 201 9 J 53


HALL-S E N SO R 1·-----
- ---
M ag netsc h a lter
Soba l d m a n d e n Save C h a n n e i - Kn o pf
d rü c kt, w i rd d e r Ka n a l a n g e l egt u n d be­
Channel lD: - Dies ist ein Kanal zur Überwachung eines ko m mt e i n e C h a n n e i - I D, die i h n e i n d eutig
Author: Magnetschalters.
i d e ntifiziert D i e benötigt m a n , u m vom
Access: Private
E S P 3 2 a u f d e n Ka n a l zug reife n zu kö n n e n .
Darüber h i n a u s braucht m a n n o c h e i n e n API­
Private View Pu blic View Ch a n nel Settings Sharing API Keys Data I m p o rt I Export
Key, d e r. sich a u f d e r Th i n g S peak-Seite h i nter
dem Reiter API Keys verbirgt A P I -Keys g i bt
Write API Key Help es fü r lesende u n d s c h re i b e n d e Z u g riffe. l n
API keys enable you t o write data to a channel o r read data from a d iesem F a l l reicht d e r fü r sch reibende, wei l
private channel. API keys are auto-generated when you create a new
channel.
d e r ESP32 d i e Daten n i c h t l iest Mit der Chan­
n e l - I D u n d d e m A P I -Key fü rs S c h reiben steht
API Keys Sett i n g s
der I m p l e m e nt i e r u n g des C l ients · n i chts
Generate New Wnte API Key
• Wrtte API Key. Use thls key t6 write data to a channel. lfyou feel
mehr i m Wege.
your key has been conipromlsed, click Generate NewWrfteAPI

Key.

Read Keys
• Read API Keys: Use this key to a\low other people to view your
API private channel feeds and charts. Click Generate New Read API
D i g ita ler Türwächter
Key to generate an additional read key forthe channel.
Key • Note: Use this field to enter Information ab�ut channel read
keys. For eiample, add notes to keep trackof users with acce�
l n e i n e m fi n a l e n P roje kt w e r d e n n u n a l l e
to you r channel. Fäden zusa m m e ng efü h rt Listing H a i i Se n so­
Note r l oT. i n o i m p l e m e nt i e rt e i n e n d i g it a l e n Tü r­
API Requests
wächter, d e r e i n e 1 an Th i n g Speak s e n d et,
Update a Channel Feed
wen n der M a g n etsc h a lter a ktiviert ( "Tür zu")
GEl https : //api . thingspe a k . corrt/ update �api_key=P787WXE JIJ

'*"' w i r d . W i rd der M a g n etsc h a lter d e a ktiviert,


sendet d a s Progra m m e i n e 0 C,Tü r a uf") .

jj
Get a Channet Feed
-
Das Prog ra m m besteht i m Wesen t l i c h e n
GET
,,
https : / / a p i . thingspeak . c001/ c h a n n e l s /689841/feeds .

Generate New Pead API Key


a u s beka n nten Tei l e n u n d beg i n nt m i t d e r
E i n b i n d u n g d e r notwe n d i g e n B i b l iotheken.
A n s c h l i e ß e n d werden d iverse Kon sta nten
API-Keys sichern den Zugang zum Kanal ab.
d efi n i e rt, von d e n e n l ed i g l i c h C H A N N E L_ I D
u n d A P I _K E Y n e u s i n d . S i e m ü ssen m i t d e n
e i g e n e n W e r t e n fü r d i e Th i n g S pe a k-C h a n ­
Channei i D: Dies i st e i n Ka n a l zur Ü be rwac h u n g eines
nel- I D u n d d e n A P I - Key belegt werd e n . A n a ­
Author: Magnetschalters.
l o g e s g i l t fü r d i e Kon stanten s s I D u n d P A S S ­
Access: Private
W O R D , d i e a n d i e Gegeben h eiten des l o ka l e n
WLA N - N etzes a n gepasst werden m ü ssen.
Des Weiteren werden a u f d e r g l o b a l e n
Private View P u bl i c Vi ew C h a n n el Setti ngs Sha ri ng AP l Keys Data Impo rt 1 Export
E b e n e zwei Va ria b l e n n a m e n s c l i e n t und
i s c l o s e d a n g elegt E rstere wi rd fü r den Zu­

II I
g riff a u fs WLAN benötigt und d i e zweite re­
C Add Visualizati ons C Add Widgets � Export recent data . präsentiert den Zu sta n d d e r i m a g i n ä ren Tü r.
A n der F u n kt i o n c l e a n H a l l R e a d hat sich
C h a n n e l Stats n i chts g eä n d ert. N e u i st h i ngegen d i e F u n k­

i!.PR\!�.��,9,\![,�"1!�2
tion u p d a t e C h a n n e l . S i e sendet d e n a ktuel­

Last entry: �"r,ni[.!!,!,t,��.i.!Ji:,R


Created:
l e n Zu sta n d d e r T ü r a n Th i n g Spea k u n d
d o k u m e nt i e rt d e n Vo rg a n g a u sfü h rl ic h a u f
Entries: 7
d e r serie l l e n S c h n ittste l l e. Der e i g e n t l i c h e
Sch reibvorg a n g w i rd d u rc h d e n Aufruf v o n
T h i n g S p e a k . wr i te F i e ld bewe rkste l l igt.
Field 1 Chart C? 0 tf X
Diese F u n kt i o n e rwa rtet d i e C h a n nei-I D, die
N u m me r des zu besch reiben d e n Feldes, den
Magnetschalter zu schreibenden Wert u n d d e n API-Key.
1 .5
Die F u n kt i o n g i bt d e n We rt 200 z u r ü c k,
"Cl
� wen n a l l es i n O rd n u n g i st. Wer m i t d e m
t:
� H TTP-Sta n d a rd vertra ut i st, w i rd s i c h s c h o n
�� 0.5
d e n ke n kö n n e n , was u nter d e r H a u be d e r
-!e
ti 0 F u n kt j e n p a s s i e rt S i e setzt l ed i g li c h HTTP­
"'

-0 . 5 · -

20:24:30
- 2 0 : 2 4 :45 2 0 : 2 5 :00
A nfra g e n ab u n d reicht den Status-Code der
Anfrag e u n g efi ltert d u rc h . I m Prinzip ist d i e
Date
S c h n ittstel l e von Th i n g Speak e i n e sehr einfa­
ThingSpeak.com
c h e Web-S c h n ittste l l e und es wäre problem­
los m ö g l i c h , s i e a u c h d i rekt m i t h i lfe der WiFi­
B i b l i ot h e k zu i m p l e m e ntieren. Die T h i n g ­
ThingSpeak bereitet die Schalterdaten ansprechend auf. Speak- B i b l iothek m a c h t es jedoch e i n wen i g

54 1 Make: ESP32 special 201 9


beq u e m e r . U nter a n d erem h a t s i e s c h i c ke ·'1

F u n ktionen, um m e h r a l s e i n e n Wert g le i c h ­
z e i t i g zu s c h r e i b e n . n H a l l S e n s o r loT . i n o
D i e s e t u p - F u n kt i o n b ietet a u c h ka u m
1 # i n c L u d e <W i F i . h >
Neues u n d i n itia l i si e rt h a u ptsä c h l i c h d i e seri­ 2 # i n c l ude " T h i ngSpea k . h "

c o n s \ u i n t 8_t L E D_P I N = 2 ;
elle Sch n ittstel l e, d a s WLAN und d e n Pin der 3
Status-LED. Die w i rd n ä m l ic h zu Debug g i n g ­ 4
5 c o n s t u i n t 8_t T H R E S H O L D = 4 0 ;
Zwec ken i m m e r noch e i n - u n d a u sgesc h a l ­
6 c o n s t u i n t 1 6_t S � M P L E S = 1 0 0 0 ;
tet. N e u i st l ed i g l i c h d e r Aufruf v o n T h i n g ­ 7 •

S p e a k . b e g i n, d e r d i e T h i n g Spea k- B i b l iothek 8 const c h a r * S S I D = ·· s s r o 'e i n t r a g e n " ;


m it d e m WLAN-C i i e n t verbi n d et. 9 const c h a r * P A S S W O R D = " Pa s s w o r t e i n t ra g e n " ;
10 const u i n t 3 2_t C H A N N E L_ I D = 0 ; I I C h a n n e l - I D e i n t r a g e n
Sch l i e ß l i c h fo l g t die l o o p - F u n kt i o n und 11 const c h a r * A P I_K E Y = " A P I - K e y e i n t r a g e n " ;
die m u sste g e r i n gfü g i g g eä n d e rt werd e n , (\ 12
d a m it d i e F u n kt i o n d e n Sta t u s d e s T h i n g ­ 13 Wi F i C l i ent c l i en t ;
14 boo l i s C l o s e d = f a l s e ;
Speak-Ka n a l s a u c h wirklich n u r d a n n ä n d e rt, �
15
w e n n s i c h d e r Sta t u s d e s M a g n etscha lters 16 i n t 1 6, t c l e a n H a l l R e a d ( )
ä n d e rt. 17 �
i n t 2_t v a l u� = 0 ;
18 f o r ( u i n t 1 6_t i = 0 ; i < S A M P L E S ; i + + ) {
ln der Vo rg ä n ge rversion hat die F u n ktion
19 v a l u e += h a l l R e ad ( ) ;
n ä m l ic h d i e Status-LED so lange i m me r wie­ 20 d e l a yM i c ro s e c o n d s ( 1 00 ) ;
d e r e i n g es c h a ltet, w i e d e r M a g n et s c h a l t e r 21
a ktiviert war. Sel bst wenn d i e LED schon e i n ­ 22 r e t u r n v a l u e I S A M P L E S;
23 }
geschaltet w a r . Bei L E D s i s t d a s kei n Problem, 24
(1
a be r bei O n l i ne-Diensten s c h o n . Zwa r kostet ' 25v o i d u p d a t e C h a n n e l ( c o n s t u i n t 8_t v a l u e )
d i e N utzu n g von Th i n g Spea k fü r priv a te 26 S e r i a l . p r i n t l n ( " N e u e r W e r t f ö r den Kana l : " + S t r i ng ( va l ue ) ) ;
27 i n t 1 6_t r e s u l. t = T h i n g S p e a k . w r i t e f i e l d ( C H A N N E L�I D , 1 , v a l u e ,
Zwecke n i chts, a be r d e r Dienst h a t d iver s e
f""\ . ' A P I_K E Y ) ;
Besc h rä n ku n g e n . U nter a n d erem d a rf m a n 28 i f ( r e s u l t == 2 0 0 ) {
e i n e m Ka n a l n u r a l l e ·1 5 Seku n d e n n e u e 29 S e r ta l . p r i n t l n ( " K a n a l w ü r d e a k t u a l i s i e r t . " ) ;
Werte h i nzufü g e n . 30 } e l se {

/'
31 S e r i a l . p r i n t l n ( " Ka n a l . kon n t e n i c h t a k t u a l i s i e r t w e r d e n : " +
V o r einem e rsten Test sol lte m a n d i e Web­ S t r i ng ( resu l t ) ) ;
Seite des T h i n g S pe a k- Ka n a l s a u frufe n , a u f 32 }
d e m d i e Anfra g e n d e s E S P 3 2 l a n d e n . Da n n 33
34
l ä d t m a n d a s P rog ra m m a u f d e n E S P 3 2 ,
35 voi d setup ( ) {
öffn et d e n seri e l l e n M o n itor u n d h ä l t e i n e n 36 S e r i a l , be g i n ( 1 1 5 2 00 ) ;
M a g n eten b e r e i t . N ä h e rt m a n s i c h d e m 37 p i n M o d e ( L E D_P I N , . O U T P U T ) ;
38 W i F i . m o d e ( W I F I_S T A ) ;
H a l l -S e n s o r m it d e m M a g n eten, s o l lte d ie s
39 T h i ngSpea k . beg i n (d i ent ) ;
i m seriel l e n M o n itor vermerkt werd e n . Ku rz 40 W i Fi . beg i n ( S S I D , P A S S WO R D ) ;
n a c h d e m d o rt d i e M e l d u n g erschei nt, d a s s 41
der Ka n a l a ktu a l i s i e rt w u rde, sol lte a u c h d i e 42 w li i l e ( W i F i . s t a t u s O ! = W L_C.O N N E C T E D ) {
43 d e l a y ( 5 0 0) ;
Webseite entsprec h e n d a n g e passt werd e n . 44 Seri al . p r i nt ( " . " ) ;
Entfe r n t m a n d e n M a g n eten n a c h e i n e r 45
Pause von m e h r a l s 1 5 Seku nden, w i rd e i n e 46 Seri a l . pr i nt ln ( " " ) ;
47 Seri a l . pr i n t f ( "Verbunden mi t % s . \n", S S I D) ;
weitere N a c h richt a n d e n Th i n g S pe a k- D i e n st
48 S e r i a l . p r i n t f ( " I P-Ad r e s s e : % s . \ n " ,
gesendet u n d d i e Webseite e r n e u t a kt u a l i ­ W i F i . l o c a l i P ( ) . t ö S t r i n g ( ) . c_s t r ( ) ) ;
s i e rt. I st d i e P a u se zu ku rz, g i bt d e r D i e n s t n 49
den F e h lercode 40 1 zurück. 50
r. ' 5 1 v o i d l o o p ( ) {
Viel e i nfa c h e r ka n n d e r U m g a n g m i t e i n e r 52 boo l s w i t c h Ac t i va t ed = a bs ( c l ea n H a l l Read ( ) ) > T H R E S H O L D ;
(
I oT- P i attfo rm n i c h t sein u n d T h i n g S pea k bie­ (\ 53 i f ( sw i t c h A c t i v a t e d && ! i s C l os e d )
tet noch jede Menge weiterer M ög l ic h keiten. 54 d i g i t a l W r i t e ( L E D_P I N , H I G H ) ;
n 55 i sC losed = t rue;
Dass e l be gilt a l l e rd i n g s auch fü r die Ko n ku r­
56 upda teChanne l ( 1 ) ;
t1
renz, wie z u m Beispiel Caye n n e (https://my­ 57 e l s e �f ( ! s w i t c h A c t i v a t e d & & i s C l o s ed ) {
d evices.co m/caye n n e/featu res/) o d e r A d a ­ 58 d i g i t a l W r i t e ( L E D_P I N , L O W ) ;
t1 59 i sC losed = fa l se;
fru i t 1 0 ( https://i o.ad afr u it.com/) . D i e A u s ­
: -6 0 u p d a t e C h a n ne l ( O ) ;
wa h l ist riesig u n d s i c h e r l i c h ist fü r j e d e n n 6 .1
etwa s dabei. n . 62 }

Fazit
d a h e r ist e s beg rüßenswert, dass d e r ESP32 l n d i e Werkze u g kiste g e h ö re n heute aber
.
H a l l-Sensoren g e h ö re n zu d e n v i e l e n u n ­ a utomatisch einen H a l l-Sensor m itbringt. a u c h I oT-Piattformen wie T h i n g S pea k, denn
'
sichtbare n H elfern, d i e d a s Leben ei nfa c h e r Beso n d e rs c h a rmant ist es, dass sich der sie m achen es e i nfa c h e r als je zuvor, Geräte
.
und sicherer m a c h e n . M a n c h moderne Tech ­ S e n s o r s o l e i c h t a u s l e s e n l ä sst. Es ·besteht m i t dem I n te rnet u n d s o m i t mit dem Rest
n o l o g i e w i rd d u rc h s i e ü berha u pt e rst m ö g ­ a l so A n l a s s zu r Hoffn u n g , dass n e u g i e r i g e cler Weit zu verb i n d e n . H i e r e röffn e n sich
l i c h . Trotzd em befi n d e n s i e s i c h l ä n g st n o c h B a s t l e r i h n fü r sich entdecken u n d i n i m me r gänzlich neue M ög l i c h keiten fü r spannende
n icht i n d e r Werkze u g k i ste a l l e r M a ke r u n d m e h r i n n ovativen P roje kten e i n setzen . Anwend u ng e n . -dab

Make: ESP32 special 201 9 1 55


HR U N GSS E N SO R E N �----

Touch nte!
N icht n u r d i e d ra ht l osen Komm unikations m ittel d e s ESP32
sind topmodern. E r punktet a uch bei d en Eing a b e m e d i en
und b ringt e inen ganzen Satz an B e r ü h rungssensoren m it.

von Maik Schmidt

Alles z u m Artikel
I im Web unter
• make-magazin.de/xucu

56 I Make: ESP32 special 20 1 9


(.
K a pazitive Berü h r u n g ssensoren g e h ö re n
h e ute z u m A l ltag, d e n n s i e s i n d es, d i e
d i e beq u e m e n To u c h - S c ree n s i n S m a rt­ ( TouchTes t . i no
GPIO-Pins m it
To uch-Sensoren
phones und Ta b l ets e rst mög l i c h m a c h e n .
c 1 vo i d s e t up ( ) {

c
Wie d e r N a m e schon sagt, rea g i e re n sol­ 2 S e r i a l . be g i n ( 1 1 5200 l ;
c h e S e n s o re n a u f Berü h ru n g , z u m B e i s p i e l 3 }

(
mit e i n e m F i n g e r. Dabei m u s s die Berü h r u n g 4
5 vo i d L oop ( ) {

c
n i cht s o n d e r l i c h sta rk s e i n u n d je n a c h Sen­
6 Seri al .println
sor reicht e r sog a r schon a u s, wen n s i c h die ( t ouchRead ( T O l l ;

c
H a n d nur i n der Nähe a ufh ä lt. 7 de l a y ( 1 00 l ;
8
Das P r i n z i p h i nter den S e n s o r e n ist ver­
g l eichsweise ei nfa c h . Der Sensor i st i m G r u n ­ -' �----------------------�
d e e i n Ko n d e n sator, d e r e l e ktrische La d u n g
s p e i c h e r n ka n n . G e n a u g e n o m m e n b i l d et T7 27
Die verb leibenden acht Sensore n (TO u n d ----·--�--�
e i n Te i l d e s Sensors zusa m m e n m it d e r zu Ts ..... 33
T3-T9) l a s s e n s i c h a be r e i nfa c h i n e i g e n e n
berü h renden Oberfläche e i n e n Ko nden sator. T9 32
P roje kten e i n setzen . Wie b e i a l l e n Sensoren
Dessen tatsä c h l i c h e Ka pazität i st d a bei u ner­
ist es fü r e rste Experi mente d a s Beste, e i n ­
h e b l i c h , we i l der S e n s o r l ed i g l i c h vers u c ht,
fa c h loszu legen u n d Daten a bzufra g e n . Lis­ A n s c h l ießend sieht m a n sich a n , wie sich die
Ä n d e r u n g e n in der Ka pazität zu e r ke n n e n .
t i n g TauchTest i n o tut genau das m i t h i lfe der Werte entwicke l n , we n n d e r Sensor a u s l öst.
Diese Ä n d e r u n g e n kö n n e n z u m B e i s p i e l
F u n ktion t o u c h R e a d . Das Prog ra m m g i bt die Statt l a n g wei l i g e Za h l e n ko l o n nen zu
d u rch e i n e n F i n g e r h e rvorg erufe n werd e n .
Werte des To u c h -Sensors TO, d e r m i t G P IO­ lesen, i st es h i lfreich, den seriel len Plotter der
Das fu n kt i o n i e rt desha l b, wei l d i e Ka pazi­
P i n 4 ve rbunden i st, konti n u ierlich auf d e r se­ Ard u i n o-I D E ü ber den Men ü p u n kt Werkzeu­
tät eines Ko n d e n sators n i c h t n u r d u rc h d i e
riel len S c h n ittst e l l e aus. Diesen Pin verbi n d et ge > Serie l l e r P l otte r zu a ktivieren. Der l iest
G röße u n d d e n A bsta n d d e r Ko n d e n sator­
m a n zu Testzwecken d a h e r e rst e i n m a l m i t Za h l en, d i e auf der serie l l e n Schn ittste l l e an­
p latten besti m m t wird. S i e h ä n g t a u c h vom
e i n e m Stück Draht bezi e h u n g sweise e i n e m ko m m e n , u n d stel lt sie g rafisch d a r.
Materi a l zwi s c h e n d e n P l atten a b, d e m
J u m pe r-Ka bel ( m a l e-fe m a l e ) . Obwo h l d e r Draht n i cht be r ü h rt wu rde,
sog e n a n nten D i e l e ktri k u m . We n n m a n d i e­
Wie d i e meisten Sensoren m u s s m a n a u c h g a b es g l e i c h zu Anfa n g e i n e n d e u t l i c h e n
ses ersetzt bezi e h u n g sweise verä ndert, d a n n
To u c h -Sensoren ka l i b r i e re n . l n d i esem F a l l ku rzen Aussc h l a g n a c h u n t e n . Anson sten
ä n d ert s i c h a u c h d i e Kapazität d e s Ko n d e n ­
h e i ßt d a s, d a s s m a n d i e S e n s o rwerte zu­ l i efe rt der Sensor g l e i c h m ä ß i g e i n e n Wert
sators. l n d i esem Fa l l w i rd d i e Luft zwi schen
n ä c h st e i n m a l i m R u h ezusta n d beobachtet. von knapp u nter 80. A l s d e r D ra h t zwischen
d e n Elektrod en d u rc h d e n F i n g e r ersetzt und
d e r ist e i n ziem l i c h g utes D i e l e ktri kum, weil
e r viel Wasser enthält. (""',
Eigentlich ist d e r Effekt sog a r noch etwa s
s u bti l e r, d e n n d e r F i n g e r bee i n fl u sst d e n
� T ou c h S w i t c h . i n o
Ko n d e n sator bereits d a d u rc h , d a s s e r s i c h n
1 c o n s t u i n t 8_t T H R E S H O L D 20;
d u rch das e l e ktrische F e l d , d a s d e n Ko nden­ '
2 c o n s t u i n t 8 - t L E D�P I N = 2 '.
sator u m g i bt, bewegt. (""', 3
Eine Berü h r u n g ka n n desha l b sog a r d u rc h 4 boo l touc hedTO = false;
(""',
5 boo l touc hedT3 =
false;
Materi a l s c h i c hten h i n d u rch erka n n t werd e n .
6
So lassen sich berü h r u n g s e m pfi n d l i c h e 0
7 v o i d T O w a s A c t i va t e d ( )
Oberfl ä c h e n , wie zum Beispiel To u c h ­ n
8 touchedTO = t rue;
9
Screens, entwicke l n , bei denen d e r eigentli­
0
10
che Sensor n i c h t m e h r zu erken n e n ist A u c h 11 vo i d T3wasAc t i va t ed ( ) {
fü r e i nfa c h e re B e d i e n e l e m ente wie Ta ster 12 touchedT3 = t rue;
0
oder S c h iebereg l e r e i g n e n s i c h To uch-Sen­ 13
(""',
14
soren hervorra g e n d . 15 voi d setup ( ) {
(""', 16 S e r i a l . be g i n ( 1 1 5 2 00 l ;
17 p i n M o d e ( L E D_P I N , O U T P U T ) ;
Machen, machen! 18 touchAt t a c h l n t e r rupt ( TO, TOwasA c t i vated, THRESHOLD l ;
n
19 touchAt t a c h l n t e r rupt ( T3, T3wa sAc t i va t ed, THRESHOLD l ;
To uch-Sensore n s i n d e i n e n ützl i c h e S a c h e n 20
u n d e rfre u l i c h e r W e i s e hat der ESP32 g l eich 21
n 22 voi d Loop ( ) {
zeh n davo n . Leider s i n d sie n icht alle i m m e r
23 i f ( touchedTO){
n utzba r. So i st z u m Beispiel der G P I O - P i n 0, 24 touchedTO = fa l se ;

d e r fü r d e n To u c h - S e n s o r Tl zu stä n d i g i st, 25 Seri a l . pr i nt l n ( "Sensor TO" ) ;
auf den m e i sten Entwi c k l u n g s b o a r d s m it 0 26 d i g i t a l W r i t e ( L E D_P I N , H I G H ) ;
27
e i n e m D r u c ktaster verb u n d e n . l n de n P i n ­
0 28
out- D i a g ra m m e n d i es e r B o a r d s ta u c h t e r 29 ; f < t ouc hedT3 ) {
d a h e r zumeist g a r n icht a uf. Das m itgeliefe r­ (I 30 t o u c h edT3 = f a l s e ;
31 S e r i a l . p r i n t l n ( " S e n s o r T3 " ) ;
te Board b i l det da ke i n e A u s n a h me. Ä h n l i ­
n 32 d i g i t a l W r i t e ( L E D_P I N , L O W ) ;
ches g i l t fü r d e n Sensor T2, d e n d e r ESP32 a l s 33
Stra p p i n g - P i n z u m Erke n n e n v o n S ig n a l pe­ n 34
g e l n wä h re n d des Bootvo rga n g s verwen d et.

Make: ESP32 special 20 1 9 l 57


B E R Ü H R U N GSS E N SO R E N

Aktive Lautsprecher müssen


nicht u nbedingt aus dem
Elektronik-Handel kommen.

Mit Instant-Pulver sind die Klavier�


Tasten in knapp zwei Stunden fertig.

-
Da um en und Zeigefi n g e r genommen wu rde, N a c h d e m d i e s e t u p - F u n ktion d i e seri e l l e Das I nternet ist d a h e r vo l l von P roj ekten,
sa n k der Messwert sch l a g a rtig u nter 20 u n d S c h n ittste l l e i n it i a l i si e rt u n d d e n L E D - P i n i n die man zu m Beispiel mit Ta sten aus
wu rde konti n u i erlich n o c h etwa s kleiner. So­ d e n A u s g a bemod u s versetzt hat, reg istriert A l u - F o l i e o d e r m i t B a n a n e n bed ienen ka n n .
bald der Draht losgelassen wu rde, stieg der s i e d i e beiden Event- H a n d l e r m i t d e r F u n k­ Oft ko m m e n d a bei Krokod i l k l e m m e n zu m
Messwert sch lagartig wieder auf knapp u nter t i o n t o u c h A t t a c h i n t e r r u p t . D i e e rwa rtet E i n satz, u m d i e Berü h ru n g ssensoren mit den
80. a l s erstes A rg u m e n t den P i n des zu ü ber­ G P IO-P i n s zu verbi n d e n .
U m eine Berü h r u n g zuverlässig zu erken­ wachenden To u c h-Sensors. An zweiter Ste l l e E i n fi n a l e s P roj e kt n u tzt a be r e i n g a n z
nen, muss m a n also led i g l ich prüfen, ob der steht d i e F u n kt i o n , d i e a u sgefü h rt werden a n d eres Materi a l , d a s ü be r h e rvorra g e n d e
Rückga bewert der F u n kt i o n touchRead soll, we n n d e r S e n s o r a ktiviert w u rde. A m d i e l e ktrische E i g e n s c h aften verfügt, lecker
kleiner a l s ein Schwe l l wert, wie zu m Beispiel Sch l u s s ste ht d e r Schwe l l we rt, d e r u nter­ s c h m eckt u n d auch sonst e i n iges hermacht.
30, i st. Gegebenenfa l l s muss man d i esen sch ritten werd e n m u ss, u m den Sensor a us­ Die Rede ist von Wacke l p u d d i n g .
Wert je nach Sensor u n d U m gebu ngsbed i n­ zulösen. Wacke l p u d d i n g l ä sst sich l e i c h t herste l l e n
g u n g e n a n passen. D i e l o o p - F u n kt i o n ka n n s i c h nun d a ra u f u n d vera rbeiten u n d d i e n t i n d iesem F a l l a l s
'
bes c h rä n ken, d i e Booleschen va r i a b l e n a b­ A u s g a n g s p rod u kt fü r e i n Wa c ke l p u d d i n g ­
Ku rze U nterbrechung zufra g e n . We n n t o u c h e d T O d e n Wert t r u e Kiavier. Das K l a v i e r g i bt u ntersc h i e d l i c h e
h at, s c h a ltet d a s P rog ra m m d i e Status-LED Tö n e von s i c h , w e n n d e r P u d d i n g i n ver­
Einen Sensor i m Code i m m er wieder d i rekt e i n . Hat t o u c h e d T 3 den Wert t r u e , w i rd d i e schiedenen Behä ltern m i t e i n e m F i n g e r be­
a bzufra gen ist ke i n s o n d e r l i c h g uter St i l . LED a u sgescha ltet. rü h rt wird.
Schon bei wen i g e n Sensoren wi r d d a s P ro­ We n n m a n n u n das P rog ra m m auf d e n Wacke l p u d d i n g g i bt es i n verschiedenen
g ra m m u n ü bersicht l i c h und schwer wartbar. ESP32 l ä d t u n d d i e G P IO-Pi n s 4 u n d 1 5 m i t Formen u n d fü r schnelle Experimente eignen
Besser wä re e i n e re i g n i sgesteuerter Mecha­ Drähten verb i n d et, ka n n m a n d i e Status-LED sich I n stant-Pu lver recht g ut. Die brauchen
n i s m us, bei dem ein Eve nt- H a n d l e r a ufg eru­ d u rch Berü h ru n g e n mit den F i ngern e i n - und knapp zwei Stu nden, bis die Tasten fest genug
fen wi rd, we n n e i n To uch-Sensor a u s löst. Zu a u sschalten. Berü h rt m a n beide g l eichzeitig, sind, u n d sie lassen sich ei nfach dosieren u n d
d iesem Zweck g i bt es d i e F u n ktion t o u c h A t ­ d a n n b l i n kt die LED. i n die verschiedensten Formen pressen.
t a c h I n t e r r u p t u n d List i n g Jo uchSwitc h . i n o Ü b r i g e n s m a g es verlockend e rsc h e i n e n , Für das vorliegende P roj e kt d ienen
zeigt, w i e sie ve rwe n d et w i r d . d i e LED d i rekt i n n e rh a l b d e r Eve nt- H a n d l e r S c h n a p s g l ä s e r a u s K u n ststoff a l s Ta ste n . Ein
Das P rog ra m m i m p l e m e n t i e rt e i n e n p r i ­ e i n - u n d a u szuscha lte n . Das i s t jedoch kei n e Lötko l be n m i t e i n e r fe i n e n Spitze ist das per-
m itiven Lichtscha lte r. Es schaltet d i e Status­ g ute I d ee, d e n n d iese F u n ktionen werden i m
LED des Entwickl u n g sboards ein, we n n der F a l l e e i n e s l nterru pts a ufg erufe n u n d l nter­
To uch-Sensor TO a ktiviert w u rd e u n d es rupt- H a n d l e r sol lten sich i m m e r auf ein M i n i­ Ein Terminaladapter für eine
scha ltet d i e LED a u s, wenn der To uch-Sensor m u m an A ktivität besc h rä n ke n . 3,5mm-Kiinkenbuchse erspart
T3 a u s l öst. das löten.
Zu Anfa n g werden Ko n stanten fü r d e n Schwabbeltasten
Sensor-Schwe l l wert u n d fü r d e n P i n der Sta­
tus-LED defi n i e rt. Es fo l g e n zwei Boolesche Z u r Bed i e n u n g d e r To uch-Sensoren d ienten
Va riablen, d i e a nzeigen, ob d i e Sensoren TO bisher J u m per-Ka be l o d e r Drähte. Das ist
u n d T3 jewe i l s gerade a ktiv ( t r u e) oder zu Test- und Entwickl u n g szwecken a u s­
i n a ktiv ( f a l s e ) sind. Diese beiden Va riablen reichend, macht a ber n icht viel h e r. E i n e der
werden i n den F u n kti o n e n T O W a s A c t i v a t e d i nteressa ntesten Eigen schaften d e r Sensoren
bezi e h u n g sweise T 3 W a s A c t i v a t e d a u f d e n i st es ja, dass s i e d u rc h viele Materia l i e n h i n ­
Wert t r u e gesetzt. Diese b e i d e n F u n ktionen d u rch fu n kt i o n i eren u n d n i cht d i re kt m i t
sollen also als Eve nt- H a n d l e r a g i e re n . e i n e m F i n g e r i n Konta kt ko m m e n m ü ssen.

58 1 Make: ESP32 special 201 9


fekte Werkzeug, u m Löcher fü r d i e J u m pe r­
Ka bel in d i e G l ä sc h e n zu p i e ksen, n a c h d e m
d e r I n h a l t fest geworden i st. N a d e l n o d e r
u J e l lyPi ano . i no
Ä h n l iches e i g n e n s i c h n i cht so g ut, w e i l d a s
1 # i n c l ud e "Mus i c D ef i n i t i on s . h " ;
Material sch n e l l s p l ittert. 2 # i n c l u d e " X T_D A C_A u d i o . h " ;
Das Ga nze fu n kt i o n i e rt a u t h p r i m a m i t 3

c
Fertig-Prod u kten a u s d e m Kü h l re g a l des ö rt­ 4 c o n s t u i n t 8_t T H R E S H O L D = 1 5;
5
l i c h e n S u pe r m a r kts u n d s e l b stverstä n d l i c h

/
6 X T_D A C_A u d i o_C l a s s D a c A u d i o ( D A C 1 , 0 ) ;
a u c h i n u ntersc h i e d l i c h e n Fa rben u n d Ge-
n t 8- t S C O R E- C 5 [ J
7
{ };
n t 8- t S C O R E- D 5 [ ] } ,.
schmacksricht u n g e n . Der Fa ntasie sind h i e r 8 i N O T E_C 5 , S C O R E- E N D
{
n t 8- t } ,.
9 i N O T E_D 5 , S C O R E- E N D
ka u m G renzen gesetzt.
{
S C O R E-E N D } ,.
10 i S C O R E_ E 5 [ J N O T E_E 5 , S C O R E- E N D
Um d a s W a c ke l p u d d i n g - K i a v i e r zu rea l i ­ {
S C O R E-G 5 [ ]
n t 8- t
} ,.
11 i S C O R E- F 5 [ ] N O T E_ F 5 ,
{
n t 8- t S C O R E -A 5 [ J S C O R E- E N D } ,.
s i eren, s i n d zwe i P r o b l e m e zu l ö s e n . Z u m 12 i n t 8- t N O T E_G 5 , S C O R E- E N D
{
n t 8- t S C O R E -8 5 [ ] } ,.
e i n e n m u s s d e r E S P 3 2 versch iedene. Tön e e r­ 13 i N O T E_A 5 ,
{
n t 8- t S C O R E- C 6 [ J } ,.
14 i N O T E_B 5 , S C O R E-E N D
zeu g e n . Darü ber h i n a u s m u ss es e i n e Mög­ 15 i { N O T.E..LC 6 , S C O R E -E N D
l i c h keit geben, u ntersch i ed l iche Eingaben zu 16
erke n n e n . Um das P roje kt e i nfach zu ha lten, 17 X T_M u s i c S c o r e_C l a s s C 5_N O T E ( S C O R E_C 5 , T E M P O_A L L E G R O ,

T E � P 6 _A L L E G R O ,
I N S i R U M E N T_P I A N O , 1 ) ;
u nterstützt das Klavier n u r die acht Tö n e
18 X T_M u s i c S c o r e_C l a s s D 5_N O T E C S C O R E_D 5 ,
e i n e r O ktave. A u ßerdem ste hen m e h r Sen so­ I N S T R U M E N T_P I A N O , ' 1 ) ;
ren j a a u c h n icht zur Ve rfü g u n g . 19 X T_M us i c S c o r e_C l a s s E 5_N O T E ( S C O R E_E 5 , T E M P O_A L L E G R O ,
r· I N S T R U M E N T_P I A N O , 1 ) ;
D i e A bfra g e d e r Berü h r u n g ss e n s o re n i st
20 XT_M u s i c S c o r e_C l a s s F 5_N O T E ( S C O R _f:_ F 5 , T E M P O_A L L E G R O ,
verg l e i c h sweise e i n fa c h . A u fwe n d i g e r ist I N S T R U M E N T_P I A N O , 1 ) ;
d i e E rze u g u n g a n s p re c h e n d e r Klänge. U r­ 21 X T_M u s i c S c o r e_C l a s s G 5_N O T E ( S C O R E_G 5 , T E M P O_� L L E G R O ,
sprü n g l ic h sol lte d a s P roje kt d i e Tö n e m ittel s I N S T R U M E N T_P I A N O , 1 J ;
22 X T_M u s i c S c o r e_C l a s s A 5_N O T E ( S C O R E_A 5 , T E M P O_A L L E G R O ,
C'
e i n e s P i ezo-S u m m e rs a u sg e b e n u n d dazu
I N S T R U M E N T_P IA N O , 1 ) ;
d i e t o n e - F u n kt i o n d e r A rd u i n o - U m g e b u n g 23 X T_M u s i c S c o r e_C l a s s B 5_N O T E ( S C O R E_B 5 , T E M P O_A L L E G R O ,
verwe n d e n . Die g i bt es a be r fü r d e n E S P 3 2 I N S T R U M E N T_P I A N O , 1 ) ;
24 X T_M u s i c S c o r e_C l a s s C 6_N O T E ( S C O R E_C 6 , T E M P O_A L L E G R O ,
noch n icht u n d so w u rd e e i n e a ltern ative Lö­
I N S T R U M E N T_P I A N O , 1 ) ;
s u n g gewäh lt, die geri n gfü g i g ko m p l izierter 25
i st, a ber weita u s mehr Potenzi a l hat. 26 v o i. d s e t u p O {
Statt e i n e s S u m mers n u tzt das Wa ckel­ 27 S e r i a l . be g i n ( 1 1 5 2 DO > ;
2 8.
p u d d i n g -Kiavier n ä m l i c h eine 3 , 5 m m - Ki i n ­ 29
ke n b u c h se, d i e s i c h d i re kt m it e i n e m Laut­ 30 vo i d loop ( ) {
s p re c h e r o d e r einem O h r h ö re r verb i n d e n 31 DacAudi o . Fi l lBuffer ( ) ;
32 p l a y_n o t e ( T O , C 5_N O T E ) ;
l ä sst. Solche Kl i n ke n buchsen g i bt es i n u n te r­
33 p l a y_n o t e ( T 3 , D 5_N O T E ) ;
s c h i e d l i c h e n A u s p r ä g u n g e n , a be r i n d e r 34 p l a y_n o t e ( T 4 , E 5_N O T E ) ;
R e g e l �o m m e n s i e o h n e A n s c h l u s s d rä hte 35 p l a y_n o t e ( T 5 , F 5_N O T E ) ;
36 p l a y_n o t e < T 6 , G 5_N O T E ) ;
da her. Wer s i c h etwa i g e Löta rbeiten erspa­
37 p l a y_n o t e ( T 7 , A 5_N O T E ) ; I
I
ren m öchte, g re ift am besten zu e i n e m 38 p l a y_n o t e ( T 8 , B 5_N O T E ) ;
koste n g ü n stigen u n d leicht wiederverwen d ­ 39 p l a y_n o t e ( T 9 , C 6_N O T E ) ;
b a r e n Term i na l a d a pter. 40 } I
,.....
41 J I
Auf e i n e n Verstä rker w u rd e bewusst ver­
' 42 v o i d p l a y_n o t e ( u i n t 1 6_t p i n , X T_M u s i c S c o r e_C l a s s & n o t e ) {
zichtet, weil es ei nfi3 c h e r i st, e i n e n O h r h ö re r 43 c o n s t u i n t 8_t v a l u e = t o u c h R e a d ( p i n ) ;
.I
I
o d e r e i n e n L a u t s p rec h e r m it e i n e m e i n g e­ 44 S e r i a l . pr i n t l n ( va l ue ) ;
45 if (va l u e < THRESHOLD ) {
bauten Verstärker zu verwe n d e n . Die g i bt es
46 i f ( note . P layi ng == f a l s e )
oft schon fü r k l e i n es G e l d u n d v i e l e b i eten 47 Da cAud i o . P l a y < &not e ) ;

I
einen ordentl i c h e n S o u n d . 48 d e l ay ( 1 00 ) ;
}
('
49
50
H a rd.w a re, Software, Wetwa re
----·-...J
51

Soba l d d i e H a rdwa re steht, m u ss d e r ESP32


fü r jeden Touch-Sensor noch u ntersch iedliche
Tö n e e rzeugen und dazu e i g n e n sich d i e ten ka n n s i e a u c h WAV-Date i e n a bs p i e l e n . verwendet werden s o l l u n d d i e Nummer des
Dig ita l -An a l og-Wa n d l e r (DAC) hervorragend. A l l e rd i n g s ist i h re S c h n ittstel l e ste l l enweise zu verwendenden Timers. Die B i b l iothek er­
Die e i g e n t l i c h e K l a n g e rze u g u n g ü be r­ etwa s e i g e n wi l l ig . zeugt die Klänge n ä m l i c h i nterru ptgesteuert
n i m mt die Bibl iothek XT_DAC_A u d i o D a s List i n g J e l l y P i a n o . i n o b i n det z u n ä c h st im H i nterg rund.
( h t t p ://www .xtro n i ca l . c o m /t h e - d a c a u d i o ­ d i e z u r B i b l i ot h e k g e h ö r e n d e n Date i e n e i n Es fo l g e n a c h t Vari a b l e n , welche d i e zu
l i b ra ry-dow n l oa d -a n d - i n sta l l at i o n/). Deren und d efi n i e rt eine Ko n stante fü r den spielenden Tö n e defi n ieren. P r i n z i p i e l l sol lte
Z i p-Arc h i v l ä sst s i c h n a c h d e m H e r u nter­ Schwe l l we rt d e r To uch-Sensoren. D a n n w i rd es mög l i c h sein, die Tö n e d i re kt a bzuspielen,
l a d e n ü be r d e n B i b l i ot h e ksve rwa lter d e r e i n O bj e kt d e r Klasse X T _D A C_A u d i o_c l a s s a be r d i e Dokumentation d e r B i b l iothek i st
Ard u i n o-IDE i n sta l l ieren. a n g e l egt, d a s s i c h u m d i e Kom m u n i kation d iesbezü g l ic h sehr s pä r l i c h . Des h a l b werden
Der F u n kt i o n s u m fa n g d e r B i b l i o t h e k ist m it d e m DAC kü m m e rt. A l s A r g u mente die Va r i a b l e n in Form von M u s i kstücken
recht g roß und n e b e n d iversen l n stru m e n - beko m m t es d i e P i n - N u m m e r des DACs, der defi n i e rt, d i e nur eine N ote lang sind. Diese

Make: ESP32 special 201 9 l 59


BERÜ H RUNGSSENSOREN

Der Aufbau des Wackelpudding-Kiaviers wirkt wüst, ist aber ganz einfach.

Musikstücke m ü ssen als i n t 8 _t -Felder a n ge­ daten a n d e n DAC ü bertra g e n . A n s c h l ie­ g i n t n e n . Zuvor verb i n d et m a n d i e Kl i n ken­
legt werd e n , deren l etztes E l e m e n t i m m e r ß e n d w i rd d i e F u n kt i o n p l a y_n ote fü r j e d e n b u c h se m i t Pin 25 u n d e i n e m Masse- P i n des
d i e Konstante S C O R E_E N D i st. S e n s o r u n d d e r zu m S e n s o r g e h ö r e n d e n ESP32. Die D rä hte a n d e n To uch-Sensor- P i n s
Die eigentl ichen M u s i kstücke werden a l s N ote a ufg erufe n . g e h ö re n i n d e n Wackelp u d d i n g . D a b e i sol lte
Objekte d e r Klasse X T_M u s i c S c o r e_C l a s s D i e F u n kt i o n p l a y _n o t e w i e d e r u m l i est man schon d a ra u f achten, die S c h n a ps g l ä ser
a n gelegt. Neben d e n N oten m u ss m a n dazu den Sensor aus und we n n e r a ktiv i st, prüft i n d e r m u s i ka l isch korrekten Reihe nfolge an­
noch d i e Geschwi n d i g keit, d a s zu spielende sie m i t dem Attri but P l a y i n g, ob d i e zu sp ie­ z u o rd n e n .
I n strument u n d d i e Anza h l der Wied erh o l u n ­ l e n d e Note gerade sct)on gespielt wird. N u r D u rc h e i nfa c h e Ä n d e r u n g e n ka n n m a n
gen a n g e b e n . l n d i esem Fa l l ist d i e Anza h l we n n d a s n i c h t d e r Fa l l i st, w i rd d i e N ote mit d e m I n st r u m e n t g ä n z l i c h a n d e re Tö n e e nt­
d e r Wiederho l u n g e n g l e i c h 1 , wei l jede N ote d e r P l a y - F u n kt i o n g e s p i e l t u n d eine Pause locke n . Wei l d i e verwendete B i b l i othek WAV­
bei e i n e m Taste n d ru c k n u r e i n m a l gespielt von 1 00 M i l l i s e ku n d e n e i n g e l egt. Auf d i ese Dateien a b s p i e l e n ka n n , lassen sich d i e Tas­
werden so l l . G i bt m a n h i e r e i n e 0 a n , w i rd Weise werden die Ta sten e n t p re l lt, sodass ten mit b e l i e b i g e n K l a n g effe kte n verse h e n .
das M u s i kstü c k ü b rigens e n d l os wiederholt. d i e ihnen zugeord neten Tö n e n i c h t bei d e r So w i rd a u s d e m K l a v i e r z u m B e i s p i e l g a n z
Die s e t u p - F u n ktion i n itia l i siert nur die klei n sten Berü h ru n g meh rfach erkl i n g e n . sc h n e l l e i n D r u m-Com puter. D i e e i n z i g e
seri e l l e S c h n ittstel l e und d i e e i g e n t l i c h e Das ku rze Prog ra m m i st a l les, was benö­ Besc h rä n ku n g l i egt i n d e r Anza h l der Taste n .
M u s i k s p i e l t wortwört l i c h i n der l o o p - F u nk­ tigt wi rd, um das Wa c ke l p u d d i n g - Ki a v i e r
tion. Die ruft g l e i c h zu Anfa n g d i e F u n ktion z u m Leben zu erwecke n . Soba l d d e r C o d e Fazit
Fi l l B u f f e r des Objekts D a c A u d i o a uf. Da­ a u f dem Boa rd u n d d e r P u d d i n g o rd n u n gs­
d u rch werden noch a u s ste h e n d e K l a n g - g e m ä ß verl<a be l t i st. ka n n d a s Konzert be- D i e To u c h-Sensoren s i n d e i n e fe i n e Sache,
u n d zwa r sowo h l wä h re n d d e r Entwi c kl u n g
a l s a u c h fü r fe rt i g e P roj e kte. Wä h re n d d e r
Entwi c k l u n g kö n n e n s i e z u m B e i s p i e l a l s
s c h n e l l e r E rsatz fü r D r u c ktaster h e r h a l t e n .
I m G e g e n s a tz zu d e n e n b e n öti g e n d i e
To u c h -S e n s o r e n n ä m l i c h ke i n B r e a d b o a r d
u n d ke i n e W i d e rstä n d e . E i n e i nfa c h e r D r a h t
g e n ü g t u n d s c h o n hat m a n e i n e s i m p l e Be­
n utzu n g s s c h n ittste l l e.
So richtig schick u n d spannend werden die
Ber ü h r u n g ssen soren a be r erst. wen n sie i h re
Stä rken a u ss p i e l e n d ü rfen . Die l i egen g a n z
klar i n i n n ovativen F o r m e n der Benutzeri nter­
a ktion _ _ Die helfe n n icht n u r bei der U m set­
zung spaßiger P rojekte, sondern ermög l ichen
auch schicke u n d s u btile Bedienelemente fü r
Eine VIdeovorschau unter den links gibteinen Vorgeschmack auf das Projekt. ernsthafte Anwend u n g e n . -dab

60 I Make: ESP32 special 20 1 9


I M P R ESS U M
Red a ktion Verlag
Make: Magazin Maker Media G m b H
Postfach 6 1 04 07, 30604 H a n nover Postfach 6 1 0 4 0 7 , 30604 Han nover
Kari-Wiechert-AIIee 1 0, 30625 H a n n over Kari-Wiechert-AIIee 1 0, 30625 Han nover
Telefon: 05 1 1 /5 3 52-300 Telefon: 05 1 1 /5 3 52-0
Telefax: 05 1 1 /5 3 52-4 1 7 Telefax: 05 1 1 /5 3 52-1 29
I nternet: www.make-magazin.de I nternet: www.make-magazin .. de

Leserbriefe u n d Fragen zum Heft: i nfo@ m a ke-magazi n . d e Herausgeber: C h ristian H e ise, An s g ar Heise E i n e Haftu n g für d i e Richtigkeit d e r Veröffentlichungen
ka n n trotz sorgfältiger Prüfu n g d u rc h d i e Redaktion
Geschäftsfü h rer: Ansgar H e ise, Dr. Alfo n s Schräder
Die E-Mail-A dressen d e r Redakt e u re h a b e n d i e Form vom Herausgeber nicht ü b e r n o m m e n werde n . Kein Tei l
xx@m a ke- magazin.de oder xxx@ m a ke-magazin.de. Setzen Verlagsleiter: Dr. Alfo n s Schräder dieser P u b l i kation d a rf o h n e ausdrückliche schriftliche
" G e n e h m i g u n g des Verlags i n irgendeiner Form
Sie statt "xx" oder "xxx bitte d as Redakteurs-Kürzel e i n . Die
S te l l v . Verlagsleiter: D an i el Bachfe l d
K ü rzel fi n d e n Sie am Ende der Artikel und hier i m reproduziert oder u nter Verwen d u n g elektronischer
I m press u m . Anzeigenleitu n g : M i c h a e l H a n ke (- 1 67) System e verarbeitet, vervielfältigt oder verb reitet werden.
(verantwort l i c h fü r d e n Anzeigenteil), A l l e beschriebenen Projekte s i n d ausschließlich für den
privaten, n i c h t kom m e rz i e l l e n Gebrauch. M a ker Media
Chefredakteur: Da n i el Bachfe l d (dab) www.h e i se.de/med i ad aten/ma ke
GmbH behält sich alle N utzu n g srechte vor, sofern keine
(verantwortlich fü r d e n Textteil)
Leiter Vertrieb und Marketing: A n d re Lux (-299) a n d e re Lizenz fü r Software u n d Ha rdware expl izit
g e n a n nt ist.
Stellv. Chefreda kteur: Peter König (pek) Service Sonderdru cke: J u l i a C o n rades (- 1 56)

Druck: G o l d s c h m i d t G m b H , Josefstraße 35 , 49809 L i n g e n Für u n verlangt e i n g esandte M a n u s kri pte kann keine
Redaktion: H e i nz Behling ( h g b), H e lga H a n s e n (hch), Haftung ü b e r n o m m e n werd e n . Mi t Ü bergabe der
Vertrieb Einzelverkauf:
Ca rsten Meyer (cm), F l o r i a n Schäffer (fls), E l ke Schick (esk) M a n uskri pte und B i l d e r a n d i e Redaktion e rte i l t der
VU Verla g s u n i o n KG
Verfasser d e m Verlag d as Exklu sivrecht z u r Veröffent­
Me ßberg 1 l i c h u n g . Honorierte Arbeiten g eh en in das Verfü g u n g s recht
Assistenz: S u s a n n e Cölle (suc), C h ristop h e r Trä n k m a n n
20086 H a m b u rg des Verlages ü ber. Sämtliche Veröffe n t l i c h u n g e n i n Make
(cht), M a rt i n Tri a d a n (mat)
Tel . : 040/3 0 1 9 1 800, Fax.: 040/3 0 1 9 1 45 1 800 erfo l g e n ohne Berücks i c h t i g u n g eines eventue l l e n
E-Ma i l : i nfo@verla g s u n io n . d e Patentsch utzes.
DTP-Produktion: Nicole J u d ith H o e h n e (Ltg.), Martina
I ntern et: www.ve r l a g s u n i'o n . d e
Bruns, M a rti na Fredrich, J ü rg e n Gonnermann, B i rgit G raff,
Angela H i l berg, Astrid Seifert, Dieter Wa h n e r Ware n n a m e n werd e n ohne Gewä h rleistung einer fre ien
Abo-Service:
Verwe n d u n g ben utzt.
Beste l l u n ge n , A d ressä n d e r u n g e n , Lieferproblerne usw.:
A r t Direction: M a rti n a B r u n s (J u n i o r Art Di rector)
Maker Media GmbH P u b l ished and d istributed by Maker Media G m b H under
Leserservice l i cense from Maker Media, l n c., U n ited States of America.
Layout-Konzept: Martina B r u n s
The 'Ma ke:' Irademark i s owned by Ma ker Media, lnc.
Postfach 24 69

Layout: N i c o l e Wesche, www.ti este23.de 490 1 4 Osnabrück


Printed i n Germany. A l l e Rechte vorbehalten.
E-Mail: leserservice@make-magazi n.de Gedruckt au f Recyc l i n g papier.
-Fotografie u n d Titelbild: A n d reas Wodrich, M e l i ssa Telefon: 0541 /80009- 1 25
Ramson Tel_efax: 0541 /80009- 1 22 © Copyright 20 1 9 by Ma ker Media GmbH

D I E AUTO REN
D I ESES H E FTS

Maik Schmidt a rbeitet seit über 25 Jahren Daniel Bachfeld ist Chefredakteur beim
als Softwa reentwickler fü r m ittelstä nd ische Ma ke-Magazi n. Mit M i krocontrol lern
und Großunternehmen. Au ßerdem schreibt bastelt er seit 1 999. Er ist froh, dass ihm
er Buch kriti ken und Artikel fü r i nternationale das Arduino-Konzept nun viel Arbeit
Zeitsch riften u n d hat sel bst einige Bücher beim Aufb? U der Hardwa re und der
verfasst. U nter anderem ist er Autor des Entwickl ung der Softwa re spart.
Buchs ..Ard u i no: A Quick-Sta rt G u ide, 2nd Er freut sich über Projekteinreichu ngen
ed.", das bei The P ragmatic Bookshelf und Artikelideen von Lesern, die auf
erschienen ist u n d u nter dem Titel Grundlage dieses Hefts entsta nden sind:
.. Arduino - Ein schneller Einstieg in die dab@make-magazin.de
Microcontroller-Entwickl ung" vom d p u n kt­
Verlaq ins Deutsche ü bersetzt wu rde.

M a ke: ESP32 special 20 1 9 1 61


BAS I C 1�----------·
Wie in alten Zeiten
Der ESP32 m u ss n i cht n otwe n d i g erweise in C oder (++ p rog ra m m i e rt
Alles zum Artikel
werd e n . Es ste h e n e i n e g a nze M e n g e Altern ativen z u r Ve rfü g u n g u n d
I im Web unter
e i n e steckt sog a r g a n z tief d r i n i m C h i p .
• make-magazin.de/xe5f
von M a i k Schm idt

- - --

Siegrn ar J

Bre vier
M itt l e rwe i l e i st es kei n e Beso n d e r h e i t
m e h r, M i kroc o n t ro l l e r i n H o c h s pra­
c h e n wie JavaScri pt o d e r Pyt h o n zu pro­
Wo steckt er denn?
D i e Doku m e ntation bezeich net d e n BASIC­
g ra m m i e r e n . D e r ESP32 b i l det ke i n e Aus­ I nterprete r a l s ROM-Konsole. Die w i rd i m m er
nahme u n d wird von P roj e kten wie Espru i n o dann gesta rtet, we n n d e r ESP32 beim Boo­
(http://www.es p r u i n o . c o m/) oder M i c ro­ ten d e n Code im F l a s h-Spei c h e r nicht a u s­
Pyt h o n (http://m i c ro pyt h o n . o rg/) vo l l u nter­ fü h.ren ka n n . l n d i esem M o m e n t ka n n m a n
stützt. s i c h m i t e i n e m seri e l l e n M o n itor ll] i t d e m
Etwas exot i s c h e r ist da sch o n d i e P ro­ ESP32 ver b i n d e n u n d d i e ROM-Konsole n ut­
g r a m m i e rspra c h e BASIC, d i e h a u ptsä c h l i c h zen .
a u f d e n P I C- B o a r d s seh r b e l i e bt i s t . A u f a n ­ U m d a s BAS I C zu n utze n, m ü sste m a n a l s o
d e re n P l a ttfo r m e n i st s i e zwa r oft verfü g b a r, n i cht-a u sfü h rbaren C o d e i n s F l a s h sch re i ben.
fü h rt a be r e h e r e i n Sch atte n d a s e i n . Es g i bt a l lerd i n g s einen kleinen Trick, der den
We n n a b e r e i n B A S I C - I n t e r p reter a u f Zugang z u m I nterpreter verei nfacht. Der
'
einem M i kroco n t ro l l e r l ä u ft, dann ist ESP32 l a n d et n ä m l i c h a u c h i n der ROM-Kon­
es m e i stens Ti ny BASIC (https://e n . w i ki s o l e, we n n man d e n G P I O- P I N 1 2 a u f H I G H
ped ia .org/w i ki/Ti ny_BAS IC) oder e i n e I m p l e­ setzt u n d d e n ESP32 bootet. Dazu verb i n d et
m e n t i e r u n g , d i e a u f T i n y BAS I C b a s i e rt. Das m a n den G P I O - P i n 1 2 u n d den 3,3V- P i n m i t
l i egt d a ra n , d a s s d i ese Vers i o n ext rem spa r­ e i n e m J u m per-Ka be l (fe m a l e-fe m a l e) u n d
s a m m i t d e m S p e i c h e r e i n es Rec h n ers u m ­ d r ü c kt den Reset- Knopf. E i n einzelner Draht aktiviert d i e ROM-Konsole.
geht. A n sc h l i e ße n d verb i n d et m a n s i c h m i t
I nteressa nterweise hat die Firma E s p res­ e i n e m serie l l e n M o n itor, wie z u m B e i s p i e l g r ü ßt die ROM-Konsole mit e i n e m l a p i d a ren
sif e i n e n Tiny BASIC-I nterpreter ins ROM des PuTIY, m i t d e m E S P 3 2 u n d d r ü c kt d i e Re­ Prompt ( > ) .
ESP32 i nteg riert und i h n a nfa n g s m e h r o d e r t u r n -Taste. Die F e h l e r m e l d u n g en, die zuvor
we n i g e r ve rsteckt bezi e h u n g sw e i s e n i c h t a n g ezeigt w u rd e n , ka n n man g etrost i g no­ Erste Sch ritte
d o k u m e nt i e rt. S e i t e r a be r zufä l l i g entd eckt riere n . Sie besagen ledig l ich, dass der ESP32
worden i st, g i bt es a u c h e i n e k n a p p e n icht a u f d e n F l a s h-Speicher zug reifen ka n n . Wen n man so gar n i cht weiter weiß, schadet
Besc h re i b u n g i n d e r offi zie l l e n D o k u m e n ­ Wichtig i st, d a s s m a n den seri e l l e n M o n i ­ es n i e, ei nfach m a l u m H i lfe zu bitte n. G i bt
tati o n ( https://d ocs.espress if.co m/proj ects/ tor so e i n stellt, dass er a m E n d e e i n e r ü be r­ m a n in der Ko nsole das Ko m m a ndo h e L p ein,
es p - i d fI e n / l a t e s t/a p i g u i d e s / r o m co n so I e . tragenen Zei l e n u r e i n Lin efeed u n d kei n Car­ l i stet d e r I nterpreter a l l e Befe h l e auf, die er
htm l ) . riage-Retu rn sendet. Hat a l les geklappt, d a n n versteht. Daru nter ist a u c h der Befe h l a b o u t

BEVOR · E I N E SICHERUNG DURCH BRENNT


N e u e re Vers i o n e n des ESP­ tomatisch m i t d e m e s p t o o L (https://g it­ Ansch l ießend m u s s m a n m i t e s p e f u s e . p y
IDF h a be n d i e u n a ngeneh­ h u b.com/e s p ressif/espto o l ) i n sta l l iert wird. d e n Schreibsch utz fü r d i e S i c h e r u n g mit
m e E i g e n h eit, e i n e d e r Das ist e i n e Sa m m l u n g von Prog ra m m en, dem N a m e n C O N S O L E_D E B U G_D I S A B L E
Sich e r u n g e n (eFu se) i m d i e im täg l ic h e n U m g a n g m i t d e m ESP32 a ktiviere n : .
ESP32 d u rc h b r e n n e n g roßen N utze n stiftet. Alle Prog ra m m e
e s p e f u s e . py -po r t <po r t - n a me>
zu l a s s e n , wen n s i n d i n d e r Progra m m ierspra c h e Pyt h o n w r i t e_p r o t e c t_e f u s e
n e u e Softwa re (https://www.pyt h o n .org/} gesch rieben C O N S O L E_D E B U G_D I S A B L E
a ufs Board ge­ u n d fu n kt i o n i eren sowo h l mit Pyt h o n 2.7
spielt w i rd . So­ a l s a u c h mit Pyt h o n 3 .4. Der Parameter port- n a m e m u ss d u rc h den
bald d iese Si- Namen der serie l l e n Schn ittste l l e ersetzt
chening d u rc h g e b ra n n t i st, ka n n m a n Wer d i e ESP- I DF-Tool c h a i n i n stal l iert hat, werden, mit der das ESP32-Board verbun­
n icht m e h r a u f d i e ROM-Ko n s o l e u n d i h re n hat mit g roßer Wa h rsch e i n l i c h keit a u c h d e n i st. H ä ngt das Boa rd bei s p i e l sweise
BAS I C -I nterp rete r z u g reife n . D a m i t w ä r e es einen Python-l nterpreter. Das g i lt i nsbeson­ u nter Windows a n Port COM6, d a n n l a utet
dann nicht mehr m ö g l i c h , d i e Beispiele dere fü r die M i nGW- I n sta l lation u nter Win­ die Anwei s u n g :
a u s diesem Arti kel nachzuvo l lzi e h e n . d ows. Mit d e m Python-Pa ketmanager p ; p e s p e f u s e . p y - p o r t C O M 6 w r i t e_p r o ­
ka n n m a n e s p t oo L wie folgt i n sta l l ieren: t e c t_e f u s e C O N S O L E_D E B U G_ D I S A B L E
Es g i bt a be r e i n e ei nfa c h e Mög l i c h keit,
p i p i ns t a l l e s p t o o l
die S i c h e r u n g vor d e m D u rc h bren n e n zu
Wei l d i e Auswi rku n g e n des Ko m ma n dos
sch ütze n . Wer a l·so später noch Z u g riff auf Auf m a n c h e n U m g eb u n g e n , u nter a nd e­ u n u m kehrbar s i n d , m u s s man die Aktion
d i e ROM-Ko n s o l e h a be n möc hte, sol lte rem u nter M i n GW, fü h rt d i eser Befe h l zu bestätigen, indem man d a s Wort B U R N
d ies u n bed i ngt t u n ! e i n e m F e h l er. Dort ka n n m a n a lternativ (al les i n Großbuchsta ben) e i n g i bt. A n ­
das fol g e n d e Ko m ma n d o verwe n d e n : s c h l ießend ka n n d i e ROM-Ko n s o l e n i e
Z u r Ma n i p u l at i o n d e r eFuses bietet Espres­
sif das Werkzeu g e s p e f u s e . py an, das a u - p y t h o n -m p i p i n s t a l � e s p t oo l m e h r deaktiviert werd e n .

Ma ke: ESP32 specia l 201 9 1 63


BASIC I t----------------

P uiiTV Reconfi:gri!J ra,tt oA ? X


sen, d a m it m a n bei Bed a rf noch e i n paar Zei­
!i l e n e i n s c h i e ben ka n n .
Der fo l g e n d e K l a s s i ke r g i bt d e n Text
Category: "
Options corntrolling the tennirna1 eml!llatiorn
" H a l lo, M a ke-Magazi n ! so l a n g e a u s, bis m a n
l1 · · Sessiorn I I d a s Progra m m stoppt:

Set v a rio lJis. tenninal options


L . Logging
..
1 0 PRINT Ha l lo, Make-Magaz i n !
�aG;.illeM 121 A.!rto wrap mode irnifial!Y orn
2 0 GOTO 1 0
· > · Keyb oard
D D EC Orig in Mode irnitial!Y orn
l n Zei l e 1 0 g i bt d a s Prog ra m m d e n ge­
! . Bell
D lmplicit OR in every l.JF
...
w ü n schten Text m i t d e m pr i n t - Befe h l a u s .
! L . Features D i e g o t o-Anwe i s u n g i n Zei l e 20 i st e i n e u n ­
D lmplicit ILF 1in every OR b e d i ngte S p r u n g a nwe i s u n g , d i e d i e Ko ntrol­
..

t;� . Window
.

, .... �peararnce 121 Llse backgrol!ll'ld oolol!lr to erase screern l e wieder an die Zeile 1 0 ü berg i bt. D ? m it er­

, .... Beha'lll i ol!lr D Enable lllirnkirng text


g i bt sich e i n e E n d l ossch l eife, d i e nichts a n d e­
res tut, a l s i m m e r d iesel be Nach richt a u szu­
, . .. Translation AAswerback to "" E: geben. B e n a n nte Prog ra m m p u n kte (Labels)
'
' ... Se1ectiorn
: , . . Colol!lrs
IPuTTY I ke n n t T i n y BAS I C n i cht und die Arbeit mit

ß . Ccmnection
d e n Zei l e n n u m m ern w i rd s c h n e l l u n über­
.
Urne disciplirne optiorns. sichtlich.

Local echo :
L . senal . . Damit m a n d a s P rogra m m stoppen ka n n ,

0 A.!rt o
m u s s m a n es erst e i n m a l sta rten u n d das ge­
@ Force ,o rn 0 Force off
schieht mit dem Befe h l r u n . We n n man sich
Local line edit irng : a n d e r Ausgabe satt gesehen hat, hält m a n
O A.rt o @ Force on 0 Force off d a s P rog ra m m a n , i n d e m m a n Strg-C u n d
d a n a c h d i e Return-Taste d r ü ckt. Die Ausgabe
R.emote�orntrolled printing
des Progra m m s l ä uft wä h renddessen weiter.
Zwi schen die Zei l e n 1 0 und 20 ka n n m a n
So sollte die PuTTV-Konfiguration für die Arbeit m it der ROM-Konsole aussehen.
j etzt n o c h weitere Anwe i s u n g e n e i n sc h ie­
ben, indem man eine Zei l e n n u m m e r zwi­
schen 11 und 19 wä h lt. Zum Beispiel ka n n
m a n m i t h i lfe d e s Sch l ü sselwortes r e m wie
fo lgt e i n e Ko m m e nta rze i l e ei nfü g e n :

11 REM Zurück zum Anfang


Den Q u e l l text d e s Prog ra m m s fö rdert d a s
l i s t -Ko m m a n d o zutage u n d fü r das a ktue l l e
Prog ra m m s i e h t e r so a u s :

1 0 PRINT H a l lo, Make-Maga z i n !


1 1 REM ZURüCK ZUM AN FANG
20 GOTO 1 0
Der I n terpreter g i bt S c h l ü sselwörter u n d
Ko m m e nta re i m m e r i n G ro ß b u c h staben a u s .
A n s o n sten sieht d e r C o d e g e n a u s o a u s, wie
er e i n g egeben w u rde. We n n m a n g e n u g von
s e i n e m P rog ra m m hat, ka n n man es mit n e w
löschen u n d e i n neues e i n g e b e n .

H a c ken wie in den Achtzigern


Soba l d m a n m it d e n g r u n d legenden Eigen­
Die erste Begegnung mit der ROM-Konsole ist wenig spektakulär.
sch aften d e s I n te r p reters vertra ut i st, ka n n
m a n s i c h fortg esch ritten e n Themen zuwen­
d e n . Ä ltere Sem ester e r i n n e r n sich gewiss
und der g i bt e i n paar I nfo rmationen ü ber den beka n nte Befe h l e q u itt i e rt e r m it e i n e m
n o c h an die Peek- und P o ke-Befe h l e, m i t
I nterpreter aus. Die Konsole i st offenbar eine " What?" u n d u n vo l l stä n d i g e Anwei s u n g e n d e n e n m a n Speichera d ressen a u s l esen u n d
Erweiterung von TinyBasic Plus ( https:/I m it d e r M e l d u n g " H ow? " .
besc h reiben ko n n te. Die fu n ktionieren a u c h
githu b.com/Bieullama/Ti nyBasicPius) u n d Es­ Wie bei d e n m e i sten BAS I C - D i a l e kten
a u f d e m ESP32.
pressif hat d ieser Variante den Namen " ESP32 ka n n m a n a u c h m i t dem ESP32-BAS I C nicht
D i e fo l g e n d e A n we i s u n g g i bt z u m Bei­
ROM Basic " gegeben. Dass dem Basic 32.532 nur e i n ze l n e Befe h l e a bsetze n, s o n d e r n
spiel d e n I n h a lt d e s U A RT_DATE- Reg i sters
Bytes a n H a u ptspeicher z u r Verfü g u n g ste­ g a nze P rog ra m m e entwicke l n , i n d e m m a n
d e r serie l l e n S c h n ittste l l e UARTO a u s :
hen, wei ß der m e m-Befe h l zu berichten. d e n A n we i s u n g e n Zei l e n n u m m e r n vora n ­
Bei der E i n g a be u ntersc h e i d et d e r I nter­ stel lt. Die N u m merieru ng ka n n d a be i frei g e ­ PHEX PEEKC&h 3 F F40078 J

preter n icht zwischen G roß- u n d K l e i n s c h rei­ wä h l t werd e n u n d _m a n sol lte zwi s c h e n zwei Weil es fü r d i e Reg i ster-Ad ressen kei n e Ko n­
bung u n d fü h rt jeden Befe h l sofort a u s . Un- benac h b a rten Zei len g e n ü g e n d Absta n d las- sta nten g i bt, muss man die Ad resse des

64 1 Make: ESP32 special 201 9


\ \

\ p o k e_b l i n k . b a s \ 1 0 b l i nk . ba s
\ 10 '
B l i n ke r \ 1 0 IODlR 2,1

(' (' 3 0
20 POKE &H3 F F44020, 4 20 FOR A=1 TO 1 0
30 POKE &H3 Ff44004, 4 lOSET 2,1
40 D E LAY 200 40 D E LA Y 200
r 50 POKE &H3 F F44004, 0 50 lOSET 2,0
60 D E LAY 200 60 D E LAY 200
c 70 GOTO 30 r , 7 0 'N E X T A

( ('

U A RT_DATE- R e g i sters d ire kt a n g e b e n . l n


--""'·

Vö l l ig a n a l o g schaltet Zei l e 30 d i e LED e i n ,


Tools . fli r
d i esem F a l l ist d a s d i e H exadezi m a l-Za h l
3 F F400 78. S o l c h e Za h l e n beg i n n e n i n T i n y
BAS I C m i t dem P räfix " &h " . Der p e e k - Befe h l
i n d e m i m Reg i ster G P I O_O U T_R E G das Bit fü r
den G P I O - P i n 2 g esetzt wird. D a m i t w i rd d e r
P i n i n d e n Zusta n d H I G H versetzt u n d d i e
M a ker
l i est den Speicher- I n h a l t a n d e r Ad resse a u s Status-LED l e u c h tet. S o m i t e n t s p r i c h t d i ese
u n d g i bt i h n . a l s 3 2 - B it-Za h l zu rück. D i ese Anweisung dem Aufruf von d i g i ta L W r i te < 2 ,
Za h l w i rd dann wiederu m m i t h i lfe d e r p h e x ­ H I G H l i n d e r A rd u i n o- I DE.
F u n ktion a l s hexadezi m a l e Za h l a u sgegeben. Der Del ay-Befe h l wa rtet 200 M i l l i s e k u n ­
Solche Ad ressen m u ss man sich ü be r die den l a n g u n d d e r a n s c h l ießende p o k e -Befe h l
M e m o ry Map im Date n b l att (https ://www. s c h a l tet d i e Stat u s c L E D w i e d e r a u s. N a c h .
e s p ressif.com/sites/defa u l t/ fi l es/d o c u m e n e i n e r wei teren P a u se sorgt d i e g o to-Anwei­
tatio n/es p32_data s h eet_en .pdf) u n d d i e Be­ s u n g d afü r, dass das g a nze S p i e l von vorn
s c h re i b u n g e n der Reg ister i m Tec h n ical Re­ beg i n nt.
fe rence M a n u a l (https://www.es p ressif.com/ Statt das Prog ra m m m ü h s a m in de n I nter­
s i tes/defa u l t/fi l e s/d o c u m e n t a t i o n /e s p 3 2_ p reter zu tippen, ka n n man es a u c h in e i n e n
tec h n ica l_referen ce_m a n u a l_e n .pdf) zusam­ beliebigen Text- Editor l a d e n u n d m ittel s der
m e n s u c h e n . L e i d e r ist d i e D o k u m entat i o n normalen Ko p i e rene u n d Ei nfü g e n -Operatio­
n icht a l lzu ü p p i g . nen in das Fenster des serie l l e n M o n itors ko­
Das Geg e n st ü c k zu p e e k h e i ßt p o k e u n d p i e r e n . Der r u n - Befe h l sta rtet d a n n d a s
m i t d iesem Befe h l ka n n m a n Speicher- I n ha l ­ g roße B l i n ke n .
t e verä n d e r n . We i l d e r E S P 3 2 m i t m e m o ryc We i l d a s H a ntieren m i t festen Ad ressen
m a p ped 10 arbe itet, a l s o S p e i c h e ra d ressen u n d e i n ze l n e n B its m ü h s a m und fe h l era nfä l ­
a u f H a rdwa re-Reg i ster a b b i l d et, wi rken sich l i g i st, hat Espressif s e i n e r BASI C-Va ria nte e i n
solche Ä n d e r u n g e n oft auf das Verhalten der p a a r Befe h l e s p e n d i e rt, d i e z u m i n d est d e n
B a u stei n e i m ESP32 a u s . Beispielsweise ka n n Z u g riff a u f d i e G P I O- P i n s vere i n fa c h e n . Wie
m a n d u rc h Verä n d e r u n g d e r Werte a n d e n s i e fu n kt i o n i e re n zeigt L i st i n g i o_b l i n k.bas,
richtigen S p e i c h e ra d ressen G P I O - P i n s e i n ­ das d i e Status-LED zeh n M a l b l i n ke n l ä sst.
u n d a u sschalten. Listing po ke_b l i n k.bas de­ Die e rste Anwe i s u n g im Prog ra m m n utzt
m o n striert d a s und l ä sst die Status-l.'ED des d e n i od i r - Befe h l , d e r ko ntro l l i e rt, ob e i n
Entwickl u n g s bo a rd s b l i n ke n . G P I O - P i n e i n E i n g a n g o d e r e i n A u s g a n g ist.
Das P rog ra m m beg i n n t m i t e i n e r Ko m � Dazu ü be rg i bt man die N u m m e r des P i n s
m e n t a rze i l e, d i e d i e s m a l n i cht m i t d e m und eine 1, wenn er ein Ausgang sein soll.
Sch l ü sselwo rt r e m, s o n d e r n m i t e i n e m Apo­ Andernfa l l s e i n e 0. l n d iesem Fa l l m a c h t d e r
stroph e i n g e l eitet wird. Das i st eine a lterna­ Befe h l d e n G P I O- P i n 2 z u m Ausga n g .
tive Sch reibweise fü r Ko m m e ntare. l n Zeile 20 beg i n nt e i n e f o r-Sc h l eife, d i e
Ze i l e 20 b e n utzt den p o k e - Befe h l , u m i n BAS I C i m m e r e i n e Zä h l s c h l eife i st, a l so v o n
d a s Reg i ster G P I O_ E N A B L E_ R E G ZU beschrei­ e i n e m Anfa n g swert b i s zu e i n e m E n d we rt
ben. D i e s e s Reg i st e r k o n t ro l l i e rt, w e l c h e r zä h lt. H ie r zä h l t die S c h l eife von 1 b i s 1 0 u n d
G P I O- P i n e i n A u s g a be- P i n i st. l n d i esem Fa l l weist d e r Va r i a b l e n A d e n jewe i l i g e n S c h l e i ­
sol l e s P i n 2 s e i n , w e i l d e r m it d e r Status-LED fen i ndex zu. Va r i a b l e n m ü ssen i n BASIC ü b r i ­
d e s B o a r d s verb u n d e n i st. Dazu muss der g e n s n i c h t d e k l a r i e rt werd e n u n d kö n n e n
Wert 4 a n d i e Reg i ster-Ad resse g e s c h r i e b e n jeden beliebigen Wert a n ne h m e n .
werd e n , w e i l d a s Reg i st e r 3 2 B i t s b r e i t i s t l n d e r S c h l e ife setzt d a s P rog ra m m d e n
u n d j e d e s d i e s e r B i t s fü r e i n e n d e r G P I O ­ G P I O - P i n 2 a u f den Wert H I G H u n d s c h a l tet
P i n s 0-3 1 steht. G P I O - P i n 2 w i rd a l so d u rc h d a m it d i e Statu s - L E D e i n . Dazu d i e n t d i e
d a s d ritte B i t reprä s e n t i e rt u n d wen n m a n i o s e t -Anwei s u n g . Die erwa rtet d i e N u m me r
d a s a u f 1 setzt, e rg i bt d a s d e n Wert 4. Dieser des G P I O- P i n s u n d entwed e r d e n Wert 1
Befe h l ist a l so ,d a s Ä q u i va l e n t z u r A n w e i ­ ( H I G H ) o d e r 0 ( LOW) . N a c h �e i n e r ku rzen
sung p i n Mod e ( 2 , O U T P U T > i n d e r A rd u i no­ Pause sorgt i o s e t d a n n dafü r, dass das Licht

@ heise shop
U mgebung. fü r 200 M i l l i s e k u n d e n w i e d e r a u sgeht. Mit

M a ke: ESP32 special 20 1 9 l 65


BASIC �···-

Fans von Tiny BASIC finden auch


auf dem Arduino eine Version.

Das BASIC gibt gern ein wenig über sich preis,

der n e x t -Anwei s u n g beg i n nt die nächste Ite­ d e n E S P 3 2 i n i h re n P rod u kten e i n setzen Fazit
ration der f o r-Sc h l eife. und die i h re G e h e i m n i s s e v o r den A u g e n
Lässt m a n d a s P ro g ra m m im I nterpreter d e r Ö ffe n t l i c h keit verbergen wo l l e n , ka n n D i e ROM-Ko n s o l e i n k l u sive BASIC-I nterpre­
l a ufen, d a n n verh ä lt es sich exa kt so, wie d i e d a s e i n echtes P ro b l e m sei n . ter e r sc h e i n t z u n ä c h s t wie e i n Easter- E g g
p o k e -Va ria nte. A l l e rd i n g s i st d e r Q u e l ltext E s p ressif ist s i c h dessen bewusst u n d h a t d e r E s p ressif- E n twi c k l e r u n d verm u t l i c h wa r
u m Lä n g e n l e s b a re r. d a h e r e i n e e i n fa c h e Mög l i c h ke i t g e s c h af­ s i e a u c h so g e d a c h t . Trotz d e m ist s i e e i n e
Das Trio der 1 0- F u n kt i o n e n w i rd ko m ­ fe n , d e n B A S I C - I n t e r fiJ rete r a bz u s c h a l t e n . n ützl i c h e E i n ri c h t u n g u n d e r l a u bt u nter a n ­
p l ett i e rt d u rc h d e n Befe h l i o g e t . Da m i t D a z u m u s s m a n l ed i g l i c h e i n e besti m mte d e re m d i e P rog ra m m i e r u n g des E S P 3 2 g a n z
l ä sst s i c h d e r We rt, d e r g e r a d e a n e i n e m eFuse des E S P 3 2 d u rc h b re n n e n lassen. o h n e I D E.
G P I O - P i n a n l iegt, a u s l e s e n . D i e fo l g e n d e n I m Werkze u g e s p e f u s e . p y (https://g i t h u b . Zwa r ka n n man die so e rste l l ten P ro­
Anweisu n g e n g e b e n z u m B e i s p i e l d e n a ktu­ com/espress if/es ptool/wi ki/espefu se) n e n nt g r a m m e n i c h t a u f d e m Boa rd s p e i c h e r n ,
ellen We rt von G P I O � P i n 0 a u s, nachdem d e r E s p ressif d i ese S i c h e r u n g C O N S O L E_ D E B U G_ a be r m a n ka n n s i e beq u e m i m Co py-/Paste­
P i n i n den E i n g a be m o d u s versetzt wu rde: D I S A B L E. Ve rfa h re n vom PC auf den E S P 3 2 ko pieren.
IODIR 0,0 A kt u e l l e Vers i o n e n d e s E S P - I D F l a s s e n Da m it e i g net sich die Ko n s o l e h e rvorra­
PRINT IOGET < O l d i ese S i c h e r u n g g r u n d sätz l i c h d u rc h b r e n ­ gend, um neue Sensoren oder Aktaren p ro­
n e n , so d a s s n a c h d e m Ü be rsetze n u n d Auf­ toty p i s c h a u sz u p r o b ie r e n .
s p i e l e n e i n e s Prog ra m m s d e r B A S I C - I nter­ D i e Ve rs u c h u n g l i egt na he, d e n BAS I C - I n ­
Ist das denn sicher? p reter a u f d e m E S P 3 2 n i c h t mehr erre i c h b a r t e r p reter i n e i g e n e P rog ra m m e e i nzu bet­
i st. W e r d a s ve r h i n d e r n m ö c hte, m u s s d i e te n . Das ist a be r zum e i n e n n i c h t o h n e Wei­
Der u n g es c h ü tzte l e s e n d e u n d s c h re i b e n d e e F u s e z u v o r m itte l s e s p e f u s e . p y vor d e m teres m ö g l i c h und zu m a n d e re n ist es n i cht
Zug riff a u f d e n S p e i c h e r d e s E S P 3 2 d ü rfte S c h re i bz u g riff sch ütze n . A l l e rd i n g s ist a u c h s o n d e r l i c h s i n nvo l l , we i l d e r I nterprete r o h ­
den m e i sten S i c h e r h e itsexperten einen d i eser E i n g riff u n u m ke h rba r, d a s. h e i ßt, d a ­ n e h i n n u r 4 KB bea n s p ru c ht. Wer a l so tat­
S c h a u e r ü ber d e n R ü cken j a g e n . M i tte l s des n a c h ka n n d e r BASIC-I nterpreter n i e w i e d e r s ä c h l i c h BAS I C -Progra m m e a u sfü h ren möch­
p e e k - Befe h l s ließe s i c h s c h l i e ß l i c h d e r I n h a l t a bg e s c h a l tet w e rd e n . D i e A rd u i n o - I D E i s t te, s o l lte l i e be r e i n e n e i g e n e n I n terpreter
des g e s a m t e n S p e i c h ers a u f d i e s e ri e l l e n i c h t so i n v a s i v w i e d a s E S P- I D F u n d l ä sst e i n b i n d e n , sel bst we n n es ebenfa l l s ein Tiny
S c h n ittste l l e s c h re i b e n . F ü r H e rste l l e r, d i e die e F u ses in R u he. BAS I C ist. -dab

66 1 Make: ESP32 special 20 1 9


Fü r M a ker!
Bauprojekte und Zubehör
shop.heise.de/gadgets

LED-Nixie Platine M i n i POV-Giobus MaXYposi-Bundle


• Make: •·

..;::;,, i. .(( · ·i •== MaXYposi-Proj ekt haben Sie


Komplett bestückte Platine M i t d e m Komplett-Bundle zum

- ·�: :
Persistence o f Vision nutzt d i e

• • •
für eine Stelle mit bis zu
-· i ! . -!i
. ! ;: �· Trägheit d e s Auges u n d gaukelt

-· · • ..
zehn Zeichen einer LED-Ni­ drei entscheidende Teile zum
dem Betrachter ein dreidimensi-

.
Bau Ihres eigenen Multitools:
.. . ... ... - ·
!'
xie-Anzeige, wie sie i n der
!MI' ·-
Bi l d vor, obwohl s i c h nur
. -·. Make 4/201 8 vorgestellt die Schrittmotorsteuerung mit
. . ein Streifen mit LEDs bewegt.
wurde. Die Platinen sind CPU, die Kontrollpult-Platine und
Mit diesem umfangreichen die Step-Encoder-Piatine. Im
über die Stiftleisten anreih- ,_._"..
Bausatz holen Sie sich die Komplettpaket sparen!
bar. Je zwei der RGB- LEDs beleuchten eine Ziffer - die
beeindruckende Illusion nach
Farbe wird in der Software auf dem Arduino eingestellt.
Hause.

shop.heise.de/nixie-platine shop.heise.de/pov-globus shop.heise.de/max y posi-bundle

VAR IOBOT Calliope m i n i Make


Bausätze Alle können coden - NanoSynth
Die krabbelnden Monster und das m it ganz viel Der SAM2695 von
zum Löten oder Zusam­ Spaß! Mit wenigen DREAM ist ein mehr­
m enstecken ermöglichen Klicks können auf einem sti mmiger M I D I -Wavetable -Synthesizer m it
einen spielerischen angeschlossenen Rech­ Effekteingang auf 5 x 5 Q uadratmillimetern und
Einstieg in die Weit der ner eigene Programme bietet volle Polyphonie mit 1 28 GM-Standardinstru­
Elektronik und Robotik. für den M icroprozessor entworfen werden , die den rii e nten, verschiedenen Drumkits und Effekten .
Ausgestattet mit Sensoren Calliope m i n i zum Leben erwecken. Vorgestellt i n Make 1 / 1 8 !
und Schaltern, i m Handumdrehen zusammengebaut, Auch erhältlich : Gase oder Starter-Set!
erhältl ich in mehreren Farben !

shop.heise.de/variobot shop.heise.de/calliope shop.heise.de/make-s y nth

Tesla-Spule ODROID-GO
Mit diesem Bausatz entdecken Sie die Weit von M i t diesem Bausatz emulieren S i e auf Basis eines
Tesla und erzeugen selbst eine ungefährliche ESP32-Moduls nicht nur Spiel e - Klassiker, sondern
Hochspannung die am Drahtende der großen programmieren auch in der Arduino- Entwicklungs­
Spule einen Lichtbogen erzeugt. Mit allen umgebung.
benötigten Teilen und Anleitung online.

shop.heise.de/odroid

Makey Lötba usatz Make : Teatimer "Teeodohr"


Das blinkende Maker- Faire-Maskottchen Teeodohr überwacht die Ziehzeit I h res Heiss­
Makey ist ein H i ngucke r und auch der ideale getränks zwischen 3 und 12 M inuten auf die
Einstieg für die ersten eigenen Löterfahrungen. Sekunde genau, sobald Sie ihm die Karotte ins
Die konturgefräste Platine kommt zusammen Pfötchen drücken. Kompletter Bausatz ohne
mit Zubehör u n d Leuchtdioden, die den Ein­ Batterie und Lötzin n .
druck e i nes pulsierenden Herzens erwecken .

Jetzt n e u m i t Schalter! Nachproduktion läuft. Jetzt vorbestellen !

shop.heise.de/makey-bausatz shop.heise.de/make-teehase

Ab einem Einkaufswert von 1 5€ und für Heise Medien- und Maker Media-Abonnenten
sind alle Produkte versandkostenfrei . Preisänderungen vorbehalten.
2 x M a ke te ste n u n d 6 € s p a re n !
Ihre Vorteile:
./ GRATIS dazu: Arduino Nano ./ NEU: Jetzt auch im Browser lesen!
./ Zugriff auf Online-Artikel-Archiv* ./ Zusätzlich digital über iOS oder Android lesen
Für nur 15,60 Euro statt 21,80 Euro.

• Für die Laufzeit des Angebotes. Jetzt bestellen: make-magazi n.de/miniabo