WLAN Keypad und Benutzer:MikO/MQTT: Unterschied zwischen den Seiten

Aus Maschinendeck Wiki
(Unterschied zwischen Seiten)
Zur Navigation springen Zur Suche springen
>Mogwai
 
>MikO
(Created page with "{{Project |Why=IoT Control for the Maschinendeck Hacker- and Makerspace |What=software,hardware |Who=MikO |Status=running }} Mit dem neuen Raum erhält das Maschinendeck ein...")
 
Zeile 1: Zeile 1:
{{Project
{{Project
|Why=Senden von Tasteneingaben an einen MQTT Server
|Why=IoT Control for the Maschinendeck Hacker- and Makerspace
|What=hardware, software
|What=software,hardware
|Who=User:Mogwai
|Who=MikO
|Status=running
|Status=running
|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)
Mit dem neuen Raum erhält das Maschinendeck ein völlig neues MQTT-System. Die technische Umsetzung erfolgt über
 
== Hardware ==
 
* ESP8266 (Variante 1: ESP-201 Modul, welches ich noch in meinem Bestand hatte / Variante 2: WeMos D1 Mini Board)
* 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 ==
 
=== Variante 1 (Minimal Hardware) ===
 
{| class="wikitable"
! 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 1 (zusätzliches I2C Display) ===
 
{| class="wikitable"
! 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)
|}
 
== Tastencodes Keypad ==
 
{| class="wikitable"
! 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.<br>
 
{| class="wikitable"
! 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:
 
{| class="wikitable"
! 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 ==
[[File:WLAN_Keypad_schematics.png|480px|thumb|left|WLAN_Keypad_Schematics]]
 
<br clear=all>
 
== Arduino Programm ==
* Upload erfolgt, wenn das Programm debugt ist

Version vom 14. März 2020, 14:55 Uhr

MikO/MQTT
Weshalb IoT Control for the Maschinendeck Hacker- and Makerspace
Was software,hardware
Wer MikO
Status läuft



Mit dem neuen Raum erhält das Maschinendeck ein völlig neues MQTT-System. Die technische Umsetzung erfolgt über