ESP32 Keypad für die Haustür
Willkommen auf der Projektseite für mein neuestes Projekt: ein ESP32 Keypad, das über Home Assistant ein Nuki Smart Türschloss steuert. Dieses Projekt kombiniert die Funktionalität eines 4×4 Matrix-Tastenfelds mit der Leistung eines ESP32-Mikrocontrollers, um eine sichere und bequeme Zugangskontrolle für dein Zuhause zu ermöglichen.
Projektübersicht
Ziel dieses Projekts:
Ein robustes und zuverlässiges Keypad für die Haustür zu entwickeln, das nahtlos mit Home Assistant und einem Nuki Smart Türschloss zusammenarbeitet. Zusätzlich sollte das Keypad in der Lage sein, Temperatur- und Feuchtigkeitsdaten zu erfassen und an Home Assistant zu übermitteln.
Technische Details
Hardware:
- ESP32 Mikrocontroller:
- Verantwortlich für die Steuerung des Keypads und die Kommunikation mit Home Assistant.
- 4×4 Matrix-Tastenfeld:
- Ermöglicht die Eingabe von Zugangscodes.
- Bietet akustische Rückmeldung über einen integrierten Buzzer.
- Temperatur- und Feuchtigkeitssensor (AM2302):
- Misst die Umgebungstemperatur und Luftfeuchtigkeit.
- Bluetooth-Tracker:
- Überwacht die Temperatur von Flur und Außenbereich.
- Überwacht den Garten mit einem Bluetooth Aqara Pflanzensensor.
- Gehäuse:
- Das Gehäuse wurde in Fusion360 konstruiert und mit einem Prusa MK4 3D-Drucker gedruckt.
Funktionen:
- Zugangskontrolle:
- Das 4×4 Matrix-Tastenfeld ermöglicht die Eingabe eines Zugangscodes, der das Nuki Smart Türschloss steuert.
- Akustische Signale durch den Buzzer bestätigen die Eingabe.
- Umweltüberwachung:
- Der AM2302-Sensor erfasst Temperatur- und Feuchtigkeitsdaten.
- Über Bluetooth werden Temperaturdaten vom Flur und Außenbereich sowie Gartendaten an Home Assistant übermittelt.
- Home Assistant Integration:
- Alle erfassten Daten werden an Home Assistant gesendet, wo sie überwacht und analysiert werden können.
Projekt im Detail
Aufbau des Keypads:
- Das 4×4 Matrix-Tastenfeld ist mit dem ESP32 verbunden, um die Eingabe von Zugangscodes zu ermöglichen.
- Ein Buzzer ist integriert, um akustische Rückmeldungen bei der Eingabe zu geben.
- Der AM2302-Sensor ist ebenfalls integriert, um Temperatur- und Feuchtigkeitsdaten zu erfassen.
- Das Gehäuse wurde in Fusion360 konstruiert und mit einem Prusa MK4 3D-Drucker gedruckt, um eine passgenaue und stabile Unterbringung der Elektronik zu gewährleisten.
Bluetooth-Integration:
- Der ESP32 verwendet einen BLE-Tracker, um die Temperaturdaten von Sensoren im Flur und im Außenbereich zu erfassen und an Home Assistant zu übermitteln.
- Ein Bluetooth Aqara Pflanzensensor überwacht den Garten und sendet Daten zu Temperatur, Feuchtigkeit, Beleuchtung und Bodenleitfähigkeit.
ESPHome Code:
- Der ESPHome Code wurde speziell für dieses Projekt entwickelt und ermöglicht die nahtlose Integration des Keypads in Home Assistant.
- Der Code steuert die verschiedenen Funktionen des Keypads, einschließlich der Eingabeüberwachung, der Buzzer-Steuerung und der Sensordatenübertragung.
Fazit
Dieses ESP32 Keypad-Projekt bietet eine sichere und bequeme Möglichkeit, dein Nuki Smart Türschloss zu steuern und gleichzeitig wichtige Umweltdaten zu erfassen und zu überwachen. Es ist ein großartiges Beispiel dafür, wie man moderne Mikrocontroller-Technologie nutzen kann, um praktische und nützliche Lösungen für den Alltag zu schaffen. Die Kombination aus selbst konstruiertem Gehäuse und maßgeschneidertem Code zeigt, wie viel man mit ein wenig Kreativität und technischem Know-how erreichen kann.
Vielen Dank, dass du dir die Zeit genommen hast, mehr über mein Projekt zu erfahren. Ich freue mich darauf, weitere interessante Projekte mit dir zu teilen!
esphome: name: keypad-esp32 friendly_name: Keypad-ESP32 esp32: board: esp32dev framework: type: arduino # Enable logging logger: # Enable Home Assistant API api: encryption: key: "very secret key" ota: - platform: esphome password: "very secret key" wifi: ssid: !secret wifi_ssid password: !secret wifi_password # Enable fallback hotspot (captive portal) in case wifi connection fails ap: ssid: "Keypad-Esp32 Fallback Hotspot" password: "very secret key" captive_portal: output: - platform: gpio pin: 27 id: buzzer esp32_ble_tracker: scan_parameters: interval: 300ms # try with 300ms if you don't have LAN module window: 300ms # try with 300ms if you don't have LAN module active: false button: - platform: template name: Buzzer 800ms id: buzzer_quit icon: mdi:volume-medium on_press: then: - output.turn_on: buzzer - delay: 800ms - output.turn_off: buzzer - platform: template name: Buzzer 200ms id: buzzer_progress icon: mdi:volume-low on_press: then: - output.turn_on: buzzer - delay: 200ms - output.turn_off: buzzer - platform: template name: Buzzer Double 200ms id: buzzer_double icon: mdi:volume-low on_press: then: - output.turn_on: buzzer - delay: 200ms - output.turn_off: buzzer - delay: 100ms - output.turn_on: buzzer - delay: 200ms - output.turn_off: buzzer - platform: template name: Buzzer 2000ms id: buzzer_long icon: mdi:volume-high on_press: then: - output.turn_on: buzzer - delay: 2000ms - output.turn_off: buzzer matrix_keypad: id: mykeypad rows: - pin: 22 - pin: 21 - pin: 17 - pin: 16 columns: - pin: 18 - pin: 19 - pin: 23 - pin: 5 keys: "123A456B789C*0#D" has_diodes: false key_collector: - id: pincode_reader source_id: mykeypad end_keys: "#" end_key_required: true #back_keys: "*" #clear_keys: "C" allowed_keys: "0123456789ABCD*" timeout: 3s on_progress: - logger.log: format: "input progress: '%s', started by '%c'" args: [ 'x.c_str()', "(start == 0 ? '~' : start)" ] - text_sensor.template.publish: id: keypadp state: !lambda "return x.c_str();" - output.turn_on: buzzer - delay: 90ms - output.turn_off: buzzer on_result: - logger.log: format: "input result: '%s', started by '%c', ended by '%c'" args: [ 'x.c_str()', "(start == 0 ? '~' : start)", "(end == 0 ? '~' : end)" ] - text_sensor.template.publish: id: keypad state: !lambda "return x.c_str();" - delay: 3s - text_sensor.template.publish: id: keypad state: "" on_timeout: - logger.log: format: "input timeout: '%s', started by '%c'" args: [ 'x.c_str()', "(start == 0 ? '~' : start)" ] text_sensor: - platform: template name: "Keypad Code" id: keypad icon: mdi:alarm-panel-outline - platform: template name: "Keypad Code Progress" id: keypadp icon: mdi:alarm-panel-outline sensor: - platform: uptime name: "Uptime" - platform: internal_temperature name: "Internal Temperature" - platform: dht pin: 2 model: AM2302 temperature: name: "Temperatur Terrasse" id: air_temperature humidity: name: "Feuchtigkeit Terrasse" id: relative_humidity update_interval: 60s - platform: xiaomi_hhccjcy01 mac_address: 'bluetooth mac adress' temperature: name: "Garden Temperature" moisture: name: "Garden Moisture" illuminance: name: "Garden Illuminance" conductivity: name: "Garden Soil Conductivity" battery_level: name: "Garden Battery Level" - platform: atc_mithermometer mac_address: "bluetooth mac adress" temperature: name: "Flur Temperature" humidity: name: "Flur Humidity" battery_level: name: "Flur Battery Level" battery_voltage: name: "Flur Battery-Voltage" signal_strength: name: "Flur Signal" - platform: atc_mithermometer mac_address: "bluetooth mac adress" temperature: name: "Aussen Temperature" humidity: name: "Aussen Humidity" battery_level: name: "Aussen Battery Level" battery_voltage: name: "Aussen Battery-Voltage" signal_strength: name: "Aussen Signal" - platform: absolute_humidity name: "Terrasse Absolute Feuchtigkeit" icon: 'mdi:water-percent-alert' temperature: air_temperature humidity: relative_humidity switch: - platform: restart name: "Restart"