at the topLABS PROJECT

 

By Clemens Valens (Elektor)

 

Vor einigen Jahren bat mich ein Kollege, ein tragbares Mikrocontroller-Board mit einem ESP8266-basierten WLAN-Modul zu entwickeln. Die Firmware des Projekts würde er übernehmen, da er große Pläne für ein solches Gerät hatte. Als der Prototyp fertig war, probierte er das Board aus und verließ dann die Firma. Hatte ihn mein Design so sehr enttäuscht oder entmutigt? Das habe ich nie herausgefunden.

Das Projekt wurde aufgegeben und wäre in Vergessenheit geraten, wenn ich nicht vor ein paar Monaten dringend ein ESP8266-Modul für meine Experimente zur Heimautomatisierung benötigt hätte. Beim Durchstöbern von Kisten mit Dingen, die „mal eines Tages nützlich sein“ könnten, fiel mir der Wearable-ESP8266-Prototyp in die Hände. Und da ich zu dieser Zeit besessen von ESPHome [1] war, wusste ich sofort, dass ich nun die Werkzeuge hatte, um endlich die Software für dieses Board zu entwickeln.

 

Eine NodeMCU-ähnliche Schaltung

Der Schaltplan des Boards (Bild 1) ist im Grunde ein NodeMCU-Entwicklungsboard, bei dem die USB-zu-Seriell-Brücke CP2101 von Silicon Laboratories (Silabs) durch den wesentlich günstigeren FT231XS von FTDI ersetzt wurde. Außerdem wurde ein Port für eine adressierbare WS2812-basierte LED-Kette (a.k.a. NeoPixels) hinzugefügt.

Bild 1. Schaltplan des Wearable-ESP8266-Boards.

 

Da das Wearable-Gadget quasi ein NodeMCU-Board ist, gilt alles im Folgenden gesagte auch für ein normales NodeMCU-Modul. Auch die vorgestellte Software funktioniert genauso gut.

Die verfügbaren GPIO-Ports und die Stromversorgung sind auf spezielle Pads mit großen Löchern herausgeführt, die kreisförmig am Rand der runden Platine angeordnet sind. Diese Pads sind für die Verwendung von leitfähigem Garn (conductive thread) vorgesehen, aber man kann natürlich auch dünnen Schaltdraht anlöten oder gar Krokodilklemmen verwenden.

Die Stromversorgung der Schaltung erfolgt entweder über den Micro-USB-Anschluss oder durch ein externes 5-V-Netzteil an einem der 5-V-Pins. Letzteres ist bei langen LED-Strings sinnvoll, die mehr Strom benötigen, als ein normaler USB-Anschluss liefern kann. Eine USB-Powerbank mit hoher Kapazität ist ebenfalls eine Option. Beachten Sie, dass a) die LED-Schnittstelle für 5-V-Strings ausgelegt ist und b) der 5-V-Eingang keinen Verpolungsschutz bereitstellt.

 

Software-Entwicklung mit ESPHome

Für meine Experimente habe ich eine ringförmige Kette von zwölf WS2812-LEDs an den Port K2 angeschlossen, siehe Bild 2. Natürlich können Sie die Software für dieses Board von Grund auf neu schreiben, wie es mein ehemaliger Kollege vorhatte und wahrscheinlich auch tun musste, da damals nicht so viel ESP8266-Code im Netz verfügbar war wie heutzutage. Die Übernahme eines Open-Source-Projekts wie ESPHome erspart Ihnen aber eine Menge Arbeit.
 

Bild 2. Der Prototyp des Wearable-WLAN-Gadgets mit einem adressierbaren 12-Pixel-RGB-LED-Ring.

 

Ich habe es schon einmal gesagt, und ich will es gerne noch einmal wiederholen: Mit ESPHome können Sie eine vernetzte Anwendung für den ESP8266 oder ESP32 erstellen, die Over-the-Air-Programmierung (OTA), Fallback-Hotspot, Webserver-Benutzeroberfläche und Schnittstellen für über 200 Geräte bietet, und das in kürzester Zeit. Wirklich. Siehe [1] für weitere Details.

ESPHome verwendet einen modularen Ansatz, bei dem vorgefertigte Codeblöcke zu einer Anwendung kombiniert werden. Die von der Anwendung benötigten Blöcke werden in einer Konfigurationsdatei, der sogenannten YAML-Datei, aufgelistet (YAML kommt von „Yet another markup language“ und ist keine Programmiersprache, sondern ein Satz von Formatierungsregeln für Textdateien zur Angabe von Parametern und Werten [1]). Jeder Baustein wird individuell konfiguriert, um zum Beispiel den oder die zu verwendenden GPIO-Pin(s), deren Typ oder ihr Kommunikationsprotokoll festzulegen.

Die Konfigurationsdatei wird von ESPHome gelesen und in C++-Code umgewandelt, der dann wiederum in eine ausführbare Datei kompiliert und in den Flash-Speicher des Moduls programmiert werden kann. Wenn Sie einmal verstanden haben, wie man eine Konfigurationsdatei zusammenstellt, sind Sie im Geschäft. Bitte lesen Sie [1] für weitere Details.

 

Die Konfigurationsdatei genau betrachtet

Die YAML-Konfigurationsdatei (Listing 1) beginnt mit dem obligatorischen Abschnitt esphome:, in dem der Projektname, die verwendete MCU (ESP8266) und der Boardtyp (NodeMCU) angegeben werden.
 

Listing 1. Die YAML-Konfigurationsdatei [2].

[Beware of indentation, every space counts]

 

# Elektor 160112 Wearable ESP8266
# Configuration file for ESPHome

 

esphome:
  name: wearable
  platform: ESP8266
  board: nodemcu

 

wifi:
  ssid: "my_ssid"
  password: "my_passphrase"

  ap:
    ssid: "Wearable Fallback Hotspot"
    password: "12345678"

 

captive_portal:

 

# Enable logging
logger:

 

# Enable Home Assistant API
api:

 

# Enable Over-the-Air updates.
ota:

 

output:
  - platform: gpio
    id: "blue_led"
    pin:
      number: GPIO16
      inverted: True

 

light:
  - platform: binary
    name: "Blue LED"
    output: "blue_led"
  - platform: neopixelbus
    name: "Light Ring"
    num_leds: 12
    type: GRB
    pin: GPIO2
    method: ESP8266_UART1
    effects:
      - addressable_color_wipe:
          name: "Color Wipe"
      - addressable_fireworks:
          name: "Fireworks"
      - flicker:
          name: "Flicker All"
      - addressable_flicker: # Doesn't work?
          name: "Flicker Individually"
      - addressable_rainbow:
          name: "Rainbow"
      - random:
          name: "Random All"
      - addressable_scan:
          name: "Scan"
      - strobe:
          name: "Strobe All"
      - addressable_twinkle:
          name: "Twinkle"
      - addressable_random_twinkle:
          name: "Twinkle Random"

 

# GPIO11 is somehow related to flash and should not be used.
switch:
  - platform: gpio
    name: "GPIO4"
    pin: GPIO4
  - platform: gpio
    name: "GPIO5"
    pin: GPIO5
  - platform: gpio
    name: "GPIO12"
    pin: GPIO12
  - platform: gpio
    name: "GPIO14"
    pin: GPIO14
  - platform: gpio
    name: "GPIO15"
    pin: GPIO15

 

# Pushbutton on GPIO0.
binary_sensor:
  - platform: gpio
    name: "Flash"
    pin:
      number: GPIO0
      inverted: True

 

sensor:
  - platform: adc
    name: "Analog Input"
    pin: A0
    update_interval: 60s
    filters:
      - multiply: 3.2 # voltage divider is 100k/(220k+100k)



Als nächstes folgt der WLAN-Abschnitt wifi:, um das Netzwerk, mit dem eine Verbindung hergestellt werden soll, zu definieren und um Rettungsoptionen im Falle von Netzwerkproblemen anzugeben. Die Reihenfolge der Sektionen spielt keine Rolle.

Durch die Angabe der Option logger: wird die Statusausgabe auf der seriellen Schnittstelle aktiviert. Die Option api: ermöglicht die einfache Integration mit der freien und quelloffenen Heimautomatisierungs-Controller-Software Home Assistant (siehe [1]). Und ota: ist für die Over-the-Air-Programmierung (durch zum Beispiel den Home Assistant) zuständig. OTA ist sehr praktisch, da dadurch keine physische Verbindung zum Gerät erforderlich ist.

Dann wird es ernst! Es beginnt mit der Spezifikation, dass GPIO16 ein Ausgang sein muss. Dies ist erforderlich, will man die daran angeschlossene LED als light: verwenden. Das ist interessant, denn lights haben ganz andere Möglichkeiten als beispielsweise Schalter (Bild 3).

Bild 3. Diese Karten im Home Assistant ermöglichen die Steuerung des LED-Rings und der blauen LED des Wearable-WLAN-Gadgets.

 

Lights

Als Lights habe ich die blaue LED an GPIO16 und den LED-String definiert. Letzterer wird von der platform: neopixelbus verwaltet, die ein paar Optionen hat, die angegeben werden müssen, etwa die Länge des Strings und der Port, an den er angeschlossen wird. In diesem Fall ist der Port GPIO2, was die Verwendung der ESP8266_UART1-Methode ermöglicht. Eigentlich müssen Sie bei dieser Methode den GPIO2 gar nicht angeben, da es impliziert ist.

Lights können Effekte haben, und ESPHome hat ein paar eingebaut, die Sie verwenden können (wenn Ihr light: unterstützt wird, natürlich). Selbstverständlich können Sie auch Ihre eigenen Lichteffekte programmieren. Ich habe die meisten der eingebauten Effekte für den LED-Ring genutzt. Auch die Effekte können Parameter haben, aber wenn Sie keine explizit angeben, werden Standardwerte verwendet. Im Home Assistant können Sie wählen, welcher Effekt aktiv ist (Bild 4). Ich mag besonders den Effekt random twinkle.

Bild 4. Die in der YAML-Konfigurationsdatei von ESPHome deklarierten Lichteffekte werden im Home Assistant als Dropdown-Liste angezeigt, aus der Sie den gewünschten Effekt auswählen können.

 

Mehr Ein- und Ausgänge

Die unbenutzten GPIO-Ports sind als Schalter deklariert, so dass Sie sie im Home Assistant ein- und ausschalten können. In der Hausautomatisierung ist ein Schalter ein Gerät, das vom System gesteuert wird (zum Beispiel ein Relais). Ein Schalter, der durch den Benutzer (oder Bewohner) betätigt wird, ist ein binärer Sensor. An GPIO0 ist ein „richtiger“ Taster angeschlossen, daher ist er als binärer Sensor spezifiziert.

Schließlich besitzt das Board einen analogen Eingang an Pin A0 mit einem Spannungsteiler davor (R15 und R16), der für eine Abschwächung von 3,2 sorgt. Wenn die maximale Eingangsspannung von 3,3 V an AIN anliegt, bleibt davon am Analogeingang des ESP12 etwa 1 V übrig.

 

Abstandsalarm

ESPHome verfügt über Automatisierungsfunktionen. Sie könnten der Platine zum Beispiel einen Näherungssensor hinzufügen, um die Farbe des LED-Rings zu ändern, je nachdem, was der Sensor so sieht. Auf diese Weise könnte das Board zum Beispiel als „Social-Distancing-Alarm“ fungieren (wenn so etwas noch nötig sein sollte, wenn Sie dieses Heft im Sommer in den Händen halten). Es kann aber auch einfach ein dekorativer elektronischer Anstecker oder eine Brosche sein; lassen Sie Ihrer Fantasie freien Lauf!

Eine interessante Möglichkeit bietet hier die Nutzung des Home Assistant. Mit ein paar dieser tragbaren ESP8266-Boards, die in den Home Assistant integriert sind, lassen sich ausgefallene Lichteffekte erzeugen. Auch wenn der Home Assistant für eine Heimautomatisierung optimiert ist, kann er auch ganz andere Dinge tun, beispielsweise ein Spiel auf der Geburtstagsparty Ihres Kleinkindes steuern. Hängen Sie jedem Kind ein Board um und nutzen Sie den Home Assistant, um Teams zu bilden und zu steuern oder zu entscheiden, welcher Kandidat eine Frage beantworten darf oder wer beim Fangen spielen dran ist. Ich bin sicher, dass Sie mit ein bisschen Kreativität viele lustige Anwendungen finden können.
Alle Dateien zu diesem Projekt können unter [2] heruntergeladen werden.
 

(210146)


Weblinks


[1] C. Valens, „Hausautomation leicht gemacht“, Elektor Sep/Okt 2020: https://www.elektormagazine.de/magazine/elektor-154/58936
[2] Wearable Wi-Fi Gadget bei Elektor Labs: https://www.elektormagazine.com/labs/4382

 

Ein Beitrag von

Idea, Design, Text and Photographs: Clemens Valens

Schematic: Patrick Wielders

Editor: Jens Nickel and C. J. Abate

Layout: Giel Dols

 

Haben Sie Fragen oder Kommentare?

Haben Sie technische Fragen oder Kommentare zu diesem Artikel? Schicken Sie eine E-Mail an den Autor unter clemens.valens@elektor.com oder kontaktieren Sie Elektor unter editor@elektor.com.

 

Stückliste

 

Widerstände:

All 5%, 50 V, 0.1 W, 0603

R20 = 0 Ω

R1,R2 = 27 Ω

R11,R13,R21,R22 = 470 Ω

R3,R4,R5,R6 = 1 kΩ

R7,R8,R9,R10,R17,R18,R19 = 10 kΩ

R16 = 100 kΩ

R15 = 220 kΩ

Kondensatoren:

C1,C2 = 47 pF, 0603

C3,C4 = 100 nF, 0603

C6 = 1 µF, 0603

C5,C7,C9 = 10 µF, 16 V, Case-A

Halbleiter:

D1 = MBRS540

IC4 = 74LVC1T45GW

IC1 = FT231XS

IC2 = LD1117AS33

LED1 = LED, blau, 0603

LED2 = LED, gelb, 0603

LED3 = LED, rot, 0603

T1,T2 = BC847C

Außerdem:

K1 = Micro-USB-Buchse Typ B, gewinkelt, Platinenmontage

K2 = 1x3-polige Stiftleiste, 0,1"-Raster

S1,S2 = SMD-Taster, 5,1 mm x 5,1 mm

MOD1 = ESP-12F

Platine 160112-1