ESP8266 / ESP-07 programmieren
Der ESP8266-07 bietet keinen USB-Anschluss für die Programmierung.
Ein kleiner Adapter erleichtert die Verbindung zum FTDI Programmer.
Ein paar Hinweise:
- Ein einigen Tutorials werden die PINs einfach mit Masse bzw. Vcc verbunden.
Grundsätzlich sollte dies aber immer mit einem Pull-Up bzw. Pull-Down Widerstand erfolgen - Das weiße Adapter-Board auf dem Bild unten, besitzt bereits zwei Widerstände für CH_PD und CPIO15.
Demnach braucht man nur noch zwei Widerstände (10k) als Pull-Up für GPIO0 sowie REST
Für die Programmierung verwende ich Eclipse mit dem Plugin von baeyens.
Die Parameter für den ESP-07 sind etwas umfangreicher als bei einem ESP-12 oder arduino.
Wichtig ist der Parameter FlashSize. Mit der Einstellung “512k (128k SPIFFS)” kann man zwar ein einfaches Blink-Programm hochladen. Wenn man dann aber OTA verwendet, wird die Firmware des ESP-07 korrupt.
Dann hilft nur noch der ESP8266Flasher, welcher wieder eine Original-Firmware ausspielt.
Für die Programmierung sind folgende Schritte notwendig:
- Jumper GPIO0 kurschließen (bzw. GPIO0 auf Masse ziehen)
- FTDI Programmer per USB mit PC verbinden
- Ggfs. kurz RESET des Moduls
- In eclipse: Upload Sketch (Ausgabe s.u.)
- Jumper GPIO0 entfernen
- RESET
Starting reset using DTR toggle process
Toggling DTR
Continuing to use COM4
Ending reset
Launching C:\arduino2016\sloeber\arduinoPlugin\packages\esp8266\tools\esptool\0.4.9/esptool.exe -cd ck -cb 115200 -cp COM4 -ca 0x00000 -cf E:\Daten\Arduino\workspaceSloeber\ESP-07_OTA/Release/ESP-07_OTA.bin
Output:
Uploading 259360 bytes from E:\Daten\Arduino\workspaceSloeber\ESP-07_OTA/Release/ESP-07_OTA.bin to flash at 0x00000000
................................................................................ [ 31% ]
................................................................................ [ 62% ]
................................................................................ [ 94% ]
.............. [ 100% ]
0.4.9/esptool.exe finished
upload done
Die Größe des Flash-Speichers lässt sich einfach ermitteln. Es gibt zwei Funktionen, aber nur “getFlashChipRealSize” ist relevant. Unten kann man sehen, das zwei verschiedene Werte ausgegeben werden. Die Ausgabe erfolgt übrigens in Byte, z.B. 524288 für 512k.
Flash Chip ID 1327328
Flash Chip Size (wrong)524288
Flash Chip Real Size 1048576
#include "Arduino.h"
#define DEBUGGING(...) Serial.println( __VA_ARGS__ )
#define DEBUGGING_L(...) Serial.print( __VA_ARGS__ )
#define LED_PIN 2 // PIN2 = GPIO2
int iFlashChipId,iFlashChipSize,iFlashChipRealSize;
void setup() {
// initialize digital pin xxx as an output.
pinMode(LED_PIN, OUTPUT);
Serial.begin(115200);
DEBUGGING("ESP8266-07 blink");
iFlashChipId = ESP.getFlashChipId();
iFlashChipSize = ESP.getFlashChipSize();
iFlashChipRealSize = ESP.getFlashChipRealSize();
DEBUGGING_L("Flash Chip ID ");
DEBUGGING(String(iFlashChipId,HEX));
DEBUGGING_L("Flash Chip Size (wrong)");
DEBUGGING(String(iFlashChipSize,HEX));
DEBUGGING_L("Flash Chip Real Size ");
DEBUGGING(String(iFlashChipSize,HEX));
}
Bei mir gab es noch ein weiteres Problem mit der platform.txt. Folgende Änderung muss vorgenommen werden:
Ersetze -DARDUINO_BOARD=”{build.board}” mit -DARDUINO_BOARD=\”{build.board}\”
Dann erscheint beim Aufruf des Compilers -DARDUINO_BOARD=\”ESP8266_ESP01\”.
Wenn dort -DARDUINO_BOARD=ESP8266_ESP01 steht, bekommt man Fehlermeldungen.
Du schreibst, dass OTA mit der Einstellung 512k zu einer korrupten Firmware führt. Was passiert wenn ich die Einstellung auf die “Flash Chip Real Size” von 1M stelle, geht es dann?
Hallo Lukas,
bei mir funktionieren die Module seitdem problemlos.
Gruß,
Thomas