2026-02-20 05:14:59 +01:00
2026-02-20 05:08:49 +01:00
2026-02-20 05:08:09 +01:00
2026-02-20 05:14:59 +01:00

🏷️ Terminal Bramy RFID (ESP32 + Home Assistant)

ESPHome Home Assistant ESP32 License MIT Power Optimized

Inteligentny terminal RFID do sterowania bramą z wykorzystaniem ESP32, RC522, OLED SSD1306 oraz Home Assistant.


🚀 Szybki start

Konfiguracja W pliku secrets.yaml zdefiniuj:

  • wifi_ssid
  • wifi_password
  • api_encryption_key
  • ota_password

Pomocnik Utwórz w Home Assistant encję: input_text.terminal_status

Instalacja

  1. Skompiluj projekt w ESPHome
  2. Wgraj na ESP32
  3. System automatycznie obniży taktowanie do 80 MHz (oszczędzanie energii)

Tagi

  1. Zeskanuj kartę
  2. W Home Assistant → Tagi
  3. Nazwij tag zaczynając od: Legitymacja Np Legitymacja Jan Kowalski

🏗️ Architektura systemu

System działa w modelu KlientSerwer.

Warstwa sprzętowa

  • ESP32
  • RFID RC522 (SPI)
  • OLED SSD1306 (I2C)

Warstwa logiczna

  • Home Assistant weryfikuje tag
  • Komunikacja przez Native API (AES-128)

Optymalizacja

  • Lokalny fallback wyświetlania
  • Underclocking 80 MHz
  • Light Sleep WiFi

💻 Wymagania sprzętowe

Element Model
Mikrokontroler ESP32 DevKit V1
RFID RC522 13.56 MHz
Wyświetlacz OLED SSD1306 128x64
Zasilanie 18650 3.7V lub 5V DC
Pasywa 2× Rezystor 220Ω, Przekaźnik 5V

🔌 Pinout

Moduł Pin ESP32 GPIO Opis
RC522 VCC 3.3V ⚠ NIE 5V
RC522 RST GPIO 4 Reset
RC522 GND GND Masa
RC522 MISO GPIO 19 SPI
RC522 MOSI GPIO 23 SPI
RC522 SCK GPIO 18 SPI
RC522 SDA GPIO 5 SPI CS
OLED SDA GPIO 21 I2C
OLED SCL GPIO 22 I2C
Przekaźnik IN GPIO 13 Sterowanie
LED Zielona + GPIO 12 220Ω
LED Czerwona + GPIO 14 220Ω


📝 Kod ESPHome (czytnik-brama.yaml)

esphome:
  name: terminal-brama
    platformio_options:
        board_build.f_cpu: 80000000L

        esp32:
          board: esp32dev
            framework:
                type: arduino

                wifi:
                  ssid: !secret wifi_ssid
                    password: !secret wifi_password
                      power_save_mode: LIGHT
                        fast_connect: true

                        api:
                          reboot_timeout: 0s
                            encryption:
                                key: !secret api_encryption_key

                                ota:
                                  - platform: esphome
                                      password: !secret ota_password

                                      logger:
                                        level: INFO

                                        i2c:
                                          sda: 21
                                            scl: 22

                                            spi:
                                              clk_pin: 18
                                                mosi_pin: 23
                                                  miso_pin: 19

                                                  rc522_spi:
                                                    cs_pin: 5
                                                      reset_pin: 4
                                                        update_interval: 500ms
                                                          on_tag:
                                                              then:
                                                                    - homeassistant.tag_scanned: !lambda 'return x;'

                                                                    switch:
                                                                      - platform: gpio
                                                                          pin: 13
                                                                              id: przekaznik_bramy
                                                                                  restore_mode: ALWAYS_OFF
                                  


🤖Automatyzacja Home Assistant (automations.yaml)

alias: "Terminal Bramy - Obsługa"
trigger:
  - platform: event
      event_type: tag_scanned

      action:
        - variables:
              v_nazwa: "{{ trigger.event.data.name }}"

                - choose:
                      - conditions:
                                - condition: template
                                            value_template: "{{ v_nazwa is not none and 'Legitymacja' in v_nazwa }}"
                                                    sequence:
                                                              - action: input_text.set_value
                                                                          target:
                                                                                        entity_id: input_text.terminal_status
                                                                                                    data:
                                                                                                                  value: "{{ v_nazwa | replace('Legitymacja ', '') | trim }}"
                                                                                                                            - action: switch.turn_on
                                                                                                                                        target:
                                                                                                                                                      entity_id: switch.terminal_brama_przekaznik_bramy

                                                                                                                                                            - conditions:
                                                                                                                                                                      - condition: template
                                                                                                                                                                                  value_template: "{{ v_nazwa is none or 'Legitymacja' not in v_nazwa }}"
                                                                                                                                                                                          sequence:
                                                                                                                                                                                                    - action: input_text.set_value
                                                                                                                                                                                                                target:
                                                                                                                                                                                                                              entity_id: input_text.terminal_status
                                                                                                                                                                                                                                          data:
                                                                                                                                                                                                                                                        value: "Brak Uprawnień"

                                                                                                                                                                                                                                                        mode: restart


🔒 Bezpieczeństwo

🔐 Szyfrowanie AES-128 (Native API)

📴 Fail-safe (brama domyślnie zamknięta)

🌐 Zalecane HTTPS dla zdalnego HA


📄 Licencja

Projekt udostępniony na licencji MIT. Możesz używać w projektach prywatnych i komercyjnych.

Description
System kontroli dostępu do bramy uczelnianej oparty na Elektronicznej Legitymacji Studenckiej (ELS). Projekt wykorzystuje technologię RFID, mikrokontroler ESP32 oraz zdalną bazę danych do weryfikacji uprawnień w czasie rzeczywistym.
Readme 66 KiB