WLAN Keypad: Unterschied zwischen den Versionen
Zur Navigation springen
Zur Suche springen
>Mogwai K (→Konfiguration) |
>Mogwai KKeine Bearbeitungszusammenfassung |
||
(38 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
Zeile 2: | Zeile 2: | ||
|Why=Senden von Tasteneingaben an einen MQTT Server | |Why=Senden von Tasteneingaben an einen MQTT Server | ||
|What=hardware, software | |What=hardware, software | ||
|Who= | |Who=Mogwai | ||
|Status=running | |Status=running | ||
|Tags=Keypad, ESP8266 | |Tags=Keypad, ESP8266 | ||
}} | }} | ||
Ziel ist das Senden von Tasten Eingaben per WLAN an einen MQTT Server zur Weiterverarbeitung (z.B. Steuerung von Raumfunktionen oder Lichteffekten) | Ziel ist das Senden von Tasten Eingaben per WLAN an einen MQTT Server zur Weiterverarbeitung (z.B. Steuerung von Raumfunktionen oder Lichteffekten) | ||
== Hardware == | == Hardware == | ||
* ESP8266 | * 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) | * 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 ( | == Pinbelegung Keypad und ESP8266 == | ||
=== Variante 1 (Minimal Hardware) === | |||
{| class="wikitable" | {| class="wikitable" | ||
Zeile 25: | Zeile 31: | ||
| 0 || Gehäuse Schließkontakt Kette || Alle Schließkontakte (3x) || GND || - | | 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 | | 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 | | 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 | | 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 | | 4 || Zeile 3 || 7, 8, 9, Enter || IO 4 || INPUT, Pull-Up intern | ||
Zeile 42: | Zeile 48: | ||
|- | |- | ||
| 9 || Spalte 3 || PfeilRunter, Cancel, Clear, Enter || IO 5 || 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 === | |||
'''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.''' | |||
{| class="wikitable" | |||
! 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) | |||
|} | |} | ||
Zeile 53: | Zeile 93: | ||
|| 0x0000 || <keine> || <nix> | || 0x0000 || <keine> || <nix> | ||
|- | |- | ||
|| 0x0001 || | || 0x0001 || PfeilHoch || u | ||
|- | |- | ||
|| 0x0002 || | || 0x0002 || 1 || 1 | ||
|- | |- | ||
|| 0x0004 || | || 0x0004 || 4 || 4 | ||
|- | |- | ||
|| 0x0008 || | || 0x0008 || 7 || 7 | ||
|- | |- | ||
|| 0x0010 || | || 0x0010 || 0 || 0 | ||
|- | |- | ||
|| 0x0020 || | || 0x0020 || 2 || 2 | ||
|- | |- | ||
|| 0x0040 || | || 0x0040 || 5 || 5 | ||
|- | |- | ||
|| 0x0080 || | || 0x0080 || 8 || 8 | ||
|- | |- | ||
|| 0x0100 || | || 0x0100 || Select || s | ||
|- | |- | ||
|| 0x0200 || | || 0x0200 || 3 || 3 | ||
|- | |- | ||
|| 0x0400 || | || 0x0400 || 6 || 6 | ||
|- | |- | ||
|| 0x0800 || | || 0x0800 || 9 || 9 | ||
|- | |- | ||
|| 0x1000 || | || 0x1000 || PfeilRunter || d | ||
|- | |- | ||
|| 0x2000 || | || 0x2000 || Cancel || x | ||
|- | |- | ||
|| 0x4000 || | || 0x4000 || Clear || c | ||
|- | |- | ||
|| 0x8000 || | || 0x8000 || Enter || e | ||
|} | |} | ||
== Geplante Funktionen == | == Geplante Funktionen == | ||
* Senden der gedrückten Taste per MQTT | * Senden der gedrückten Taste per MQTT (done) | ||
* Zusammenfassen mehrerer Zeichen als Zeichenkette und senden dieser Kette nach Drücken der "Enter" Taste | * Zusammenfassen mehrerer Zeichen als Zeichenkette und senden dieser Kette nach Drücken der "Enter" Taste (done) | ||
* Konfiguration per JSON String im SPIFFS des ESP | * Konfiguration per JSON String im SPIFFS des ESP (done) | ||
* Konfigurierbare Tastenwiederholung | * 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ä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 == | == Konfiguration == | ||
Die Konfiguration erfolgt per JSON String in der | 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)<br> | ||
{| class="wikitable" | {| class="wikitable" | ||
Zeile 100: | Zeile 143: | ||
! Funktion | ! Funktion | ||
! Wertebereich | ! Wertebereich | ||
|- | |||
| wifiSSID || WLAN SSID || String | |||
|- | |||
| wifiPassword || WLAN Passwort || String | |||
|- | |- | ||
| mqttServer || IP Addresse des MQTT Servers || IPv4 als String | | mqttServer || IP Addresse des MQTT Servers || IPv4 als String | ||
|- | |- | ||
| | | mqttServerPort || Portnummer des MQTT Servers || Numerisch 16-bit | ||
|- | |- | ||
| mqttClientName || MQTT Client Name || String | | mqttClientName || MQTT Client Name || String | ||
Zeile 122: | Zeile 169: | ||
|- | |- | ||
| keypadMultikeyTimeout || Timeout für Zusammenhängende Tasteneingabe in Ms || 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 == | == MQTT Nachrichtenformat == | ||
Die Übermittlung der Tasteninformationen erfolgt per MQTT mit folgendem Inhalt: | Die Übermittlung der Tasteninformationen erfolgt per MQTT in JSON Format mit folgendem Inhalt: | ||
{| class="wikitable" | {| class="wikitable" | ||
Zeile 134: | Zeile 187: | ||
|- | |- | ||
| keycode || Maske der Tastencodes der gedrückten Taste(n) || 16-Bit Integer | | keycode || Maske der Tastencodes der gedrückten Taste(n) || 16-Bit Integer | ||
|- | |- | ||
| keyrepeat || Anzahl der bisherigen Wiederholungen der Taste || 16-Bit Integer | | keyrepeat || Anzahl der bisherigen Wiederholungen der Taste || 16-Bit Integer | ||
Zeile 145: | Zeile 196: | ||
| keypadEnclosureState || Ist Gehäuse geschlossen (1), oder offen (0)? || 8-Bit Integer | | keypadEnclosureState || Ist Gehäuse geschlossen (1), oder offen (0)? || 8-Bit Integer | ||
|} | |} | ||
== Schaltplan == | |||
[[File:WLAN_Keypad_schematics.png|480px|thumb|left|WLAN_Keypad_Schematics]] | |||
<br clear=all> | |||
== Arduino Programm == | |||
[https://github.com/rekna/WLAN_Keypad_v1] |
Aktuelle Version vom 4. Juli 2021, 18:14 Uhr
WLAN Keypad | |
---|---|
Weshalb | Senden von Tasteneingaben an einen MQTT Server |
Was | hardware, software |
Wer | Mogwai |
Status | läuft |
Ziel ist das Senden von Tasten Eingaben per WLAN an einen MQTT Server zur Weiterverarbeitung (z.B. Steuerung von Raumfunktionen oder Lichteffekten)
Hardware[Bearbeiten | Quelltext 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 | Quelltext bearbeiten]
Variante 1 (Minimal Hardware)[Bearbeiten | Quelltext 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 | Quelltext 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 | Quelltext 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 | Quelltext 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 | Quelltext 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 | Quelltext 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 | Quelltext 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 | Quelltext bearbeiten]