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
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
-
-
GPA4, OUTPUT (LOW zum Ansteuern der Zeile, sonst INPUT und Pull-Up)
7
Spalte 1
2, 5, 8, 0
-
-
GPA5, OUTPUT (LOW zum Ansteuern der Zeile, sonst INPUT und Pull-Up)
8
Spalte 2
Select, 3, 6, 9
-
-
GPA6, OUTPUT (LOW zum Ansteuern der Zeile, sonst INPUT und Pull-Up)
9
Spalte 3
PfeilRunter, Cancel, Clear, Enter
-
-
GPA7, OUTPUT (LOW zum Ansteuern der Zeile, sonst INPUT und Pull-Up)
Tastencodes Keypad
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
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
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ären folgende Möglichkeiten denkbar:
Vorschalten eines 74595 Schieberegisters und eines Demultiplexers (4067, oder 4051), um die Pins für die Tastenabfrage zu reduzieren
Benutzung des noch freien GPIO 16 Pins als SPI-CS Pin und Ansteuerung der SPI-CLK und SPI-MOSI Leituing durch zwei der Output Pins der Keypad Abfrage. Hier dürfen Display und Tastenmetrix nicht gleichzeitig angesteuert werden.
Konfiguration
Die Konfiguration erfolgt per JSON String in der Datei config.txt im SPIFFS des ESP8266.
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
MQTT Nachrichtenformat
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