Sensor de impressão digital

Hoje eu queria compartilhar como fiz um sensor de impressão digital para controlar minha garagem.

Foi o que me fez entrar no Home Assistant pela primeira vez. Eu queria poder controlar minha garagem pelo meu telefone. Isso foi há algum tempo, mas agora também posso controlá-la com um sensor de impressão digital. 
Não vou abordar como controlo a garagem em si neste tópico, mas principalmente como controlar o sensor de impressão digital e como construí-lo em um objeto de madeira.

O que você precisa:

  • Sensor de impressão digital GROW R503
  • ESP8266 ou ESP32 executando ESPHome
  • Cabo UTP
  • Furadeira
  • Broca de ± 35 mm
  • Broca de ± 8 mm
  • Ferro de solda com solda
  • (Opcional) Impressora 3D para imprimir a capa
  • (Opcional) Capa pré-fabricada para o sensor

O primeiro passo é descascar o cabo UTP para que todos os fios coloridos fiquem visíveis e possam ser soldados. O sensor de crescimento tem seis fios. Soldei o fio branco e o vermelho juntos porque ambos precisam de 3,3v. Os outros fios eu soldei em cores semelhantes no cabo UTP.

Após a soldagem, cubra a solda com fita isolante para isolá-los um do outro.
Para a outra ponta do cabo, você tem que soldá-los à placa ESP8266 ou ESP32. Estas são as cores e pinos que usei.

Para ESP8266:

  • Vermelho e branco: 3V
  • Preto: G
  • Amarelo: D1
  • Verde: D0
  • Azul: D2

Para ESP32:

  • Vermelho e branco: 3V
  • Preto: GND
  • Amarelo: GPIO16
  • Verde: GPIO17
  • Azul: GPIO05

Feito isso, carregue a configuração do ESPHome no ESP. Esta é minha configuração.

uart:
  tx_pin: D0 # Or GPIO17 for ESP32
  rx_pin: D1 # Or GPIO16 for ESP32
  baud_rate: 57600

fingerprint_grow:
  sensing_pin: D2 # Or GPIO05 for ESP32
  on_finger_scan_matched:
    - switch.turn_on: trigger_relay
    - fingerprint_grow.aura_led_control:
        state: BREATHING
        speed: 200
        color: BLUE
        count: 1
    - text_sensor.template.publish:
        id: fingerprint_state
        state: "Authorized finger"
  on_finger_scan_unmatched:
    - fingerprint_grow.aura_led_control:
        state: FLASHING
        speed: 25
        color: RED
        count: 2
    - text_sensor.template.publish:
        id: fingerprint_state
        state: "Unauthorized finger"
  on_enrollment_scan:
    - fingerprint_grow.aura_led_control:
        state: FLASHING
        speed: 25
        color: BLUE
        count: 2
    - fingerprint_grow.aura_led_control:
        state: ALWAYS_ON
        speed: 0
        color: PURPLE
        count: 0
    - text_sensor.template.publish:
        id: fingerprint_state
        state: "Finger scanned"
  on_enrollment_done:
    - fingerprint_grow.aura_led_control:
        state: BREATHING
        speed: 100
        color: BLUE
        count: 2
    - text_sensor.template.publish:
        id: fingerprint_state
        state: "Enrolled fingerprint"
  on_enrollment_failed:
    - fingerprint_grow.aura_led_control:
        state: FLASHING
        speed: 25
        color: RED
        count: 4
    - text_sensor.template.publish:
        id: fingerprint_state
        state: "Failed to enroll fingerprint"

text_sensor:
  - platform: template
    id: fingerprint_state
    name: "Garage Fingerprint State"

sensor:
  - platform: fingerprint_grow
    fingerprint_count:
      name: "Garage Fingerprint Count"
      id: fingerprint_count
    last_finger_id:
      name: "Garage Fingerprint Last Finger ID"
    last_confidence:
      name: "Garage Fingerprint Last Confidence"
    status:
      name: "Garage Fingerprint Status"
    capacity:
      name: "Garage Fingerprint Capacity"
    security_level:
      name: "Garage Fingerprint Security Level"

api:
  password: !secret api_password
  
  services:
  - service: enroll
    variables:
      finger_id: int
      num_scans: int
    then:
      - fingerprint_grow.enroll:
          finger_id: !lambda 'return finger_id;'
          num_scans: !lambda 'return num_scans;'
  - service: enroll_next # Idea by Ralf Klüber (thanks!)
    variables:
      num_scans: int
    then:
      - fingerprint_grow.enroll:
          finger_id: !lambda 'return id(fingerprint_count).state;'
          num_scans: !lambda 'return num_scans;'
  - service: cancel_enroll
    then:
      - fingerprint_grow.cancel_enroll:
  - service: delete
    variables:
      finger_id: int
    then:
      - fingerprint_grow.delete:
          finger_id: !lambda 'return finger_id;'
  - service: delete_all
    then:
      - fingerprint_grow.delete_all:

É importante também definir uma senha para o sensor de impressão digital para evitar ataques físicos, como soldar outro sensor de impressão digital ao cabo UTP. Consulte a documentação do ESPHome para obter mais informações.

Certifique-se de adicionar o dispositivo no Home Assistant como uma integração, caso ainda não o tenha feito.

Quando isso estiver pronto, você pode registrar sua impressão digital no sensor chamando o serviço esphome.X_enrollonde X é o nome do dispositivo, com os parâmetros finger_idnum_scans. Para o primeiro dedo, preencha o id 0, o segundo dedo, o id 1 e assim por diante. O num scans é a quantidade de scans que leva para registrar o dedo. Eu uso 2 para isso.

Tudo funcionou? Ótimo! Vamos construir isso em uma superfície.

Para colocá-lo na madeira, tive que dessoldar o sensor de impressão digital do cabo UTP. Pegue a furadeira e uma broca grande, algo assim.

Deixe um comentário