Esp8266 mit dem CH340 USB TTL Konverter beschreiben und ansteuern

Bei einer seriellen Kommunikation zum ESP 8266 entstehen oftmals Probleme zwischen dem USB TTL Konverter und dem ESP8266. Häufig sind es dabei nur kleine Ursachen die wiederholt zu Problemen führen. Derzeit gibt es „noch keine“ Software mit komfortabler Oberfläche um den ESP8266 mittels einem Mac unter Apple OS X bzw. Linux zu beschreiben / flashen.  Diesbezüglich erfolgt die Beschreibung der häufigsten Fehler unter Verwendung von Python, hier ESPTool.

Bitte beachten: Nachfolgende Fehlerbeschreibung bezieht sich lediglich auf eine bereits eingerichtete und funktionierende Python Umgebung. Zwar ist Python standardmässig auf MAC OS X vorhanden, allerdings müssen im Vorfeld, folgende Schritte durchgeführt werden:

  • Das Python Paket pyserial muss installiert sein
  • Die Umgebungsvariable PYTHONPATH muss ab Version OS X 10.9 OS X Mavericks angepasst werden (Da ab OS X 10.9 die Python Umgebungsvariablen seitens Apple geändert wurden muss die Umgebungsvariable PYTHONPATH angepasst werden

Nachfolgend die häufigsten Probleme die bei einer seriellen Kommunikation zwischen ESP8266 und einem USB TTL Konverter auftreten:

Fehler: A fatal error occurred: Timed out waiting for packet header

Der Fehler bezüglich des Datei Headers oder auch der generelle Abbruch vor Abschluss der 100%

Writing 405504 @ 0x0... 404480 (99 %)
A fatal error occurred: Timed out waiting for packet header

beruht auf einer nicht ausreichenden Spannungsversorgung des ESP8266.

Prolific PL23003 HX USB TTL Konverter
Prolific PL23003 HX USB TTL Konverter

Größtenteils erfolgt der Kauf eines ESP8266, sowie die dazugehörige Peripherie bei unkundigen Online Händlern. Oftmals wird dabei auch dargestellt dass es lediglich einem USB TTL Konverter, sowie 4 Kabel benötigt um einen ESP8266 zu betreiben. Dies führt fälschlicherweise zu der Annahme dass die Stromversorgung eines ESP8266 direkt durch den USB TTL Konverter erfolgen könnte. Zwar findet man hierzu viele Dokumentation, sowie Einträge auf Internetseiten, gleichwohl mindestens im gleichen Umfang Fehlermeldung und Fragen zu hervorgerufenen Problemen. Ganz gleich ob bei einem Prolific USB TTL Konverter oder dem CH340 USB TTL Konverter, bei beiden ist der Ausgangsstrom sowohl im 3,3 Volt als auch 5 Volt Betrieb begrenzt.

Neben der Spannungsversorgung ist allerdings auch der Ausgangsstrom des TTL Konverters massgeblich. Je nach Hersteller variiert der Ausgangsstrom und erreicht bestenfalls 150 mA.

CH340G USB TTL Konverter

Das hat zur Folge das der ESP8266 zwar durch die Spannungsversorgung des USB TTL Konverter betrieben werden kann, beim Schreiben und Empfangen von Daten treten dabei meist Probleme auf. Dies begründet sich bereits in der Stromaufnahme eines nackten ESP8266EX Chip (ESP8226 ohne SPI Flash, LED,…). Selbst bei deaktivem Wifi Modem beträgt die Stromaufnahme beim

  • ESP 8266EX Chip bereits 50 mA

hierzu addiert sich die Stromaufnahme der weiteren Peripherie üblicher ESP8266 Module

  • SPI Flash je nach ESP8266 Modul bis zu 25 mA
  • sowie die Stromaufnahme einer Power LED, bzw. mindestens einer RX / TX Kontrolle LED von mindestens je 20 mA (ohne vorgeschaltete Widerstände)
  • CH340 USB TTL Konverter von 12mA im Ruhezustand bzw. min. 30 mA beim Schreiben und Empfangen von Daten
  • dem 10 KΩ Widerstand zwischen GPIO15 und GND (ganz gleich ob intern oder extern geschaltet)
  • teils einem Widerstand zwischen GPIO2 und 3,3 V
  • teils einem Widerstand zwischen GPIO EN / CHIP und 3,3 V
  • um nicht zu vergessen den für den Flash Modus benötigte 10 KΩ Widerstand zwischen GPIO0 und GND
Standard Anschluss eines ESP8266
Standard Anschluss eines ESP8266

Im Zusammenhang mit den gesamten Bauteilen eines ESP8266 Modul ist hier ein Strom von 150 mA nicht nur grenzwertig sondern nicht ausreichend. Hierin begründet sich auch das oftmals beschriebene Problem:

man muss das Beschreiben / Flashen eines ESP8266 eben 10 oder 20 mal versuchen, irgendwann funktioniert es schon

Üblicherweise erfolgt der Betrieb eines ESP8266 im Wifi / Wlan Modus, der serielle Modus dient dabei lediglich dem Flashen, bzw. der Konfiguration. Im Wifi / Wlan Modus bedarf es alleine für den ESP8266EX Chip rund 170mA, zzgl. der Stromaufnahme der weiteren Peripherie (LED, SPI Flash,…). Aus praktischer Erfahrung sollte daher die Stromversorgung mittels einem geeignetem 3,3 Volt Netzteil > 250 mA erfolgen.

Fehler:  serial.serialutil.SerialException: [Errno 2] could not open port

Fehlerausgabe in Python:

serial.serialutil.SerialException: [Errno 2] could not open port /dev/tty.wchusbserialfd330:[Errno 2] No such file or directory: '/dev/tty.wchusbserialfd330'

Hierfür können 4 Fehler die Ursache sein:

  1. die beim Aufruf ESPTool angegebene USB Schnittstelle ist falsch
    • hierzu unter Terminal mittels dem Befehl
    • ls /dev/tty.*
    • die aktiven Schnittstellen ausgeben lassen
    • die –port Angabe beim Aufruf von ESPTool entsprechend ändern und das Pythoscript erneut aufrufen
  2. der ESP8266 wurde bereits beschrieben, wurde aber nicht wie erforderlich zurückgesetzt
    • den ESP8266 durch ein Reset (Brücke zwischen RST Pin und GND mittels einem 10 KΩ Widerstand) zurücksetzen, bzw. den USB TTL Konverter abstecken und erneut anstecken
  3. Der ESP8266 ist nicht im erforderlichen Flash Modus
    • Der Flash Modus muss durch eine Brücke, zwischen GPIO0 und GND unter Verwendung eines 10KΩ Widerstand hergestellt werden
  4. Die USB  Schnittstelle mit dem TTL Konverter wird nicht angezeigt
    • den USB TTL Konverter in eine andere USB Schnittstelle einstecken und mittels dem Befehl in Terminal
      • ls /dev/tty.*
    • erscheint wiederum die USB Schnittstelle sollte der USB Treiber deinstalliert und erneut richtig installiert werden
  5. intuitiv wird fälschlicherweise RXD und TXD gleichlautend zwischen USB TTL Konverter und ESP8266 angeschlossen
    • RXD steht bezeichnend für Receive Data  TXD für Transmit Data dementsprechend muss RXD vom TTL Konverter auf TXD des ESP8266 und umgekehrt TXD vom TTL Konverter auf den RXD vom ESP8266 angeschlossen werden

Schreibe einen Kommentar