console.error("The {{match}} helper is not available. The Match helper flag must be enabled in labs if you wish to use the {{match}} helper. See https://ghost.org/docs/themes/");> ESP8266 & MFRC522 ">
">
">

ESP8266 & MFRC522

ESP8266 & MFRC522
DYI ESP8266, RFID + mini station météo
Mon projet: lecteur de carte RFID (MFRC522) + mini station météo (température et humidité), sur un module ESP8266 (ESP8266 D1 Mini NodeMcu).

Plusieurs possibilités de choix de module ESP8266. Dans les modèles les plus récents on peut également opter pour un ESP32 une évolution des premiers ESP.

Fonctionnalités supplémentaires:

  • Utiliser un module DHT11 de mesure de température et d'humidité. A intervalle régulier l'ESP8266 sort de son hibernatiopn (deesleep), pour mesurer et envoyer la température par appel de webservice.
  • Mesure du Voltage à la sortie de la batterie, en utilisant un diviseur de pont afin de mesurer une tension supérieure, à la tension maximale mesurable en entrée des GPIO analogique A0. Mesurer la tension d'une batterie ou pile (Arduino, ESP8266)
  • Ajout d'un panneau solaire pour recharge
Montage

//TODO ajouter un schéma du montage

Description du montage
  1. DHT11, ajout de pullup qui permet de maintenir le module dans un état à faible consommation, celui-ci étant activé par une séquence à l'état bas Explication complète DHT11. Pour plus de précision on pourra utiliser un DHT22, un peu plus onéreux. Le composant consomme 0,5mA et 2,5mA pour les modes respectifs de veille et prise de mesure.
Programmation
  1. Mise à jour Arduino IDE, afin de prende en compte l'ESP8266.
    Pour cela il faut charger les bibliothèques:
    explication du montage

  2. Installer et mettre à jour la bibliothèque MFRC522, directement depuis les menus de l'IDE Arduino. Cela m'a permis de résoudre une erreur d'initialisation de la carte (Firmware 0xDE non reconnu).

Doc. utile MFRC522

Pour la prog via Arduino ide,

Pour moi, suite à la lecture de plusieurs documentations, je suis tombé sur la configuration suivante, pour

Code utilisé :

Configuration des PIN

Mode d'interruption à configurer afin de limiter la consommation de l'engin. Idéalement, le passage de la carte sur le lecteur réveil, le module et l'ESP8266.

Un complément du montage est de communiquer le numéro de la carte à un webservice distant, pour activer une action (inscription dans une log, ouverture d'une porte, désactiver une alarme). Cette communication est possible par le module Wifi intégré dans l'ESP8266.
Cela lui permet de se comporter en serveur par l'exposition d'un point d'accès, ou bien en client en se connectant à un réseau Wifi.

Mode DeepSleep

Double sortie de du deepSleep, soit par bouton, soit par timer. Pour cela le Pin Reset doit être connecté au PIN 16 (vérifier le numéro), et au bouton effectuant le passage au mode Low.

Une led indique le mode activation en cours.
ETeint: mode DeepSleep, alumé => mode en attente de badgeage, et clignotant, en cours de démarrage.
Pb en mode deepSleep l'esp8266, repasse les PIN dans un état intermédiaire, ie., allumé faiblement. Pour réduire la consommation ajout de deux résistances, le moins de la led avec une valeur de 27Kohms, et le pull-down de 2,7k ohms.
Remède: En fait pour éviter ce problème il suffit de brancher la led à un pin bénéficiant d'un mode pull-down sur l'ESP8266, com' par exemple le pin D8 (cf, Doc du mini Wemos

Questions en cours
  • Comment mesurer l'ampérage consommé en mode "deeSleep", sachant que les composants "RDC", ont une marge d'erreur d'environ 13mA, alors que je souhaite mesurer des microAmp? Plusieurs tentatives infructueuse avec mon ampèremétre.
  • Pourquoi la mesure de la tension de la batterie me retourne une valeur en dessous de celle mesurée directement aux bornes de la batterie, ou lorsque l'esp est alimenté par USB 5V. 3,8V au lieu de 4,1V réel? Cela est-il du à une chute de tension lors de la prise de mesure, ou des résistances mal choisies pour le pont diviseur de tension (1K Ohms actuellement). Plusieurs valeurs supérieurs de resistance semblaient encore plus pénalisantes, malgrès les conseils lus dans le forum de la doc du diviseur de tension en référence dans ce billet.
  • Comment utiliser des leds sur des ports GPIO sans qu'ils soient alumés en mode deepSleep. Lors des 1er tests, ils semblerait que les ports reviennent dans un état intermédiaire => les faiblement alimentées.
    -> Solution: utiliser un port ayant un état défini, en Pull-down. Voir les specs. de l'esp utilisé
  • Comment calculer les résistances à utiliser avec le bouton de reset. Ce dernier permettant de sortir de l'état deepSleep, pour badger par exemple.
Améliorations à prévoir

De plus afin de rendre le module indépendant, et permettre par exemple la création d'un boitier externe non connecté à un réseau électrique, il faut penser à différents points:

  • Voir si un régulateur à découpage DC-DC serait plus optimal pour le montage, sachant que le type de régulateur que j'utilise peut nécessiter une différence de potentiel non négligeable (ie au moins 1v volt de diff entre in et out pour fonctionner), et semble suivant la oc en lien moins performante que la DC-DC (>95% d'efficacité), la différence de tension étant transformée en chaleur et donc perdue.
  • Boitier final étanche, et permettant d'avoir un bouton souple pour la sortie du mode deepsleep, un port de connexion pour mettre à jour le soft et recharger si nécessaire
  • Plusieurs points de connexion Wifi en cas de panne de l'un d'eux
  • Crypter les échanges avec le serveur notamment pour les codes RFID, et voir même pour les id de connexions Wifi.
  • Meilleure gestion des Led et/ou bip sonore pour indiquer le mode de connexion.
  • permettre le déclenchement du module raspberry en enregistrant les messages de lecture RFID dans une file de message.

Domotique

Boitier externe, lecteur RFID & station météo

ESP32 Solar Weather Station

Liens

Documentation materiel