Ü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.
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.
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.
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.
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.
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 🙂
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:
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.
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.