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
[codesyntax lang=”text”]
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
[/codesyntax]
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.
[codesyntax lang=”text”]
Flash Chip ID 1327328 Flash Chip Size (wrong)524288 Flash Chip Real Size 1048576
[/codesyntax]
[codesyntax lang=”c”]
#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)); }
[/codesyntax]
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