VBus-Decoder/Adapter für den ESP8266

Aus Hobbyelektronik.org
Aufgebauter Leiterkarte (v0.1)

Dies ist ein Unterartikel von VBus-Decoder. Auf der Hauptseite gibt es weitere Informationen zum Thema.

Motivation

Wenn Basteln und IoT aufeinandertreffen, kommt man fast nicht an den Mikrocontrollern von Espressif vorbei.

Genau aus diesem Grund hatte ich schon länger die Idee, ein Leiterkärtchen mit dem ESP8266 zu machen. Also warum nicht einfach den beliebten VBus ohne großes Strippenziehen ins Netzwerk bringen?

Schaltung

Die Schaltung für den VBus basiert auf der für den Raspi (v1.3), aufseiten des ESP habe ich mich von den verschiedenen Bastelboards inspirieren lassen und die Möglichkeit vorgesehen, sowohl die kleinen ESP01- als auch die etwas vielseitigeren ESP12-Module einzusetzen.

Die Versorgung findet über eine Stiftleiste (bzw. angelötete Drähte) oder über eine Micro-USB-Buchse statt. Diese dient nur der Stromversorgung - mehr zum Programmieren des ESP weiter unten.

Bei der Verwendung des ESP12-Moduls stehen zusätzlich zum VBus-Interface noch die GPIOs 12, 13, 14 und 16 sowie der ADC-Eingang und die 3,3V-Versorgung zur Verfügung. Hier kann weitere Peripherie wie Sensoren oder Displays angeschlossen werden.

Für den Aufbau gibt es mehrere Varianten, die unten aufgeführt sind. Diese können über die Tabs ausgewählt und müssen beim Besorgen der Bauteile und selbstverständlich beim Zusammenbau kombiniert werden.

Die theoretische Maximalbestückung sieht wie folgt aus:

BOM

Möglichkeiten schaffen Komplexität. Wie bei den anderen Plattformen lässt sich der Adapter in verschiedenen Varianten aufbauen, wobei ich (auch wenn es gerade bei dieser anbietet) noch immer empfehle, die Optoisolierte aufzubauen.

Decoder

Neben Optoisoliert und Direkt gibt es noch die Variante ohne ESP - dank der Stiftleiste rechts oben auf der Leiterkarte lässt sich der VBus-Anteil komplett unabhängig vom ESP-Anteil verwenden. Mit Säge und Fingerspitzengefühl lässt sich die Größe auch noch ein gutes Stück reduzieren.

Als ESP8266-Modul kann das ESP01 und ESP12(-F) verwendet werden. Getestet wurde bis jetzt nur das ESP12-F, wobei nichts gegen das 01 sprechen dürfte.

Empfohlene Bestückungsvariante.

Menge Referenzen Wert Package Reichelt Bestellcode
1 J1 JUMP JUMPER 2,54 SW
1 SV4 MA05-2 MPE 087-2-010
1 SV3 MA07-1R MPE 087-1-007
1 JMP1 0R-JUMPA A0R-JMP RND 0805 1 0
1 C11 100n C0603 X7R-G0603 100N
3 C2, C8, C14 100n C0805 X7R-G0805 100N
1 C6 100p C0805 NPO-G0805 100P
1 C5 100u/16V PANASONIC_D VF 100/16 K-D
4 R18, R19, R22, R24 10k R0805 RND 0805 1 10K
1 R1 12k R0805 RND 1550805 DP
3 R2, R6, R8 15k R0805 RND 0805 1 15K
1 X1 1751248 1751248 AKL 059-02
5 R9, R20, R21, R25, R28 1k R0805 RND 0805 1 1,0K
1 C4 1n C0805 NPO-G0805 1,0N
2 R4, R7 2k2 R0805 RND 0805 1 2,2K
1 R12 330 R0805 RND 0805 1 330
1 C10 47u/16V PANASONIC_D FK-V 47U 16
2 R3, R5 4k7 R0805 RND 0805 1 4,7K
1 C3 4u7 C0805 KEM X5R0805 4,7U
1 OK1 6N136 DIL08 6N 136
1 S1 9305 PHAP3301 TASTER 9305
3 D1, D2, D5 BAV99 SOT23 BAV 99 NXP
2 T1, T2 BC848 SOT23 BC 848B SMD
1 U2 ESP01 ESP01 DEBO ESP8266
1 U1 ESP12 ESP12-SMD DEBO ESP8266-12F
1 IC4 LM393D SO08 LM 393 D SMD
1 D3 P6SMB 15A SMBJ P6SMB 15A SMD
1 IC1 TS5205CX533 SOT23-5 TS 5205 CX533
1 LED1 or CHIP-LED0805 LED EL 0603 OR
Menge Referenzen Wert Package Reichelt Bestellcode
1 J1 JUMP JUMPER 2,54 SW
1 SV4 MA05-2 MPE 087-2-010
1 SV3 MA07-1R MPE 087-1-007
3 R10, R11, R15 0 R1206 RND 0805 1 0
1 JMP1 0R-JUMPA A0R-JMP RND 0805 1 0
1 C11 100n C0603 X7R-G0603 100N
3 C2, C8, C14 100n C0805 X7R-G0805 100N
1 C6 100p C0805 NPO-G0805 100P
1 C5 100u/16V PANASONIC_D VF 100/16 K-D
4 R18, R19, R22, R24 10k R0805 RND 0805 1 10K
5 R2, R6, R8, R13, R14 15k R0805 RND 0805 1 15K
1 X1 1751248 1751248 AKL 059-02
4 R20, R21, R25, R28 1k R0805 RND 0805 1 1,0K
1 C4 1n C0805 NPO-G0805 1,0N
2 R4, R7 2k2 R0805 RND 0805 1 2,2K
1 R12 330 R0805 RND 0805 1 330
1 C10 47u/16V PANASONIC_D FK-V 47U 16
2 R3, R5 4k7 R0805 RND 0805 1 4,7K
1 C3 4u7 C0805 KEM X5R0805 4,7U
1 S1 9305 PHAP3301 TASTER 9305
3 D1, D2, D5 BAV99 SOT23 BAV 99 NXP
2 T1, T2 BC848 SOT23 BC 848B SMD
2 Q2, Q3 BSS138 SOT23 BSS 138 SMD
1 U2 ESP01 ESP01 DEBO ESP8266
1 U1 ESP12 ESP12-SMD DEBO ESP8266-12F
1 IC4 LM393D SO08 LM 393 D SMD
1 D3 P6SMB 15A SMBJ P6SMB 15A SMD
1 IC1 TS5205CX533 SOT23-5 TS 5205 CX533
1 LED1 or CHIP-LED0805 LED EL 0603 OR

Wer keinen ESP8266 verwenden aber die Vorzüge der verbesserten Schaltung haben möchte, kann den ESP-Anteil vollständig weglassen.

Hierfür wird auf dieser Leiterkarte keine Stromversorgung benötigt, da diese vom jeweilig verwendeten Interface (z. B. SBC, USB-UART-Wandler, ...) bezogen werden kann.

Menge Referenzen Wert Package Reichelt Bestellcode
1 J1 JUMP JUMPER 2,54 SW
1 SV4 MA05-2 MPE 087-2-010
1 JMP1 0R-JUMPA A0R-JMP RND 0805 1 0
2 C2, C8 100n C0805 X7R-G0805 100N
1 C6 100p C0805 NPO-G0805 100P
1 C5 100u/16V PANASONIC_D VF 100/16 K-D
1 R1 12k R0805 RND 1550805 DP
3 R2, R6, R8 15k R0805 RND 0805 1 15K
1 X1 1751248 1751248 AKL 059-02
1 R9 1k R0805 RND 0805 1 1,0K
1 C4 1n C0805 NPO-G0805 1,0N
2 R4, R7 2k2 R0805 RND 0805 1 2,2K
1 R12 330 R0805 RND 0805 1 330
2 R3, R5 4k7 R0805 RND 0805 1 4,7K
1 C3 4u7 C0805 KEM X5R0805 4,7U
1 OK1 6N136 DIL08 6N 136
3 D1, D2, D5 BAV99 SOT23 BAV 99 NXP
1 IC4 LM393D SO08 LM 393 D SMD
1 D3 P6SMB 15A SMBJ P6SMB 15A SMD
1 IC1 TS5205CX533 SOT23-5 TS 5205 CX533

Stromversorgung

Für die Stromversorgung gibt es ebenfalls zwei Möglichkeiten: Entweder mit LDO oder Schaltwandler. Wer auf Nummer sicher gehen will, nimmt die billigere LDO-Variante, da ich noch keine Gelegenheit hatte letztere zu testen. Die etwas höhere Stromaufnahme dürfte wahrscheinlich nicht allzu sehr ins Gewicht fallen.

Empfohlene Bestückungsvariante.

Menge Referenzen Wert Package Reichelt Bestellcode
1 J1 JUMP JUMPER 2,54 SW
1 C15 100n C0805 X7R-G0805 100N
1 C13 47u/16V PANASONIC_D FK-V 47U 16
1 SV2 MA02-1R MA02-1R MPE 087-1-002
1 X2 MIUSB-F5M-BB-UHS MIUSB-F5M-BB-U_HANDSOLDER MIC USB BBU
1 IC3 REG1117 SOT223 NCP 1117 ST33T3G
Menge Referenzen Wert Package Reichelt Bestellcode
1 C9 100n C0603 X7R-G0603 100N
1 C15 100n C0805 X7R-G0805 100N
1 C12 10p C0603 NPO-G0603 10P
1 R17 15k R0603 RND 0603 1 15K
1 L1 15u 242408FPS L-242408FPS 15µ
1 R16 47k R0603 RND 0603 1 47K
1 C13 47u/16V PANASONIC_D FK-V 47U 16
1 D6 BAT43WS SOD323-W BAT 43WS
1 SV2 MA02-1R MA02-1R MPE 087-1-002
1 IC2 MCP16301 SOT23-6 MCP 16301T-I/CHY
1 X2 MIUSB-F5M-BB-UHS MIUSB-F5M-BB-U_HANDSOLDER MIC USB BBU
1 D4 SS13L SUBSMA SS 13L

Inbetriebnahme/Benutzung

Flashing

Wird ein ESP8266 verwendet, muss natürlich erst einmal die Software auf den Mikrocontroller.

Das Problem: Der Softwaredownload findet über den selben UART statt, der auch für das VBus-Interface statt. Nun könnte man mit Multiplexern arbeiten, was im Idealfall nur einmal benutzt werden würde und somit mit Kanonen auf Spatzen geschossen wäre. Aus dem gleichen Grund gibt es keinen USB-UART-Konverter auf dem Board: Braucht nur Platz und kostet.

Deshalb wird für das erstmalige Flashen ein USB-UART-Adapter, der RTS/DTR anbietet, benötigt. Dieser sollte idealerweise mit 3,3 V arbeite, wobei der ESP wohl auch 5 V toleriert. Die beiden Transistoren für Reset und Bootloader nach WittyCloud/NodeMCU sind bereits vorhanden.

Die 5 V-Stromversorgung muss entweder über den USB-Port oder der Stiftleiste SV2 kommen, die Anschlussbelegung des UART an SV4 ist wie folgt:

Pin Signal vom UART-Adapter
1 DTR
3 TX
7 RX
9 RTS

Liegt das Trägerboard eines WittyCloud herum, müssen DTR und RTS gefädelt werden.

Betrieb

Ist die Firmware auf dem Chip und es sollen Daten vom VBus decodiert werden, muss ein Jumper zwischen Pin 3 und 4 an SV4 oder ein Lötpunkt auf SJ1 gesetzt werden:

Firmware

Zugegebenermaßen: ich habe zwar seit Jahren ein paar ESP8266-Module herumliegen, mich aber nie so richtig damit auseinandergesetzt.

Aber das macht nichts: Tasmota unterstützt verschiedene Smart Metering-Anbindungen, für die die Firmware allerdings angepasst selbst kompiliert werden muss.

Michael hat sich (mit der Unterstützung aus der Tasmota-Community) daran gemacht und freundlicherweise die nötigen Anpassungen zur Verfügung gestellt:

Folgendes muss in der Datei tasmota/user_config_override.h ergänzt werden:

#ifndef _USER_CONFIG_OVERRIDE_H_
#define _USER_CONFIG_OVERRIDE_H_

#ifndef USE_SCRIPT
#define USE_SCRIPT
#endif
#ifndef USE_SML_M
#define USE_SML_M
#endif
#ifdef USE_RULES
#undef USE_RULES
#endif
#ifndef SML_REPLACE_VARS
#define SML_REPLACE_VARS
#endif
#ifndef USE_SML_SCRIPT_CMD
#define USE_SML_SCRIPT_CMD
#endif
#ifndef SML_MAX_VARS
#define SML_MAX_VARS 20
#endif
#ifndef USE_SCRIPT_JSON_EXPORT
#define USE_SCRIPT_JSON_EXPORT
#endif
#ifndef USE_SCRIPT_WEB_DISPLAY
#define USE_SCRIPT_WEB_DISPLAY
#endif

Konfiguration

Nach dem Flashen des Mikrocontrollers, was für fertige Builds auch über den Tasmotizer erfolgen kann, kann unter Main-Menu -> Console -> Edit Script das Script ergänzt werden.

Mit dem Befehl sensor53 d1 kann man den Header für die Meter Metrics ermitteln und im Script entsprechend anpassen.

Für die RemaSol B/2 sieht das wie folgt aus:

r="1,aa10005d101000010a67"
coltemp=0
Byte1=0
Byte2=0

>S
coltemp=sml[1]
Byte1=coltemp>>8
Byte2=coltemp&0xff
if Byte1==0x00 {
coltemp=coltemp&0xff
}
if Byte1==0xff {
coltemp=(coltemp-0x10000)
}
coltemp=coltemp*0.1

>B
=>sensor53 r

>M 1
+1,3,v,0,9600,Solar
%r%vo0uw@1,KollektorBase,°C,kolbase,2
%r%vo0uw@10,KollektorOrg,°C,kolorg,2
%r%vo2uw@10,Speicher unten,°C,spu,1
%r%vo4uw@10,Speicher oben,°C,spo,1
%r%vo8ub@1,Pumpe,%%,pump,0
#

>J
,"Calculated":{"kol":%coltemp%}

>W
Kollektor berechnet: {m} %coltemp% °C

Anmerkung: Hierbei handelt es sich um einen direkten Copy & Paste aus Michaels Script. Je nach Konfiguration der Anlage kann es Abweichungen geben.

Um den Fragen zuvorzukommen - die Anpassung auf die Jeweilige Anlage beginnt in der ersten Zeile: r="1,aa10005d101000010a67"

Die Farben entsprechen dem Beispiel von der Artikelhauptseite, kurzum:

  • aa: Sync-Wort
  • 1000: Zieladresse
  • 5d10: Quelladresse
  • 10: Protokollversion
  • 0001: Befehl
  • 0a: Anzahl Nutzdatenframes
  • 67: Prüfsumme

Die Quelladresse kann in der VBus-Spezifikation nachgeschlagen werden. Zu beachten ist hier die Endianness: was in der Doku als 0x1234 geschrieben ist, muss hier als 3412 angegeben werden.

Anschließend muss man auf der oben genannten Seite nach dem Command 0x0100 für den entsprechenden Regler suchen. Dazu am besten oben nach 0x0100 filtern und dann mit Strg+F die Quelladresse finden.

Klickt man in der Zeile auf Bytes bekommt man die Länge der Nachricht, wobei man 1 addieren muss, da es sich um Offsets handelt. Beim RemaSol 1/2 (bzw. DeDietrich Sol Plus ER 709) ist der größte Offset 39, also 40 Bytes. Mit dem Wissen, dass ein Frame 4 Byte enthält, ergibt sich eine Länge von 10 Frames, was einem Hexadezimalwert von 0x0A entspricht.

Nun muss man nur noch die Prüfsumme berechnen (oder durch Schnüffeln am UART ermitteln)

Für die Feldzuordnung lohnt sich ein scharfer Blick und Vergleich der Fields-Seite für die DeltaSol BS Plus und dem Beispiel in der dieses Reglers in der Tasmota-Doku.

Leiterkarten

Es gibt noch unbestückte Leiterkärtchen. Wer eine will, kann sich gerne bei mir melden.

Achtung: Es handelt sich um Version 0.1, auf der sich 3 kleine Fehler befinden, die sich allerdings mit Fädeldraht korrigieren lassen.

Downloads