ESP32 Cam + RFID

Salut a tous,

Solution Ici
J’aurais besoin de vos lumières

Je suis en train de suivre cet article Integrar RFID - RC522 en ESPHome y Homeassistant | Domology 2.0 basé sur un ESP32,

J’essai d’adapté a mon ESP32 CAM, avec ces branchements.

ESP32 ----> RFID
3,3/5v —> Vcc
16 —> RST
GND —> GND
14 ----> MISO
2 ----> MOSI
4 ----> SCK
15 ----> SS/SDA

Voici mon fichier rc522_sensor.h que j’ai mis directement a la racine du dossier ESPHome dans dossier config.

Ce fichier et téléchargé dans un dossier portant le même nom, faut t’il que je le mette dans le dossier ?

#include "esphome.h"
#include <SPI.h>
#include <MFRC522.h>
#define RST_PIN         16        // Configurable, see typical pin layout above
#define SS_1_PIN        15         // Configurable, take a unused pin, only HIGH/LOW required
MFRC522 mfrc522;   // Create MFRC522 instance.
unsigned long tempo2 = 0;


class RFIDRC522Sensor : public Component{

  public:
  TextSensor *rfid = new TextSensor();
  TextSensor *rfidlast = new TextSensor();
  std:: string idnumberstd = "";
  std:: string last_cardstd= "";
  void setup() override {
    SPI.begin();        // Init SPI bus
    mfrc522.PCD_Init(SS_1_PIN, RST_PIN); // Init each MFRC522 card

    }   

  void loop() override {
     // Look for new cards

    if (mfrc522.PICC_IsNewCardPresent() && mfrc522.PICC_ReadCardSerial()) {
      MFRC522::PICC_Type piccType = mfrc522.PICC_GetType(mfrc522.uid.sak);
      dump_byte_array(mfrc522.uid.uidByte, mfrc522.uid.size, mfrc522.PICC_GetTypeName(piccType)); //llama a la funcion que trabaja con nuestra tarjeta
      // Halt PICC
      mfrc522.PICC_HaltA();
      // Stop encryption on PCD
      mfrc522.PCD_StopCrypto1();
    }

    if (millis() > tempo2 && tempo2 != 0){  
      //Borramos tarjeta y publicamos (vacio)
      idnumberstd.clear();
      rfid->publish_state(idnumberstd);
      tempo2 = 0;
    

    } 
  }
  void dump_byte_array(byte *ID, byte IDSize, String picc) {
    //le damos formato al numero de de la tarjeta leido
    String idnumber = "";
    for(byte i=0; i < IDSize; i++){
      if(ID[i] < 0x10){             //Añadimos el 0 de la izquierda en cada byte (si lo tuviera).
        idnumber += "0";
        }
      idnumber += String (ID[i], HEX);
      }
    idnumberstd = idnumber.c_str(); //pasamos a variable standard para que funcione en ESPHome y podamos mandarla
    
    //creamos los datos de la ultima tarjeta leida
    String last_card = (" ID card: "  + idnumber +  " PICC type: " + picc);
    last_cardstd = last_card.c_str(); //pasamos a variable standard para que funcione en ESPHome y podamos mandarla
    
    //Publicamos la tarjeta leida
    rfid->publish_state(idnumberstd);
    rfidlast->publish_state(last_cardstd);
   
    //Activamos temporizador de borrado
    tempo2 = millis() + 1000;
 
    }
    
};

Et voici mon fichier yaml ESPHome,

esphome:
  name: poulailler
  platform: ESP32
  board: esp32dev

  includes:
    - rc522_sensor.h  
  libraries:
    - "MFRC522"
    - "SPI"
    
wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_mdp
  # Ip Manuelle Optionnel
  manual_ip:
    static_ip: 192.168.10.200
    gateway: 192.168.10.1
    subnet: 255.255.255.0

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "Poulailler Hotspot"
    password: !secret ap_mdp

captive_portal:

# Enable logging
logger:

# Enable Home Assistant API
api:

ota:
esp32_camera:
  name: My Camera
  external_clock:
    pin: GPIO27
    frequency: 20MHz
  i2c_pins:
    sda: GPIO25
    scl: GPIO23
  data_pins: [GPIO17, GPIO35, GPIO34, GPIO5, GPIO39, GPIO18, GPIO36, GPIO19]
  vsync_pin: GPIO22
  href_pin: GPIO26
  pixel_clock_pin: GPIO21
  reset_pin: GPIO15
  resolution: 640x480
  jpeg_quality: 10
  
binary_sensor:
# statut
  - platform: status
    name: "Statut"

sensor:
# Qualité du signal
  - platform: wifi_signal
    name: "Signal Wifi"
    update_interval: 60s
# Temps de fonctionnement
  - platform: uptime
    name: "Allumé depuis (s)"
    id: uptime_sec

switch:
# Bouton de redémarrage
  - platform: restart
    name: "Redémarrage"
    
text_sensor:
  - platform: template
    name: "Allumé depuis (j)"
    lambda: |-
      int seconds = (id(uptime_sec).state);
      int days = seconds / (24 * 3600);
      seconds = seconds % (24 * 3600); 
      int hours = seconds / 3600;
      seconds = seconds % 3600;
      int minutes = seconds /  60;
      seconds = seconds % 60;
      return { (String(days) +"d " + String(hours) +"h " + String(minutes) +"m "+ String(seconds) +"s").c_str() };
    icon: mdi:clock-start
    update_interval: 60s 

  - platform: custom
    lambda: |-
      auto my_sensor = new RFIDRC522Sensor();
      App.register_component(my_sensor);
      return {my_sensor->rfid, my_sensor->rfidlast};

    text_sensors:
     - name: "RFID ID (temps reel)"
     - name: "RFID (derniere lecture)"

Voilà si il y a des partisan de ESPHome je suis preneur car je ne trouve pas ou est mon problème.

Merci d’avance.

salut Marty, pourquoi un espcam? (le tuto concerne un wemos D1, ou un esp8266)

Oui mais je voudrais l’adapter a l’esp32 cam pour faire de la reconnaissance faciale (même si c’est de mauvais qualité)

Je vais quand même essayer avec un wemos voir si les réglages sont bon

Ben mon projet avance car j’ai trouvé il y a 10 min comment intégrer le rc522.

Pourquoi chercher compliqué quand on peut faire simple.

Allez un peu de news, après quelques échanges sur le discord et des recherches en parallèle voici comment brancher esp32cam et le rfid RC522. A voir ici

Tu pourrais m’éclaircir sur l’utilisation « fonctionnelle » que tu vas en faire, stp ? Je m’intéresse à tous les projets voir ce que je pourrais faire

Salut,

Alors pour le moment c’était pour le défi, mais aussi pour un projet futur. Un poulailler connecté avec badge Rfid au pied des poules.

Mais aussi pour un système Reconnaissance facial + désactivation alarme rfid.

Voila

1 « J'aime »

Ok merci :slight_smile: