<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>ESP32 on </title>
    <link>https://daswarschonkaputt.de/tags/esp32/</link>
    <description>Recent content in ESP32 on </description>
    <generator>Hugo -- gohugo.io</generator>
    <language>de-DE</language>
    <lastBuildDate>Mon, 12 Oct 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://daswarschonkaputt.de/tags/esp32/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>ESP-Boards: Warum du dir diesen Mikrocontroller-Zirkus nicht antun solltest</title>
      <link>https://daswarschonkaputt.de/blog/esp-wtf/</link>
      <pubDate>Mon, 12 Oct 2026 00:00:00 +0000</pubDate>
      
      <guid>https://daswarschonkaputt.de/blog/esp-wtf/</guid>
      <description>&lt;p&gt;Du hast gehört, ESP32-Boards seien „günstig, leistungsstark und perfekt für IoT&amp;quot;. Du hast eins für 4,99 € bestellt. Du dachtest: „Das ist ein Wochenendprojekt.&amp;quot; Es ist drei Wochen später, du hast vier Boards, einen Stapel USB-Kabel und die ernsthafte Frage im Kopf, ob dein Leben noch einen Sinn hat.&lt;/p&gt;
&lt;p&gt;Willkommen in der Hölle. Ich zeige dir den Weg.&lt;/p&gt;
&lt;h2 id=&#34;kapitel-1-das-flashen-oder-halte-den-boot-knopf-und-bete&#34;&gt;Kapitel 1: Das Flashen, oder „Halte den BOOT-Knopf und bete&amp;quot;&lt;/h2&gt;
&lt;p&gt;Bei einem normalen Gerät steckst du etwas an, und es funktioniert. Beim ESP gibt es ein Ritual:&lt;/p&gt;</description>
      <content>&lt;p&gt;Du hast gehört, ESP32-Boards seien „günstig, leistungsstark und perfekt für IoT&amp;quot;. Du hast eins für 4,99 € bestellt. Du dachtest: „Das ist ein Wochenendprojekt.&amp;quot; Es ist drei Wochen später, du hast vier Boards, einen Stapel USB-Kabel und die ernsthafte Frage im Kopf, ob dein Leben noch einen Sinn hat.&lt;/p&gt;
&lt;p&gt;Willkommen in der Hölle. Ich zeige dir den Weg.&lt;/p&gt;
&lt;h2 id=&#34;kapitel-1-das-flashen-oder-halte-den-boot-knopf-und-bete&#34;&gt;Kapitel 1: Das Flashen, oder „Halte den BOOT-Knopf und bete&amp;quot;&lt;/h2&gt;
&lt;p&gt;Bei einem normalen Gerät steckst du etwas an, und es funktioniert. Beim ESP gibt es ein Ritual:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Board anstecken.&lt;/li&gt;
&lt;li&gt;Auf „Upload&amp;quot; klicken.&lt;/li&gt;
&lt;li&gt;Warten.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Connecting........_____.....____&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Panik.&lt;/li&gt;
&lt;li&gt;BOOT-Taste gedrückt halten, EN kurz tippen, Mondphase prüfen, Hühnerblut auf das Breadboard.&lt;/li&gt;
&lt;li&gt;Fehler: &lt;code&gt;A fatal error occurred: Failed to connect to ESP32: No serial data received.&lt;/code&gt;, ja warum denn nicht?&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Beim nächsten Versuch klappt es dann plötzlich, &lt;strong&gt;ohne dass du irgendetwas anders gemacht hast&lt;/strong&gt;. Das ist kein Erfolg, das ist ein Fluch.&lt;/p&gt;
&lt;p&gt;Und das USB-Kabel erst. Die Hälfte aller Kabel in deiner Schublade lädt nur Handys und hat keine Datenleitungen. Sie sehen aus wie normale Kabel, sie fühlen sich an wie normale Kabel, und sie lügen dich in jeder Sekunde an. Du verbringst zwei Stunden mit der Fehlersuche im Treiber, bzw. den udev-Rules, bis du merkst, dass das Kabel der Täter war.&lt;/p&gt;
&lt;p&gt;Apropos Treiber: Je nach Board steckt ein CP2102, ein CH340 oder ein anderer Chip als USB-Seriell-Wandler drauf. Unter Windows lädst du irgendeinen Treiber von einer Webseite, die aussieht, als würde sie dir gleich einen Krypto-Miner unterjubeln. Und unter Linux? Dazu kommen wir in Kapitel 2. Schnall dich an.&lt;/p&gt;
&lt;h2 id=&#34;kapitel-2-linux-udev-und-die-kunst-einen-port-zu-bekommen&#34;&gt;Kapitel 2: Linux, udev und die Kunst, einen Port zu bekommen&lt;/h2&gt;
&lt;p&gt;Du bist ein vernünftiger Mensch. Du benutzt Linux. Du denkst: „Hier läuft alles einfach, Treiber sind ja im Kernel.&amp;quot; Und tatsächlich: Du steckst das Board an, und &lt;code&gt;/dev/ttyUSB0&lt;/code&gt; oder &lt;code&gt;/dev/ttyACM0&lt;/code&gt; erscheint. Ein Wunder!&lt;/p&gt;
&lt;p&gt;Du klickst auf Upload.&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;Permission denied: &amp;#39;/dev/ttyUSB0&amp;#39;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Natürlich. Der Port gehört &lt;code&gt;root:dialout&lt;/code&gt;, und du gehörst nicht zu &lt;code&gt;dialout&lt;/code&gt;. Also tippst du &lt;code&gt;sudo usermod -aG dialout $USER&lt;/code&gt;, loggst dich nicht aus, wunderst dich, dass es immer noch nicht geht, loggst dich aus, loggst dich wieder ein, und es geht. Bis du die Distribution wechselst, denn dort heißt die Gruppe &lt;code&gt;uucp&lt;/code&gt;. Oder &lt;code&gt;plugdev&lt;/code&gt;. Oder irgendwas anderes, was sich ein Maintainer aus der Hölle ausgedacht hat.&lt;/p&gt;
&lt;p&gt;Aber das ist nur die Aufwärmrunde. Jetzt kommen die richtigen Gegner.&lt;/p&gt;
&lt;h3 id=&#34;gegner-1-modemmanager-der-port-dieb&#34;&gt;Gegner 1: ModemManager, der Port-Dieb&lt;/h3&gt;
&lt;p&gt;Kaum steckst du dein Board an, wacht ModemManager auf und denkt sich: „Ein serielles Gerät! Das ist bestimmt ein Modem! Ich probiere mal ein paar AT-Kommandos aus!&amp;quot; Mitten in deinem Flash-Vorgang. Dein ESP versteht davon kein Wort, dein Upload bricht ab, und du hast keine Ahnung, warum.&lt;/p&gt;
&lt;h3 id=&#34;gegner-2-brltty-die-braille-mafia&#34;&gt;Gegner 2: brltty, die Braille-Mafia&lt;/h3&gt;
&lt;p&gt;Auf manchen Ubuntu-Versionen schnappt sich der Braille-Dienst &lt;code&gt;brltty&lt;/code&gt; den CH340-Chip, weil dessen USB-ID zufällig zu einem Braille-Display passt. Das Gerät erscheint kurz, verschwindet wieder, und du starrst auf &lt;code&gt;lsusb&lt;/code&gt;, in dem das Ding steht, während &lt;code&gt;/dev/ttyUSB0&lt;/code&gt; fehlt. Wenn du das einmal erlebt hast, vergisst du es nie wieder.&lt;/p&gt;
&lt;h3 id=&#34;gegner-3-die-wandernden-ports&#34;&gt;Gegner 3: Die wandernden Ports&lt;/h3&gt;
&lt;p&gt;Dein ESP32-S3 mit nativem USB meldet sich im normalen Betrieb als &lt;code&gt;/dev/ttyACM0&lt;/code&gt;. Gehst du in den Bootloader-Modus, verschwindet der Port, und dasselbe Board erscheint als &lt;code&gt;ttyACM1&lt;/code&gt;, mit anderer USB-ID. In der IDE ist natürlich noch der alte Port eingestellt. Viel Spaß beim Raten.&lt;/p&gt;
&lt;h3 id=&#34;die-lösung-udev-regeln-ja-du-musst-jetzt-regeln-schreiben&#34;&gt;Die Lösung: udev-Regeln (ja, du musst jetzt Regeln schreiben)&lt;/h3&gt;
&lt;p&gt;Wer das alles einmal sauber lösen will, schreibt sich eigene udev-Regeln. Zuerst findest du die Hersteller- und Produkt-ID deines Boards heraus:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;lsusb
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# Bus 001 Device 007: ID 10c4:ea60 Silicon Labs CP210x UART Bridge&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Typische Kandidaten sind:&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;Chip&lt;/th&gt;
          &lt;th&gt;Vendor:Product&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;Silicon Labs CP210x&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;10c4:ea60&lt;/code&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;WCH CH340&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;1a86:7523&lt;/code&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;WCH CH9102&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;1a86:55d4&lt;/code&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Espressif USB-Serial/JTAG (natives USB)&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;303a:1001&lt;/code&gt;&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Dann legst du eine Datei an, zum Beispiel &lt;code&gt;/etc/udev/rules.d/99-esp32.rules&lt;/code&gt;:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code class=&#34;language-udev&#34; data-lang=&#34;udev&#34;&gt;# Silicon Labs CP210x
SUBSYSTEMS==&amp;#34;usb&amp;#34;, ATTRS{idVendor}==&amp;#34;10c4&amp;#34;, ATTRS{idProduct}==&amp;#34;ea60&amp;#34;, MODE=&amp;#34;0660&amp;#34;, GROUP=&amp;#34;dialout&amp;#34;, TAG+=&amp;#34;uaccess&amp;#34;, ENV{ID_MM_DEVICE_IGNORE}=&amp;#34;1&amp;#34;, SYMLINK+=&amp;#34;esp32&amp;#34;

# WCH CH340
SUBSYSTEMS==&amp;#34;usb&amp;#34;, ATTRS{idVendor}==&amp;#34;1a86&amp;#34;, ATTRS{idProduct}==&amp;#34;7523&amp;#34;, MODE=&amp;#34;0660&amp;#34;, GROUP=&amp;#34;dialout&amp;#34;, TAG+=&amp;#34;uaccess&amp;#34;, ENV{ID_MM_DEVICE_IGNORE}=&amp;#34;1&amp;#34;

# WCH CH9102
SUBSYSTEMS==&amp;#34;usb&amp;#34;, ATTRS{idVendor}==&amp;#34;1a86&amp;#34;, ATTRS{idProduct}==&amp;#34;55d4&amp;#34;, MODE=&amp;#34;0660&amp;#34;, GROUP=&amp;#34;dialout&amp;#34;, TAG+=&amp;#34;uaccess&amp;#34;, ENV{ID_MM_DEVICE_IGNORE}=&amp;#34;1&amp;#34;

# Espressif USB-Serial/JTAG (ESP32-S3, C3, ...)
SUBSYSTEMS==&amp;#34;usb&amp;#34;, ATTRS{idVendor}==&amp;#34;303a&amp;#34;, ATTRS{idProduct}==&amp;#34;1001&amp;#34;, MODE=&amp;#34;0660&amp;#34;, GROUP=&amp;#34;dialout&amp;#34;, TAG+=&amp;#34;uaccess&amp;#34;, ENV{ID_MM_DEVICE_IGNORE}=&amp;#34;1&amp;#34;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Was die Zeilen tun:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;MODE&lt;/code&gt; und &lt;code&gt;GROUP&lt;/code&gt; setzen die Zugriffsrechte, damit du nicht mehr Root sein musst.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;TAG+=&amp;quot;uaccess&amp;quot;&lt;/code&gt; gibt dem gerade am Rechner angemeldeten Benutzer automatisch Zugriff, auch ohne Gruppenmitgliedschaft.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ENV{ID_MM_DEVICE_IGNORE}=&amp;quot;1&amp;quot;&lt;/code&gt; sagt ModemManager, dass er seine Finger davon lassen soll.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;SYMLINK+=&amp;quot;esp32&amp;quot;&lt;/code&gt; legt einen stabilen Namen unter &lt;code&gt;/dev/esp32&lt;/code&gt; an. Achtung: Hängen mehrere gleiche Boards am Rechner, gewinnt eins davon zufällig. Dafür brauchst du dann die Seriennummer (&lt;code&gt;ATTRS{serial}&lt;/code&gt;).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Danach lädst du die Regeln neu und steckst das Board &lt;strong&gt;neu an&lt;/strong&gt;:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sudo udevadm control --reload-rules
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sudo udevadm trigger
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Und wenn es trotzdem nicht klappt, helfen diese Befehle beim Detektivspielen:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;udevadm monitor --udev --property     &lt;span style=&#34;color:#75715e&#34;&gt;# was passiert beim Einstecken?&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;udevadm info -a -n /dev/ttyUSB0       &lt;span style=&#34;color:#75715e&#34;&gt;# welche Attribute kann ich matchen?&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ls -l /dev/ttyUSB0                    &lt;span style=&#34;color:#75715e&#34;&gt;# wem gehört der Port gerade?&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Wer PlatformIO nutzt, kann sich auch deren fertige Regeldatei &lt;code&gt;99-platformio-udev.rules&lt;/code&gt; besorgen und sich das Schreiben sparen. Das ist die bequeme Variante, aber wo bleibt da der Schmerz, und hat dich mal irgendeine Anleitung die dem Board beiliegt, darauf hin gewiesen? Nein natürlich nicht!&lt;/p&gt;
&lt;p&gt;Und wenn du die Arduino IDE als Flatpak oder Snap betreibst, darfst du zusätzlich noch mit der Sandbox um Gerätezugriffe verhandeln. Aber das ist ein Thema für ein anderes Kapitel. Oder eine andere Therapiestunde.&lt;/p&gt;
&lt;h2 id=&#34;kapitel-3-die-ide-frage-oder-such-dir-dein-gift-aus&#34;&gt;Kapitel 3: Die IDE-Frage, oder „Such dir dein Gift aus&amp;quot;&lt;/h2&gt;
&lt;p&gt;Es gibt nicht &lt;em&gt;die&lt;/em&gt; Entwicklungsumgebung. Es gibt &lt;strong&gt;mindestens fünf&lt;/strong&gt;, und alle sind auf ihre eigene Weise ein bisschen kaputt.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Arduino IDE 1.x:&lt;/strong&gt; Sieht aus, als wäre sie 2007 im Keller eines Elektrotechnik-Instituts entstanden. Kein Autocomplete, kein vernünftiger Editor, aber hey, sie kompiliert (meistens).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Arduino IDE 2.x:&lt;/strong&gt; Schicker, aber langsam. Sie braucht zum Starten länger als dein Kaffee zum Abkühlen und stürzt gern mal ab, wenn du den Serial Monitor öffnest.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;PlatformIO in VS Code:&lt;/strong&gt; Die „professionelle&amp;quot; Lösung. Du installierst eine Erweiterung, die erst mal eine halbe Ewigkeit Toolchains herunterlädt, dann ein Python-Environment baut und dir schließlich mitteilt, dass irgendeine Abhängigkeit nicht passt. Mächtig, ja. Aber auch ein Hobby für sich.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ESP-IDF:&lt;/strong&gt; Das offizielle Framework von Espressif. Es ist großartig, wenn du Embedded-Entwickler bist und mit CMake, Kconfig und FreeRTOS-Tasks aufgewachsen bist. Wenn du nur eine Temperatur auslesen wolltest, wird dich &lt;code&gt;idf.py menuconfig&lt;/code&gt; mit seinen 4.000 Optionen komplett aus der Bahn werfen, versprochen.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;MicroPython / CircuitPython:&lt;/strong&gt; „Ganz einfach, einfach Python!&amp;quot; Dann merkst du, dass die Hälfte der Bibliotheken fehlt oder anders heißt, dass der Speicher ständig vollläuft und dass die Performance eher an einen Taschenrechner erinnert, der gerade aus dem Winterschlaf erwacht.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Und natürlich ist nichts davon kompatibel zueinander. Dein Projekt in der Arduino IDE kannst du nicht mal eben nach PlatformIO schieben, ohne dass etwas explodiert, ist doch klar, oder?&lt;/p&gt;
&lt;h2 id=&#34;kapitel-4-bibliotheken-oder-bitte-nicht-die-version-die-du-brauchst&#34;&gt;Kapitel 4: Bibliotheken, oder „Bitte nicht die Version, die du brauchst&amp;quot;&lt;/h2&gt;
&lt;p&gt;Das ist mein persönlicher Favorit. Die Bibliotheksverwaltung beim ESP ist ein Glücksspiel, bei dem das Haus immer gewinnt.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Szenario A:&lt;/strong&gt; Du suchst eine Bibliothek für dein Display. Es gibt 14 Stück. Zwei davon sind gut, eine ist seit 2018 nicht mehr gepflegt, und drei heißen fast gleich, funktionieren aber komplett unterschiedlich. Die Tutorials im Netz nutzen natürlich alle eine andere als die, die du installiert hast.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Szenario B:&lt;/strong&gt; Das Tutorial ist von 2021. Die Bibliothek wurde seitdem dreimal umgebaut. Der Beispielcode kompiliert nicht mehr, und das GitHub-Issue dazu hat 83 Kommentare, davon 80 mit „+1&amp;quot; und einer mit „Fixed in my fork&amp;quot; (die Fork ist selbst seit zwei Jahren tot).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Szenario C:&lt;/strong&gt; Du aktualisierst das ESP32-Board-Paket, weil eine Bibliothek es verlangt. Zack, eine andere Bibliothek, die gestern noch lief, kompiliert nicht mehr. Willkommen im Versionsroulette. Core 2.x gegen Core 3.x, ein Schisma, das Familien entzweit hat.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Szenario D:&lt;/strong&gt; Die Bibliothek existiert für den ESP8266, für den ESP32 aber nicht. Oder für den ESP32, aber nicht für den ESP32-S3. Oder für den S3, aber nicht für den C3. Espressif bringt gefühlt monatlich einen neuen Chip heraus, und die Community kommt mit dem Portieren nicht hinterher.&lt;/p&gt;
&lt;p&gt;Und dann gibt es noch die Klassiker:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;fatal error: Something.h: No such file or directory&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Ich habe diese Fehlermeldung inzwischen öfter gesehen als meine eigene Frau.&lt;/p&gt;
&lt;h2 id=&#34;kapitel-5-der-rest-oder-was-sonst-noch-nervt&#34;&gt;Kapitel 5: Der Rest, oder „Was sonst noch nervt&amp;quot;&lt;/h2&gt;
&lt;p&gt;Weil dieser Artikel sonst nur 40 Seiten lang wäre, hier die Schnellübersicht des Grauens:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Die Pinbelegung ist ein Minenfeld.&lt;/strong&gt; Manche GPIOs darfst du beim Booten nicht auf HIGH ziehen. Manche sind nur Eingang. Manche hängen am Flash. Manche gehen nicht, wenn WLAN aktiv ist (ADC2, ich schaue dich an). Auf dem Board steht nichts davon, aber es steht in einem PDF mit 700 Seiten.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Jeder Hersteller baut sein eigenes Board.&lt;/strong&gt; Das DevKitC von Espressif, das von AZ-Delivery, der NodeMCU-Klon, das Wemos-Dings, das T-Display von LilyGo. Alle haben leicht andere Pinouts, aber alle heißen irgendwie „ESP32&amp;quot;. Der Schaltplan im Tutorial stimmt nie mit deinem Board überein.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Der Brownout-Detector.&lt;/strong&gt; Dein ESP startet ständig neu, weil das USB-Netzteil nicht genug Strom liefert, sobald WLAN aktiv wird. Die Fehlermeldung: &lt;code&gt;Brownout detector was triggered&lt;/code&gt;. Die Lösung: Ein besseres Kabel, ein besseres Netzteil, oder ein Kondensator, den du gerade nicht hast.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;WLAN und Bluetooth gleichzeitig.&lt;/strong&gt; Technisch geht das. Praktisch zerlegt es deinen Speicher, deine Stabilität und deine Nerven.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Der Stromverbrauch.&lt;/strong&gt; „Perfekt für Batteriebetrieb!&amp;quot; stand auf der Produktseite. Dein Board saugt die Zelle in zwei Tagen leer. Deep Sleep funktioniert theoretisch, aber der Spannungsregler und die Power-LED auf dem Entwicklungsboard fressen im Schlafmodus mehr als der Chip selbst.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Die Dokumentation.&lt;/strong&gt; Sie existiert, ja. Es gibt sogar viel davon. Nur steht die Antwort auf deine Frage immer genau in dem Teil, der fehlt, veraltet ist oder auf Chinesisch im Forum steht.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Over-the-Air-Updates.&lt;/strong&gt; Super Feature! Bis du die Partitionstabelle verkonfiguriert hast und dein Board nur noch mit Kabel und Tränen zu retten ist.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Die Qualität der Billig-Boards.&lt;/strong&gt; Du kaufst fünf. Eins hat einen kaputten Spannungsregler, eins hat kein funktionierendes WLAN, eins wird beim Anfassen heiß wie ein Toaster. Und bei der Reklamation fragt dich der Händler, ob du es schon mal aus- und wieder eingesteckt hast.&lt;/p&gt;
&lt;h2 id=&#34;fazit-und-trotzdem&#34;&gt;Fazit: Und trotzdem&amp;hellip;&lt;/h2&gt;
&lt;p&gt;Und jetzt kommt das Schlimmste: &lt;strong&gt;Du wirst es trotzdem wieder tun.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Denn irgendwann, nach vier Stunden Fehlersuche und drei Tassen Kaffee, blinkt sie plötzlich. Die LED. Diese eine kleine, dumme LED. Und für einen Moment fühlst du dich wie ein Gott. Dann kommt das Dopamin, und du bestellst gleich drei neue Boards, weil du ja noch dieses eine Projekt umsetzen wolltest.&lt;/p&gt;
&lt;p&gt;Der ESP ist wie eine toxische Beziehung: Er ist billig, unzuverlässig und macht dich wahnsinnig, aber er ist eben auch irgendwie &lt;strong&gt;überall&lt;/strong&gt; und kann &lt;strong&gt;so verdammt viel&lt;/strong&gt; für so wenig Geld.&lt;/p&gt;
&lt;p&gt;Wer also trotz aller Warnungen einsteigen will: Kauf gute Datenkabel, schreib dir deine udev-Regeln, nimm PlatformIO oder ESP-IDF, wenn du es ernst meinst, pinne deine Bibliotheksversionen fest und lies das Datenblatt, bevor du einen Pin anfasst. Und wenn alles nichts hilft: Aus- und wieder einstecken.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Diesen Artikel habe ich geschrieben während ich wieder mal bei „Connecting&amp;hellip;&amp;hellip;&amp;quot; hängen geblieben bin, obwohl ich nur schnell eine .bin flashen wollte. Er ist natürlich nicht so Ernst gemeint, aber ein wenig Frust, wollte ich damit schon mal ablassen :-) - Wir lesen uns, euer JohnJayMcKaye!&lt;/em&gt;&lt;/p&gt;
</content>
    </item>
    
  </channel>
</rss>
