ESP-12, ESP8266-12 / 12E programmieren und mit der Arduino IDE nutzen

Über den ESP8266 Mikrocontroller hatte ich schon hier berichtet. Mittlerweile gibt es weitere Boards und Varianten auf dem Markt. Besonders interessant ist die Variante ESP8266-12 oder 12E oder auch ESP-12 genannt. Die Boards sind für unter 3€ auf ebay zu bekommen, wenn man direkt aus China bestellt.
1_esp8266_12
Der Vorteil der ESP-12 Variante ist, dass alle Pins herausgeführt werden. Man hat dann bis zu 11 GPIOs und den ADC Pin zur Verfügung. Zu diesem Board gibt es auch schon einige Tipps im Netz. In diesem Beitrag hier möchte ich zeigen, wie man ein Breakout Board für den ESP-12 selbst bauen kann, einen Programmieradapter anfertigt, die Arduino IDE nutzt und die Flashgröße ausliest.

Das Foto des ESP-12 sieht allerdings schöner aus als die Realität. Der Pinabstand der ESP-12 Platine beträgt nämlich nur 2mm. Der normale Rasterabstand ist jedoch 2.54mm. Man kann sogenannte ESP Breakout Boards kaufen oder sich ein solches Breakout Board aus Lochplatine selbst bauen, um den Pinabstand auf das Normalmaß umzusetzen. Die kommerziellen Breakout Boards adaptieren auf eine Breite von 10 „Normpunkten“. Meine Variante kommt mit 9 Punkten aus. Man kann natürlich auch einfach ein Reihe Lötpunkte mehr nehmen.

Zunächst muss die Rückseite es ESP-12 mit etwas Isolierband abgedeckt werden. Diese Seite des Boards wird mit der Seite mit den Lötpunkten unseres Breakout Boards in Kontakt kommen.
2_esp12_backiso
Danach baut man mit Pinleisten die Basisplatine auf. Die hinteren 6 Pins sollte man 90 Grad abwinkeln (oder weglassen), wenn man das Board auf einem Breadboard verwenden will.
3_esp12_breakout
Danach verbindet man die Pins der Pinleisten mit den Anschlüssen des ESP-12. Man kann dazu verzinnten Draht nehmen oder auch die abgeschnittete Drähte von Widerständen etc.
5_esp12_breakout
Fertig ist das Breakout Board – jetzt passt es auf ein Breadboard oder in andere Schaltungen mit Normpinabstand. Die Pinbelegung entspricht dem Aufdruck auf der Rückseite (siehe oben).

Zwei Punkte sind bei dem Board zu beachten:
1. Wenn man den ESP-12 verwenden will, muss man GPIO15 beim Start auf GND legen. GPIO15 auf Vcc (bzw offen) konfiguriert eine andere Bootoption, die normalerweise nicht benutzt wird. Wer mag und den GPIO15 nicht braucht kann den Pin direkt auf dem Breakout Board auf GND legen. Die Pins liegen nebeneinander.
2. Die Anschlussbelegung der hinteren Reihe des ESP-12 variiert je nach gelieferter Variante. Dort solltet Ihr also besser zweimal hinschauen, wenn Ihr Schaltungsvorschläge im Netz findet.

Nun muss das Board noch programmiert werden. Eine Anleitung und ein Programmierboard für den ESP8266-01 hatte ich hier beschrieben. Ich habe mit eine Adapterplatine gebaut, die es mir erlaubt, den ESP-12 in diesem Programmierboard zu betreiben. Das fertige Ergebnis ist ein nettes kleines Türmchen. Damit kann der ESP-12 wie der normale ESP8266-01 mit der Arduino IDE genutzt werden.
6_esp12_fulltower
Ich habe auf dem Adapter eine Reihe doppelt ausgeführt, so dass sowohl die 9er als auch die 10er Breite passen. Die Pins sind bei dem Adapterboard einfach 1:1 durchverbunden. Der Adapter legt allerdings GPIO15 auf GND, da dies bei dem ESP8266-01 schon auf dem Board selbst auf GND gelegt ist. So sieht mein Adapter aus – ich habe es nicht auf Schönheit angelegt. Aufgrund von Materialknappheit habe ich nicht für alle Pins einen Sockel montiert 🙂
7_esp12_proadapt
Hier der Schaltplan des Adapters, der auch nochmal das Pinout des ESP-12 zeigt. Dazu ist ein ESP8266-01 im Vergleich dargestellt. Das Pinout des adaptierten ESP-12 passt in dieser Orientierung zum ESP8266-01:
ESP-12_Progadapter
Auf dem Board ist die Lage der Antenne auf einem ESP-12 markiert, um eine Verpolung zu verhindern. Auf dem Foto ist auf Vorder- und Rückseite ein identischer Pin markiert. Da man den Adapter auch falsch herum auf die Programmierplatine setzen kann, habe ich hier nochmal die Ausrichtung im Vergleich zum normalen ESP8266-01 fotografiert.
8_esp12_orient
Damit die Steckerei in der Praxis nicht schief geht, habe ich mir die Lage der Antenne des ESP-12 auf der Adapterplatine markiert. Weiterhin habe ich auf dem Adapter als auch auf der Programmierplatine einen Punkt markiert, so dass sich die richtige Lage leicht erkennen kann.

Last but not least hier ein kurzes Codebeispiel, wie man bei dem ESP die Größe des Flash Speichers ausliest:

// we need to include these to be able to use the spi_flash_get_id() function
extern "C" {
#include "c_types.h"
#include "ets_sys.h"
#include "os_type.h"
#include "osapi.h"
#include "spi_flash.h"
}

size_t fs_size()
{
// returns the flash chip's size, in BYTES
uint32_t id = spi_flash_get_id();
uint8_t mfgr_id = id & 0xff;
uint8_t type_id = (id >> 8) & 0xff; // not relevant for size calculation
uint8_t size_id = (id >> 16) & 0xff; // lucky for us, WinBond ID's their chips as a form that lets us calculate the size
return 1 << size_id; } void setup() { Serial.begin(9600); Serial.print("Flash Size = "); Serial.println(fs_size()); } void loop() { }

Der ESP-12 kommt mit 4MB Flash Speicher (der -01 mit 512kB). Stellt man die Flashgröße in den Arduino IDE Boardoptionen auf 512kB ein, läuft offenbar jeder ESP problemlos. Die Größe des Flash Speichers kann man aber passend erhöhen, wenn mehr zur Verfügung steht.

2 Gedanken zu „ESP-12, ESP8266-12 / 12E programmieren und mit der Arduino IDE nutzen

  1. Andreas

    Hi,

    ich bin schon ein wenig am verzweifeln. Seit gut 3 Wochen versuche ich den ESP8266-1 stabil zu bekommen. Ich habe bereits alle Ideen aus dem Netz ausprobiert und heute läuft der ESP8266-1 relativ gut. Jedoch kommt es immer wieder zu Ausfällen am Router (Fritz). Den Code zu übertragen ist eine Qual. Mal geht es, mal nicht. Die bekannten Sync Probleme Fehlermeldungen.

    Problem 1: Warum fällt das W-LAN immer wieder aus.?

    ESP12-F (nicht E) Der F hat eine USB Schnittstelle. Läuft super. Das Übertragen des Codes über die Arduino IDE ist problemlos. Aber nach der Übertragung verbindet sich der ESP12F nur einmal und dann nicht wieder.

    Wie ist denn die Verkabelung im Live Betrieb. Ich finde überall Beispiele, wie man den ESP zum Flashen benutzt, leider nirgendwo gibt es ein Beispiel, welche PINs im Livebetrieb ohne PC belegt sein müssen. Es gibt nirgendwo eine Anleitung für dieses Modul. Ich bin echt frustriert. Ich würde gerne mein Wissen teilen, aber momentan habe ich echt Frust. Ich bin schon am überlegen, auf den Raspberry Zero W zu warten. Dann hätte das ESP Modul ausgedient.

    Aber mein Anspruch ist, ich will wissen wie es geht.

    Antworten
    1. ST Artikelautor

      Hallo Andreas,

      die ESPs haben keine HW USB Schnittstelle. Dazu braucht man einen USB2Serial Chip. Kann es sein, dass Du ein Board mit einem solchen Chip hast und das hat zufällig einen 12-F drauf? (z.B. NodeMCU?)
      Zu dem Board kann ich nichts genaues sagen. Habe ich nie verwendet.
      Oft und in vielen Schaltungen habe ich die 01 und 12 Variante des ESP benutzt. Wenn Du diese jenseits des Programmierers verwenden willst, dann brauchst Du eine Mindestbeschaltung der Pins. Letztlich ist diese Schaltung die selbe, die auch im Programmierer verwendet wird. Hier ist ein Beispiel
      https://blog.thesen.eu/funk-wlan-markisensteuerung-mit-esp8266-und-arduino/

      RX/TX kannst Du offen lassen, wenn Du sie nicht brauchst. Ggf auch das hier beachten:
      https://blog.thesen.eu/esp8266-reset-probleme-loesen-und-relais-stabil-schalten/

      Gruss Stefan

      P.S.: Ich habe mit den ESPs Uptimes von über 100 Tagen ohne Boot und Probleme erreicht. Längere Laufzeiten haben sich nie ergeben, weil ich aus irgendeinem Grund immer an eine Sicherung musste.

      Antworten

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.