Hinweis
Planst du eine ESPuino Complete einzusetzen oder besitzt diese bereits, dann ist der nachfolgende Text weitgehend obsolet. Interessant ist dann höchstens die Frage, welcher RFID-Reader (RC522 oder PN5180) und welche Akkutechnologie (LFP oder LiPo). Meine Empfehlung wäre PN5180 und LFP .
ESPuino benötigt PSRAM
Mit dem Wechsel auf ESP32-Arduino2 als Framework, haben zahlreiche Verbesserungen in ESPuino Einzug erhalten. Jedoch ist ESPuino als Ganzes inzwischen zu speicherintensiv, um auf einem ESP32 ohne PSRAM sicher zu laufen. Insofern ist sicherzustellen, dass ein ESP32-WROVER verwendet wird, da dieser dem ESP32 PSRAM zur Seite stellt. Leider scheiden damit die meisten im Internet verfügbaren Develboards aus, da üblicherweise ESP32-WROOM verwendet wird (was für die meisten Projekte auch reicht).
Allgemeines zu ESP32-Develboards
Wer sich scheut, selbst SMD zu löten, der benutzt einfach ein sog. Develboard. Diese sind praktisch, denn für wenig Geld kriegt man Boards, die verschiedene Features bereitstellen:
- USB zu seriell-Adapter, so dass man via USB den ESP32 programmieren kann.
- Festspannungsregler: USB liefert 5V, der ESP32 verträgt jedoch nur 3.3V
- Freie GPIOs als Pinheader rausgeführt
- (optional) Integrierte Ladeelekronik für Akkus
- (optional) uSD-Karten-Slot
- (optional) Weitere Peripherie wie z.B. Klinkenstecker, Verstärker, Mikrophoneingang…
Also kurzum: Die Auswahl ist groß. Grundsätzlich haben alle Boards gemeinsam, dass auf ihnen ein ESP32 werkelt, weswegen sie (zumindest potentiell) alle mit ESPuino laufen sollten. Welches Board man letztlich verwendet, ist primär davon abhängig, welche Interessen man verfolgt. Möchte man z.B. Batteriebetrieb, so kann es Sinn machen, ein Develboard zu wählen, welches eine integrierte Ladeelekronik besitzt. Sicher, man kommt auch mit jedem anderen Board ans Ziel, indem man extern z.B. eine Powerbank anschließt. Man muss halt nur wissen, dass Boards wie z.B. die klassischen „ESP32 NodeMCU“ bzw. „Devkit C“ auch dann noch >10 mA fressen, wenn der ESP32 im Deepsleep ist. Umgehen kann man das natürlich, indem man an seinen ESPuino einen Schalter baut, der die Spannungsversorgung physikalisch trennt.
Ein weiterer und sehr wichtiger Punkt ist, wieviele GPIOs nach außen geführt werden, da ESPuino viele GPIOs benötigt. Auf der sicheren Seite ist man, wenn es möglichst viele sind, da dies mehr Flexibilität bietet.
Hier mal einige Kriterien, über die man sich aus meiner Sicht Gedanken machen sollte:
- Führt das ESP32-Develboard meiner Wahl ausreichend viele GPIOs nach außen, so dass mein Vorhaben machbar ist?
- Möchte ich Batteriebetrieb? Wenn ja: Ist ein Akkuanschluss vorhanden und bietet das Board ggf. eine integrierte Ladeelekronik? Ist der Strombedarf im ESP32-Deepsleep „überschaubar“?
- Batteriebetrieb: Gibt es bereits eine integrierte Möglichkeit, um die Spannung des angeschlossenen Akkus zu überwachen? Dies ist z.B. bei Lolin D32 oder Lolin D32 pro der Fall.
- Kann man auch im eingebauten Zustand, ohne drücken einer Taste, flashen?
- Möchte ich das OTA-Feature nutzen, so benötigst man mindestens 8 MB Speicher. Üblicherweise wird man dann zu einem Develboard mit einem ESP32-WROVER mit 16 MB greifen, weil dieses auch PSRAM besitzt. Es gibt auch ESP32-WROOMs mit 16 MB, aber diese habe ich auf einem Develboard noch nie verbaut gesehen.
Ein paar nützliche Links zu Videos von Andreas „the guy with the swiss accent“ Spiess:
Nachfolgend mal ein paar Develboards (aus meiner Sicht):
Wemos Lolin D32 pro
PRO:
- Führt sämtliche GPIOs nach außen
- Recht niedrige Stromaufnahme im Deepsleep
- Besitzt eine integrierte Ladelektronik für LiPo bis 500 mA Ladestrom
- Hat einen Spannungsteiler zur Akku-Spannungsmessung integriert
- Man muss zum Flashen keine Taste drücken
- Verwendet einen ESP32-WROVER mit 16 MB Flash
- SD-Slot integriert (leider aber SPI und kein SDMMC)
CON:
- GPIOs 16+17 sind nicht nutzbar, da sie vom ESP32-WROVER für interne Zwecke (PSRAM) benötigt werden. Da kann das Board allerdings nix für; das ist einfach so bei ESP32-WROVER.
- In Deutschland relativ teuer
- SD-Slot ist nicht mit SDMMC kompatibel (benutzt andere GPIOs)
D32 pro LFP
Basiert auf dem Lolin D32 pro und ist eine Eigenentwicklung von mir. Unterstützt im Gegensatz zu allen anderen Boards, die ich so kenne, LiFePO4 (anstelle LiPo) und hat einen USB-C-Anschluss.
PRO:
- Führt sämtliche GPIOs nach außen
- Recht niedrige Stromaufnahme im Deepsleep
- Besitzt eine integrierte Ladelektronik für LiFePO4 mit bis zu 1 A Ladestrom
- USB-C-Anschluss
- Hat einen stromsparenden Spannungsteiler zur Spannungsmessung integriert
- Man muss zum Flashen keine Taste drücken
- Verwendet einen ESP32-WROVER-E mit 16 MB Flash
- Unterstützt in der 16 MB Flash-Variante auch OTA-Updates
CON:
- GPIOs 16+17 sind nicht nutzbar, da sie vom ESP32-WROVER für interne Zwecke (PSRAM) benötigt werden. Da kann das Board allerdings nix für; das ist einfach so bei ESP32-WROVER.
ESP32 NodeMCU (aka DevKit C)
Das Standardboard. Für die meisten Leute vermutlich der Einstieg in die ESP32-Welt. Achtung: Es gibt welche mit 30 Pins und welche mit 38 Pins. Auf jeden Fall das Größere nehmen.
PRO:
- Führt sämtliche GPIOs nach außen. (Auch solche, die man nicht wirklich nutzen kann.)
- In Deutschland recht günstig
CON:
- Hat keinen Spannungsteiler zur Spannungsmessung integriert
- Recht hohe Stromaufnahme im Deepsleep (für Batteriebetrieb wichtig, ohne Batteriebetrieb aber egal)
- Besitzt in der Regel keine integrierte Ladelektronik für Akkus
- Verwendet einen ESP32-WROOM
- Man muss zum Flashen eine Taste drücken (manchmal geht’s auch ohne, warum auch immer!?)
- Unterstützt wegen nur 4 MB Flash kein OTA-Update
RFID: RC522 oder PN5180?
RC522
PRO:
- Ist der Quasi-Standard
- Günstig zu haben
- Braucht nur vier GPIOs
CON:
- Reichweite
Fazit: Wenn du mit der Reichweite kein Probem hast, dann bleibe am besten einfach beim RC522.
Hinweis: Die Verstärkung (Gain) kann man einstellen in settings.h
via rfidGain
. Mögliche Werte sind nachfolgend beschrieben:
Hier gibt es auch noch ein paar Infos: Kompatible NFC Tags
PN5180
PRO:
- Erheblich bessere Reichweite (6cm und mehr). Wird noch besser, wenn man ISO-15693-RFID-Tags verwenden, diese sind jedoch teurer.
- Kann ab Firmware 4.1 (die man aber selbst flashen muss) auch den ESPuino aus dem Deepsleep aufwecken
- Kann auch andere RFID-Kartentypen lesen. Mit Passwort z.B. auch T*nies. Und da ESPuino immer nur lesend auf RFIDs zugreift, wird auch nix überschrieben/kaputt gemacht.
CON:
- Teurer als RC522
- Gibt es fast nur in China. In Deutschland sehr teuer.
- Benötigt mehr GPIOs: 6. Zur Nutzung des Deepsleep-Features sogar 7.
Fazit: Lohnt sich vor allem dann, wenn man Probleme mit der Sensitivität des RC522 hat. Ich für den PN5180 aber definitiv empfehlen! Hinweis: Vereinzelt wurden mit diesem Reader auch Probleme beschrieben: RFID Sticker (mit PN5180).
3.3 V oder 5 V?
Viele Develboards führen 3.3 V und 5 V nach außen; ungeachtet dessen, dass der ESP32 intern immer mit 3.3 V läuft. Das ist erstmal gut, weil dann kann man sich die jeweils passende Spannung für die Peripherie aussuchen. Problem: Betreibt man die Lolin-Boards ausschließlich mit einem LiPo-Akku, so gibt es keine 5 V mehr, da der LiPo-Akku selbst nur maximal 4.2 V führt. Hier hat man keine Wahl: Die Peripherie kann nur mit 3.3 V versorgt werden. Alternativ kann man natürlich auch eine Powerbank verwenden; diese liefert immer 5 V und wird extern angeschlossen. Auch möglich ist eine externe Ladeelektronik und ggf. ein Regler, der aus den maximal 4.2 V eben 5 V macht. Nur muss sich jeder selbst überlegen, ob es Sinn macht, die Spannung anzuheben, damit sie im Anschluss vom Festspannungsregler des Develboards wieder zu 3.3 V wird (und die überschüssigen 1.7 V schlicht verbraten werden).
Auf der anderen Seite kann es aber auch Nachteile haben, nur 3.3 V zur Verfügung zu haben. Die Neopixel sind beispielsweise für 5 V spezifizert; sie laufen jedoch mit 3.3 V ebenso. Weiterhin hat der MAX98357a bei 3.3 V weniger Leistung als bei 5 V. Mir persönlich macht das nichts, er ist aus meiner Sicht für meine Kinder mehr als laut genug.
Wichtig: Verwendet man 3.3 V so sollte man sich gut überlegen, welches SD-Board man verwendet. Es gibt viele, die beide Spannungen unterstützen. Schlecht ist es, wenn es dafür nur einen Anschluss gibt. Denn das bedeutet, dass die Spannung immer über einen internen Spannungsregler läuft. Das ist deswegen ein Problem, weil der Spannungsregler von den 3.3 V ein bisschen was abzwackt, so dass es dahinter mit der noch zur Verfügung stehenden Spannung eng werden kann. Sind 3.3 V geplant, so bin ich persönlich ein großer Fan dieses SD-Boards. Das ist so ziemlich das Billigste von allen, aber da es keinen Festspannungsregler besitzt, funktioniert es SICHER an 3.3 V auch astrein. Wichtig: Es kann KEIN 5 V!
SPI oder SD_MMC?
SPI
PRO:
- Keine.
CON:
- Langsamer als SD_MMC
- Braucht 4 GPIOs (statt 3 bei SD_MMC)
SD_MMC
PRO:
- Erheblich schneller als SPI
- Benötigt nur 3 GPIOs
CON:
- GPIOs (15, 14, 2) sind fest und können nicht geändert werden beim ESP32 (beim ESP32-S3 ginge das).
- Einer der GPIOs ist 2. Wird dieser GPIO beim Start des ESP32 auf HIGH gezogen, so kriegt man den ESP32 nicht in den Flash-Modus. Das bedeutet, dass man SD-Board ein etwaiger PullUp-Widerstand entfernt werden muss. Siehe z.B. hier bei diesem SD-Board.
Fazit: SD_MMC lohnt sich auf jeden Fall.
Akku: LiPo oder LiFePO4?
Das lasse ich am besten denjenigen ausführen, der sich damit gut auskennt: EREMIT LiIon - der richtige Akku.
Jumperwires oder Stecker?
Auf jeden Fall Stecker (oder anlöten)!! Jumperwires sind zum Testen mitunter schon kritisch, aber auf lange Sicht definitiv problematisch. Guter oder schlechter Kontakt scheint sowas wie tagesformabhängig zu sein Klar, zum Testen wird man erstmal mit Jumperwires experimentieren wollen. Aber man wird damit nicht glücklich. Glaubt mir!