ESPuino

Bereits mehrere Projekte Projekte haben wir mit dem ESP8266 realisiert. Sei es eine Uhr, die sich über das WLAN stellen lässt, einen Briefkasten, der benachrichtigt, wenn Post da ist oder andere. Die Möglichkeiten sind unendlich. Aber das Problem bisher war immer – wie bekomme ich den Chip vernünftig programmiert und mit Arduino-Shields zusammen?

Viele bieten Platinen an, auf denen ein ATmega und ein ESP verbaut ist. Der ESP wird dabei als Slave mit AT-Kommandos betrieben und der ATmega muss die ganze Arbeit übernehmen. Wirklich sinnvoll und kosteneffizient ist das nicht, zumal der ATmega deutlich weniger Speicher und MHz hat. Deswegen habe ich mir vorgenommen, eine Platine zu entwerfen, die den ESP als Hauptprozessor nutzt und dabei größtenteils kompatibel mit Shields ist. Dabei sollte sie ebenso universell, wie der Arduino UNO sein, dessen Chip man auswechseln und den fertig Programmierten dann auf einer anderen Platine verbauen kann.

Beim Pinlayout war es ein schweres Unterfangen, die Pins der ESPs vernünftig anzuordnen. Einige sind nonfunktional für den Alltag, Die SPI-Pins sind wie beim ATmega32u4 beispielsweise nicht auf 11-13, von einem Pin 16 hat man beim UNO nie etwas gehört. Auch hat der Prozessor nur einen analogen Eingang und der misst nur Werte bis 1V. Wo also anfangen?

Insgesamt waren 11 digitale und 1 analoger Pin zur Verfügung – beim UNO sind es 14 und 6. Ein ATtinyX4 hat ausreichend Pins, um die Fehlenden zu kompensieren. Per I2C angesprochen bildet er den Co/Slave-Prozessor und bietet neben den 5 fehlenden Analog- und 3 Digitaleingängen (A1-A5, D6-D8) auch 3 PWM-Pins (D8, A4, A5). Er kann auch komplett unabhängig vom ESP programmiert werden und sich somit um ganz andere Logiken kümmern. Angebunden ist die I2C-Schnittstelle am ESP über die Pins 0 (SDA) und 2 (SCL). Die I2C Pins sind frei wählbar, standard wäre 4 und 5. Aber warum habe ich 0/2 genommen?

Der ESPuino hat keinen ESP fest verbaut. Er soll aber noch vielseitiger sein, als es ein Arduino UNO ist. Es gibt eine Vielzahl von Ausführungen, ESP-01, -03, bis hin zu -201. Warum also nur auf einen beschränken? Der ESP-01 ist die kleinste Variante mit Pinheader und nutzbaren Pins. Hier sind nur 8 Pins vorhanden, davon 2 für Strom, 1 Reset und einen zum aktivieren. Bleiben also 2 Pins und die serielle Schnittstelle zur Nutzung. Sofern man keine Mini-Projekte, wie eine IR-Fernbedienung im WLAN oder einen einfachen Server vor hat, wäre es doch schön, mehr damit zu machen. Jetzt auch die Erklärung für meine Wahl der I2C-Pins: Pin 0 und 2 sind die einzigen Pins am -01, können auch I2C sprechen und bieten sich daher an, mit dem ATtiny zu kommunizieren. Besonders interessant, wenn man nur ein paar analoge Werte lesen will oder eh I2C-ICs einsetzen will.
Neben der „Mini“-Ausführung lässt sich auch der große Bruder -201 aufstecken. 26 Pins gucken einem hier entgegen, woher die 201 rührt, weiß ich nicht. Seine Pins sind komplett mit den Steckleisten an der Seite verbunden. Wenn man den ESPuino als Dauerinstallation nutzen möchte, wie etwa einen UNO SMD, so kann man alternativ die günstigeren Varianten -12 (PCB-Antenne, FCC) oder -07 (Keramik und Sockel) auflöten (etwa 60ct – macht bei den Preisen schon knapp 25% aus – günstiger). Sollte man allerdings den Prozessor verbraten muss man ihn mühsam entlöten. Es hat alles seine Vor- und Nachteile 😉

Zurück zu den Pins:
Rx (1) und Tx (3) sind wie beim UNO die ersten beiden Pins, ebenso I2C direkt nachfolgend, jedoch umgedreht, 2 und 0. 4 und 5 reihen sich dann der normalen Nummerierung nach wieder ein. 6, 7 und 8 übernimmt dann der ATtiny. Pin 16 (nur Ausgang) steht an Stelle der 9, 15 als Slave Select mit 12 MISO, 13 MOSI und 14 SCK bilden dann die Hardware SPI-Pins an der gleichen Position, wie beim UNO. Ansonsten folgt das Layout der Revision 3 Release: extra Pins für I2C und IORef sind vorhanden. Auf dem ISP-Header liegt in Version 1 noch der ISP vom ATtiny, der ist in Version 2 aber vorne zu SDA/SCL gewandert (vgl. ISP für den ATmega16u2 beim UNO), hinten liegt dann komplett Rev. 3 kompatibel SPI des ESP.

Aktuell übernehmen Low-Dropout-Regler die Spannungsversorgung, ein CH340 die USB-Serial Wandlung.

Schnellübersicht:

  • USB-B (V1) / Micro USB
  • Revision 3 kompatibel
  • Für ESP-01, -07, -12 und -201
  • Reset-Taster, Programmieren-Raster und DIP-Schalter für Autoreset/-program
  • ATtiny24 Co-Prozessor
  • 500mA Sicherung (rücksetzbar)
  • 3v3-Regler
  • CH340 USB-Serial
  • Pin-14 (SCK) LED (V2)

Funktionen

  • DIP-Schalter: beide auf ON aktivieren den Autoreset und Autoprogram, bedeutet, wenn die serielle Verbindung geöffnet wird, setzt sich der ESP zurück, der Pin 0 wird auf Masse gezogen und Reset wieder freigelassen. Eignet sich für schnelle Programmierung ohne serielle Konsole. Möchte man diese benutzen, beide wieder auf OFF.
  • Taster: Setzt den ESP zurück (Reset)
  • Druck-Schalter: legt Pin 0 auf Masse und trennt ihn von der Buchsenleiste und dem ATtiny. Nach Betätigen von Reset befindet sich der ESP im Programmiermodus. Nach dem aufspielen eines Programms wird dieses bis zum nächsten Reset ausgeführt.
  • ATtiny: lässt sich durch den ISP-Header programmieren, mit der Standardsoftware lässt er sich via I2C ansprechen.
    Pin am Tiny Funktion
    A0 (D0) 3,3V (V1) | ARef (V2)
    A1 (D1) A1
    A2 (D2) A2
    A3 (D3) A3
    A4 (D4) SCL (D2)
    A5 (D5) A4
    A6 (D6) SDA (D0)
    A7 (D7) A5
    PB0 (D10) D6
    PB1 (D9) D7
    PB2 (D8) D8
    PB3 RESET
  • I2C an 0 (SDA) und 2 (SCL) (im Normalfall 4 und 5, beim Aufruf von Tiny.begin() wird aber I2C an 0/2 aktiviert)
  • HSPI an 12 (MISO), 13 (MOSI), 14 (SCL/LED) und 15 (SS)
  • Pin 16 kann PULLDOWN aktivieren, die anderen PULLUP
  • Pins 6-11 führen zum Absturz [Flash-Pins] -> ATtiny benutzen
  • Alle Pins des ESP können PWM (Standard: 10bit), am ATtiny sind D8, A4 und A5 am Header (PB2, A5, [A6,] A7 am Tiny direkt)  PWM fähig.
  • Beim ESP-01 ist nur I2C (Pin 0/2) und Serial0 (1/3) verfügbar.
  • Für mehr Infos zum ESP, die Dokumentation lesen.
*Info: In diesem Beitrag verweisen orangefarbende Links auf Affiliates.