Der ESP8266 kann direkt per Arduino programmiert werden.
Normalerweise braucht man dazu extra Buttons, die man kompliziert drücken muss.
Wenn man aber einen FTDI hat, der auf 3.3V an den IO-Pinnen läuft und an dem sich die RTS Leitung herausführen lässt, sollte es vollautmatisch wie folgt gehen:
╭────────────────────────────╮
│ FTDI Board -> DTR ├
┤ <- RX ├
┤ U -> TX ├
┤ S VCC ├
┤ B <- CTS ├
│ GND ├
╰────────────────────────────╯
╭────────────────────────────╮
│ ESP8266 ESP-01 │
│ RXD VCC ╞
│ GPIO0 RST ╞
│ component GPIO2 CH_PD╞
│ side GND TXD ╞
│ │
╰────────────────────────────╯
ESP FTDI (auf 3.3V Betrieb stellen!)
===== ======
GND <-> GND
VCC <-> VCC (Externen leistungsfähigen 3.3V Regler nehmen!)
TX --> RXD
RX <-- TXD
GPIO0 <-- DTR (LOW = Firmware Upload, HIGH = Run)
GPIO2 <-- über 10K an VCC (3.3V), kann dann aber weiterverwendet werden als Ausgangsport. Oft mit eingebauter LED verbunden.
(GPIO15 <-- über 10K an GND, triggert SD karten -boot): nur falls vorhanden
CH_PD <-- über 10K an VCC (3.3V), synonyme: EN (enabling), CH_PD (Chip Power Down), CHIP_EN.
RST <-- RTS + über 10K an VCC
GPIO0 pull to GND for firmware flash
RST pullup to VCC

GPIO0: LOW = UART flash mode ┆ HIGH = Boot from SPI flash): nur zum programmieren gebrauchtGPIO2: Beeinflusst zusammen mit GPIO0 boot ┆ Oft mit eingebauter LED verbunden.GPIO15: HIGH = SD-card boot ┆ LOW = boot modus durch GPIO0/2 gesetztEN: LOW = ESP ausgeschaltet (low-power mode) ┆ HIGH = NormalbetriebRST: LOW = Reset ┆ An VCC verbinden, sonst könnte statische Spannung aus der Umgebung den ESP resetten. Im Arduino "Generic ESP8266" auswählen und PLAY drücken - es sollte das Ding programmieren.
Nutzt man ein Terminal-Programm muss ggf. die RTS-Leitung im Program auf einen anderen Pegel gesetzt werden, damit das Programm im ESP gestartet werden kann.
Selbst der Adafruit Huzzah hat Probleme mit dem SPIFFS Upload wenn ein FTDI verwendet wird, ausserdem benötigt es Tastendrücke zum programmieren.
Kaufe daher am besten eine NodeMCU mit einem nicht-FTDI-Chip, am besten CP2102 basiert.
Diese lässt sich unter Arduino direkt ohne probleme umprogrammieren.