WLAN Keypad

Aus Maschinendeck Wiki
Zur Navigation springen Zur Suche springen


WLAN Keypad
Why Senden von Tasteneingaben an einen MQTT Server
What hardware, software
Who Mogwai
Status running


Ziel ist das Senden von Tasten Eingaben per WLAN an einen MQTT Server zur Weiterverarbeitung (z.B. Steuerung von Raumfunktionen oder Lichteffekten)

Hardware[Bearbeiten]

  • Variante 1: Minimal Version (nur Tastenabfrage) ESP8266 (Hier ESP-201 Modul, welches ich noch in meinem Bestand hatte)
  • Variante 2: WeMos D1 Mini Board und MCP23017 PortExpander (I2C) , OLED SSD1306 Display (I2C)
  • Alte Kassensystem Keypads aus dem Maschinendeck (Type FM015700C)
  • Ein paar Widerstände
  • Ein Spannungsregler für 3,3 Volt (nur Variante 1)
  • Zwei Taster (Reset und GPIO0-Ground fürs flashen) und FTDI Adpater, je nach Ausstattung des ESP8266 Boards

Pinbelegung Keypad und ESP8266[Bearbeiten]

Variante 1 (Minimal Hardware)[Bearbeiten]

Keypad Pin Funktion Tasten ESP8266 PIN ESP8266 Bemerkungen
0 Gehäuse Schließkontakt Kette Alle Schließkontakte (3x) GND -
1 Zeile 1 1, 2, 3, Cancel IO 0 INPUT, Externer Pull-Up, da PIN HIGH sein muss zum Starten des ESP, LOW (extra Taster) für Programmierung
2 Zeile 2 4, 5, 6, Clear IO 2 INPUT, Pull-Up intern
3 Gehäuse Schließkontakt Kette Alle Schließkontakte (3x) T_OUT / ADC Pull-Up Extern (Spannungsteiler: GND - 100K - T_OUT - 220K - Kontakt - 10K - VCC)
4 Zeile 3 7, 8, 9, Enter IO 4 INPUT, Pull-Up intern
5 Zeile 0 PfeilHoch, Select, PfeilRunter, 0 IO 3 RX als IO-PIN konfigurieren, INPUT, Pull-Up intern
6 Spalte 0 PfeilHoch, 1, 4, 7 IO 14 OUTPUT (LOW zum Ansteuern der Zeile, sonst INPUT und Pull-Up)
7 Spalte 1 2, 5, 8, 0 IO 12 OUTPUT (LOW zum Ansteuern der Zeile, sonst INPUT und Pull-Up)
8 Spalte 2 Select, 3, 6, 9 IO 13 OUTPUT (LOW zum Ansteuern der Zeile, sonst INPUT und Pull-Up)
9 Spalte 3 PfeilRunter, Cancel, Clear, Enter IO 5 OUTPUT (LOW zum Ansteuern der Zeile, sonst INPUT und Pull-Up)

Variante 2[Bearbeiten]

ACHTUNG: Die Pins für die Matrix haben auf Board Seite eine andere Anordnung, welches das Anlöten und die Programmierung des MCP23017 vereinfacht! Hier kann die Verdrehung der Pins im Flachband-Anschlußkabel vorgenommen werden.

Keypad Pin Funktion Tasten Connector PIN ESP8266 PIN ESP8266 Bemerkungen MCP23017 Pin
0 Gehäuse Schließkontakt Kette Alle Schließkontakte (3x) 0 GND - -
1 Zeile 1 1, 2, 3, Cancel 3 - - GPA1, INPUT, Pull-Up intern
2 Zeile 2 4, 5, 6, Clear 4 - - GPA2, INPUT, Pull-Up intern
3 Gehäuse Schließkontakt Kette Alle Schließkontakte (3x) 1 T_OUT / ADC Pull-Up Extern 10K (weiterer Spannungsteiler auf WeMos Board) -
4 Zeile 3 7, 8, 9, Enter 5 - - GPA3, INPUT, Pull-Up intern
5 Zeile 0 PfeilHoch, Select, PfeilRunter, 0 2 - - GPA0, INPUT, Pull-Up intern
6 Spalte 0 PfeilHoch, 1, 4, 7 6 - - GPA4, OUTPUT (LOW zum Ansteuern der Zeile, sonst INPUT und Pull-Up)
7 Spalte 1 2, 5, 8, 0 7 - - GPA5, OUTPUT (LOW zum Ansteuern der Zeile, sonst INPUT und Pull-Up)
8 Spalte 2 Select, 3, 6, 9 8 - - GPA6, OUTPUT (LOW zum Ansteuern der Zeile, sonst INPUT und Pull-Up)
9 Spalte 3 PfeilRunter, Cancel, Clear, Enter 9 - - GPA7, OUTPUT (LOW zum Ansteuern der Zeile, sonst INPUT und Pull-Up)

Tastencodes Keypad[Bearbeiten]

Tastencode Taste Zeichenzuordnung
0x0000 <keine> <nix>
0x0001 PfeilHoch u
0x0002 1 1
0x0004 4 4
0x0008 7 7
0x0010 0 0
0x0020 2 2
0x0040 5 5
0x0080 8 8
0x0100 Select s
0x0200 3 3
0x0400 6 6
0x0800 9 9
0x1000 PfeilRunter d
0x2000 Cancel x
0x4000 Clear c
0x8000 Enter e

Geplante Funktionen[Bearbeiten]

  • Senden der gedrückten Taste per MQTT (done)
  • Zusammenfassen mehrerer Zeichen als Zeichenkette und senden dieser Kette nach Drücken der "Enter" Taste (done)
  • Konfiguration per JSON String im SPIFFS des ESP (done)
  • Konfigurierbare Tastenwiederholung (done)

Erweiterungen[Bearbeiten]

  • Denkbar wäre eine Erweiterung um ein 8-stelliges 7-Seg Display, das die Eingaben anzeigt. Hier ist zu bedenken, dass die Displays auf Basis eines MAX7221 eine Spannung von 5V benötigen. Um die für die Ansteuerung nötigen Pins (SPI) freizubekommen, wäre das Vorschalten eines 74595 Schieberegisters und eines Demultiplexers (4067, oder 4051), um die Pins für die Tastenabfrage zu reduzieren, denkbar / Alternativ: Verwenden eines Portexpanders z.b. MCP23017

Konfiguration[Bearbeiten]

Die Konfiguration erfolgt per JSON String in der Datei config.txt im SPIFFS des ESP8266. Oder alternativ über die Web Config Seite des Keypad (Pin 0 beim Start auf LOW, Oder drücken der Konfigurieten Tastencodes)

Parameter (case sensitiv) Funktion Wertebereich
wifiSSID WLAN SSID String
wifiPassword WLAN Passwort String
mqttServer IP Addresse des MQTT Servers IPv4 als String
mqttServerPort Portnummer des MQTT Servers Numerisch 16-bit
mqttClientName MQTT Client Name String
mqttUser MQTT Username String
mqttPassword MQTT Passwort String
mqttPubTopic MQTT Topic an das die Tastendaten geschickt wird String
keypadDebounceTime Debounce Zeit für Tastenerkennung in Ms Numerisch 16-bit
keypadRepeatDelay Wartezeit für erste Tastenwiederholung in Ms Numerisch 16-bit
keypadRepeatInterval Wiederholungsintervall bei Tastenwiederholung in Ms Numerisch 16-bit
keypadRepeatMask Maske der Tastencodes, für die eine Tastenwiederholung durchgeführt wird (siehe Tastencodes) Numerisch 16-bit
keypadMultikeyTimeout Timeout für Zusammenhängende Tasteneingabe in Ms Numerisch 16-bit
keypadMultikeyMask Maske der Tastencodes, für die eine zusammenhängende Tasteneingabe durchgeführt wird (siehe Tastencodes) Numerisch 16-bit
keypadAPKeyMask Maske der Tastencodes, bei der die WebConfig Seite angezeigt wird (siehe Tastencodes) Numerisch 16-bit
keypadAPKeyTime Timeout für WebConfig Seite in Sekunden Numerisch 16-bit

MQTT Nachrichtenformat[Bearbeiten]

Die Übermittlung der Tasteninformationen erfolgt per MQTT in JSON Format mit folgendem Inhalt:

Parameter (case sensitiv) Funktion Wertebereich
keycode Maske der Tastencodes der gedrückten Taste(n) 16-Bit Integer
keyrepeat Anzahl der bisherigen Wiederholungen der Taste 16-Bit Integer
keychar Zeichenentsprechung der gedrückten Taste(n) String, sortiert nach Keycode bei mehreren gedrückten Tasten
keystring Enthält mehrerer hintereinander gedrückte Tasten, die mit Enter bestätigt wurden String
keypadEnclosureState Ist Gehäuse geschlossen (1), oder offen (0)? 8-Bit Integer

Schaltplan[Bearbeiten]

WLAN_Keypad_Schematics


Arduino Programm[Bearbeiten]

[1]