DIY

📬 MailSense32

MailSense32 est un détecteur de courrier intelligent basé sur ESP32, conçu pour fonctionner sur batterie pendant 1 à 3 ans sans intervention. L’appareil dort en deep sleep (consommation ~10µA) et se réveille uniquement lors d’une détection, envoie une notification, puis se rendort immédiatement.

Tout est configurable via un wizard WiFi embarqué, accessible depuis votre téléphone sans installer aucune application.

Fonctionnalités principales

  • Deep sleep ultra-basse consommation (~10µA au repos)
  • Wizard WiFi en mode Access Point — configuration depuis votre téléphone
  • 2 capteurs supportés : Reed Switch magnétique ou capteur PIR
  • 4 méthodes de notification : Email SMTP, Ntfy.sh, Home Assistant MQTT, Telegram
  • Monitoring batterie inclus dans chaque notification
  • Mode charge — notification automatique quand la batterie atteint 95%
  • Mode maintenance — désactive la détection pour l’installation et la maintenance
  • Bouton externe — accès rapide à la page de statut et au mode charge
  • Fuseau horaire configurable — heure d’été automatique
  • Message de notification personnalisable avec heure de détection
  • Anti-doublon configurable (délai entre deux notifications)
  • Page de statut accessible via l’IP locale après chaque réveil
  • Accès au wizard depuis la page de statut sans manipulation physique
  • Interface bilingue Français / Anglais

Matériel nécessaire

ComposantDétail
ESP32-DevKitC V4Avec antenne externe IPEX recommandée
Reed Switch MC-38Avec aimant (souvent inclus)
TP4056 ModuleAvec protection batterie intégrée
Batterie LiPo 3.7V1000mAh minimum recommandé
Résistances100kΩ + 220kΩ (pont diviseur batterie)

2. Installation du sketch avec Arduino IDE

2.1 Installer le support ESP32

Dans Arduino IDE, allez dans Fichier → Préférences et ajoutez l’URL suivante dans le champ « URL de gestionnaire de cartes supplémentaires » :

https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json

Puis allez dans Outils → Type de carte → Gestionnaire de cartes, recherchez esp32 et installez esp32 by Espressif Systems.

2.2 Installer les librairies

Via Outils → Gérer les bibliothèques, installez les trois librairies suivantes dans cet ordre :

  • ArduinoJson par Benoit Blanchon
  • PubSubClient par Nick O’Leary
  • ESP Mail Client par Mobizt

💡 Pour ESP Mail Client, vérifiez bien que l’auteur est Mobizt — il existe des librairies similaires avec des noms proches.

2.3 Sélectionner la carte

Dans Outils → Type de carte → ESP32 Arduino, sélectionnez ESP32 Dev Module.

2.4 Modifier le schéma de partition — IMPORTANT

⚠️ Cette étape est obligatoire. Sans ce changement, le sketch est trop volumineux et Arduino refusera de le compiler avec l’erreur : text section exceeds available space in board.

Dans le menu Outils → Partition Scheme, sélectionnez :

Huge APP (3MB No OTA / 1MB SPIFFS)

Ce réglage augmente l’espace disponible pour le code en sacrifiant la fonctionnalité OTA (mise à jour sans fil), qui n’est pas utilisée dans ce projet.

2.5 Flasher le firmware

MailSense32
egalistel-dev / GitHub
  1. Ouvrez MailSense32.ino dans Arduino IDE
  2. Sélectionnez le bon port COM dans Outils → Port
  3. Cliquez sur Upload (flèche →)

⚠️ Si l’upload se bloque sur « Connecting… » : maintenez le bouton BOOT de l’ESP32 enfoncé dès que ce message apparaît, et relâchez dès que l’upload démarre. C’est un comportement normal sur les ESP32 DevKitC.

2.6 Premier démarrage — Wizard de configuration

  1. Alimentez l’ESP32 (USB ou batterie)
  2. Sur votre téléphone, connectez-vous au réseau WiFi : MailSense32-Setup (mot de passe : mailsense32)
  3. Ouvrez votre navigateur sur : http://192.168.4.1
  4. Le wizard s’affiche automatiquement

💡 Pour accéder à nouveau au wizard après configuration : maintenez le bouton BOOT enfoncé pendant 3 secondes au démarrage, ou utilisez le bouton « Ouvrir le wizard » depuis la page de statut (192.168.x.x).

2.7 Schéma de câblage complet

Avant de fermer le boîtier, vérifiez chaque connexion à l’aide du tableau ci-dessous. Le montage nécessite seulement 7 connexions principales, sans soudure si vous utilisez une breadboard pour les tests.

⚠️ Vérifiez toujours la polarité avant de brancher la batterie. Un branchement inversé sur le TP4056 peut endommager la batterie ou le module.

Vue d’ensemble du circuit

  • Batterie LiPo → TP4056 (charge et protection)
  • TP4056 OUT → ESP32 VIN/GND (alimentation)
  • Reed Switch ou PIR → GPIO4 (détection)
  • BAT+ → Pont diviseur → GPIO35 (mesure batterie)

💡 Le schéma visuel est disponible dans l’article en ligne sur egamaker.be avec toutes les connexions illustrées.

Tableau de câblage complet

DeVersFilDescription
Batterie (+)TP4056 BAT+RougeAlimentation positive batterie
Batterie (−)TP4056 BAT−NoirAlimentation négative batterie
TP4056 OUT+ESP32 VINRougeTension régulée vers l’ESP32
TP4056 OUT−ESP32 GNDNoirGND commun
TP4056 BAT+R1 (100kΩ)OrangeDébut du pont diviseur
R1 / R2 jonctionESP32 GPIO35OrangeLecture tension batterie
R2 (220kΩ)ESP32 GNDNoirFin du pont diviseur vers GND

Capteur — choisissez-en un seul

Option A — Reed Switch (recommandé)

DeVersFilDescription
Reed Switch fil 1ESP32 GPIO4VioletSignal de détection
Reed Switch fil 2ESP32 GNDNoirRéférence GND

💡 Pas de polarité sur le Reed Switch — les deux fils sont identiques. La résistance de pull-up interne est activée en software. Aucune résistance externe nécessaire.

Option B — Capteur PIR

DeVersFilDescription
PIR VCCESP32 3.3V ou 5VRougeAlimentation du PIR
PIR GNDESP32 GNDNoirRéférence GND
PIR OUT/SignalESP32 GPIO4JauneSignal de détection mouvement

⚠️ Le PIR consomme du courant en permanence (~50-100µA), ce qui réduit légèrement l’autonomie sur batterie. Orientez le capteur vers l’intérieur de la boîte aux lettres pour éviter les faux positifs.

Pont diviseur — explication

Le pont diviseur est composé de deux résistances en série entre BAT+ et GND. La tension prélevée à la jonction des deux résistances est proportionnelle à la tension de la batterie, mais ramenée à un niveau compatible avec le GPIO de l’ESP32 (maximum 3.3V).

ComposantValeurConnexionRôle
R1100 kΩBAT+ → jonctionDiviseur supérieur
R2220 kΩJonction → GNDDiviseur inférieur
Jonction R1/R2→ GPIO35Point de mesure
Batterie LiPo 3.7V TP4056 Chargeur LiPo BAT+ BAT− OUT+ OUT− ESP32 DevKitC V4 VIN GND GPIO4 GPIO35 GND Reed Switch MC-38 + aimant PIR HC-SR501 Pont diviseur R1 100kΩ R2 220kΩ GND commun + OUT+ BAT+ mesure fil 1 fil 2 (GND) Choisissez UN seul capteur : Reed Switch — recommandé, zéro consommation au repos Légende Alimentation (+) Alimentation (OUT+) GND Mesure batterie Capteur (optionnel)

💡 Avec ce rapport R1/R2, une batterie pleine (4.2V) donne 2.89V sur GPIO35, et une batterie vide (3.0V) donne 2.06V — toujours en dessous du maximum de 3.3V du GPIO.

Points de vérification avant mise en service

  • Batterie branchée avec la bonne polarité sur BAT+ et BAT−
  • LED rouge du TP4056 allumée = charge en cours
  • LED bleue du TP4056 allumée = charge complète
  • Retirer l’aimant du reed switch → notification reçue
  • ESP32 s’allume et affiche le wizard au premier démarrage
  • Niveau batterie > 0% dans la page de statut (non branché USB)

2.8 Bouton externe (optionnel)

MailSense32 supporte un bouton poussoir physique accessible depuis l’extérieur du boîtier. Ce bouton permet de réveiller l’ESP32 et d’accéder à la page de statut sans avoir à manipuler le Reed Switch ou ouvrir le boîtier.

Il s’agit d’un simple tactile switch 6x6mm — le même type que le bouton BOOT déjà présent sur la carte ESP32.

Branchement

PatteConnexion
Patte 1 ou 2GPIO12
Patte 3 ou 4GND

💡 Le bouton possède 4 pattes, mais ce sont 2 paires connectées ensemble. Prenez toujours deux pattes en diagonale — peu importe le sens. Pas de polarité à respecter.

Fonctionnement

ActionRésultat
Appui court (< 2 sec)Réveille l’ESP32 + ouvre la page de statut 3 minutes
Appui long (3 secondes)Active le mode charge directement

3. Capteurs de détection

3.1 Reed Switch (interrupteur magnétique)

Le Reed Switch est la solution recommandée pour une boîte aux lettres. C’est un interrupteur qui se ferme en présence d’un aimant et s’ouvre quand l’aimant s’éloigne.

Principe de fonctionnement

  • Porte fermée → aimant collé contre le switch → circuit fermé → GPIO4 à GND → ESP32 dort
  • Porte ouverte → aimant s’éloigne → circuit ouvert → GPIO4 passe à HIGH → ESP32 se réveille et envoie la notification

Câblage

Fil Reed SwitchConnexion ESP32
Fil 1 (peu importe lequel)GPIO4
Fil 2GND

💡 Pas de polarité sur un Reed Switch — les deux fils sont identiques. La résistance de pull-up est activée en software, aucune résistance externe n’est nécessaire.

Placement de l’aimant

Collez l’aimant sur le rabat ou la porte de la boîte aux lettres, et le Reed Switch en face sur le bord fixe. Quand la porte est fermée, l’aimant doit être à moins de 10mm du switch.

Avantages du Reed Switch

  • Consommation zéro au repos (aucun courant ne traverse le switch quand il est fermé)
  • Fiabilité maximale — pas de faux positifs
  • Coût minimal (~1€ aimant inclus)
  • Durée de vie très longue (millions de cycles)

3.2 Capteur PIR (détection de mouvement)

Le capteur PIR (Passive Infrared) détecte les mouvements par rayonnement infrarouge. Il peut être utilisé à la place du Reed Switch si vous ne souhaitez pas coller un aimant sur la porte.

Principe de fonctionnement

Le capteur PIR émet un signal HIGH sur sa sortie lors d’une détection de mouvement. Dans MailSense32, ce signal réveille l’ESP32 via l’interruption EXT0 sur GPIO4.

Câblage

Fil PIRConnexion ESP32
VCC (rouge)3.3V ou 5V selon le module
GND (noir)GND
OUT / Signal (jaune)GPIO4

⚠️ Contrairement au Reed Switch, le PIR consomme du courant en permanence (typiquement 50-100µA). L’autonomie sur batterie sera légèrement réduite.

Conseils d’installation

  • Orientez le PIR vers l’intérieur de la boîte aux lettres pour éviter les faux positifs
  • Réglez la sensibilité au minimum pour réduire la portée de détection
  • Augmentez le délai anti-doublon à 10-15 minutes pour éviter les déclenchements multiples
Ce projet vous a aidé ?
Soutenez le développement open source
Offrir un café

4. Méthodes de notification

MailSense32 supporte 4 méthodes de notification, configurables depuis le wizard. Chaque notification inclut automatiquement l’heure de détection et le niveau de batterie.

4.1 Email SMTP

La méthode la plus universelle — tout le monde possède une adresse email. Compatible avec Gmail, Outlook, et tout serveur SMTP standard.

Configuration avec Gmail

Gmail nécessite un « App Password » (mot de passe d’application) à la place de votre mot de passe habituel. Voici comment le créer :

  1. Activez la validation en 2 étapes sur votre compte Google : myaccount.google.com/signinoptions/two-step-verification
  2. Accédez à la page App Passwords : myaccount.google.com/apppasswords
  3. Donnez un nom (ex : MailSense32) et cliquez sur Créer
  4. Google génère un mot de passe de 16 caractères — copiez-le immédiatement (il ne s’affiche qu’une seule fois)

Paramètres à entrer dans le wizard

ChampValeur
Serveur SMTPsmtp.gmail.com
Port587
Utilisateurvotre.adresse@gmail.com
App PasswordLes 16 caractères sans espaces
Destinatairevotre.adresse@gmail.com (ou autre)

⚠️ Collez les 16 caractères du App Password sans espaces. N’utilisez jamais votre mot de passe Gmail habituel.

Exemple de notification reçue

4.2 Ntfy.sh

Ntfy.sh est un service de push notification open source, gratuit et minimaliste. Son principe est radicalement simple : envoyer une notification sur votre téléphone se résume à une seule requête HTTP vers une URL.

Pas de compte obligatoire, pas de SDK à installer, pas de configuration complexe. L’ESP32 envoie un message HTTP en une ligne de code, et votre téléphone reçoit la notification instantanément via l’application Ntfy.

4.2.1 Comment ça fonctionne

Le système repose sur le concept de « topic » — un canal de communication identifié par un nom unique dans l’URL :

https://ntfy.sh/mon-topic-unique  ←  l’ESP32 publie ici

Application Ntfy sur téléphone    ←  abonnée au même topic

Quand l’ESP32 envoie une requête HTTP POST vers cette URL, tous les appareils abonnés à ce topic reçoivent la notification immédiatement.

4.2.2 Les deux options disponibles

Ntfy.sh publicSelf-hosted (NAS)
Serveurntfy.sh (cloud)Votre Synology
ConfidentialitéTopic public*100% privé
CoûtGratuitGratuit
Compte requisNonNon
Accès extérieurOui (internet)Réseau local uniquement**
InstallationAucuneDocker sur NAS (~15 min)
Recommandé pourTest rapide / débutantUsage quotidien / NAS dispo

💡 * Sur ntfy.sh public, n’importe qui connaissant votre topic peut s’y abonner. Choisissez un nom suffisamment aléatoire pour éviter les collisions (ex: mailsense-fab-x7k2).

💡 ** Sans ouverture de port sur votre routeur, ntfy self-hosted ne sera accessible que depuis votre réseau WiFi local — ce qui est parfait pour MailSense32 qui est lui-même sur votre réseau local.

4.2.3 Option A — Ntfy.sh public (sans installation)

La solution la plus rapide à mettre en place. Aucun serveur, aucune installation — tout fonctionne via le service en ligne ntfy.sh.

Installer l’application sur votre téléphone

  • Android : Google Play Store → rechercher « Ntfy »
  • iOS : App Store → rechercher « Ntfy »

Choisir un nom de topic

Le topic est le nom de votre canal de notification. Choisissez un nom unique et suffisamment aléatoire :

💡 Exemples : mailsense-fab-2024, boite-aux-lettres-x7k2, ms32-egalistel. Évitez des noms trop génériques comme « courrier » ou « mailbox ».

S’abonner depuis l’application

  1. Ouvrez l’application Ntfy sur votre téléphone
  2. Appuyez sur le bouton + (Ajouter un abonnement)
  3. Entrez le nom de votre topic (ex: mailsense-fab-2024)
  4. Laissez le serveur sur ntfy.sh
  5. Appuyez sur Abonner.

Configurer dans le wizard MailSense32

ChampValeur
MéthodeNtfy.sh
Serveur Ntfyhttps://ntfy.sh
Topicvotre-topic-unique
Token(laisser vide)

💡 Cliquez sur « Envoyer une notification test » dans le wizard pour vérifier que tout fonctionne avant de fermer le boîtier.

Exemple de notification reçue

4.2.4 Option B — Self-hosted sur NAS Synology

Cette option installe votre propre serveur Ntfy directement sur votre NAS Synology via Docker. Toutes vos notifications restent sur votre réseau local, sans aucune donnée envoyée vers un service externe.

⚠️ Cette option nécessite que votre ESP32 et votre téléphone soient connectés au même réseau WiFi local. Sans ouverture de port sur votre routeur, les notifications ne fonctionneront pas depuis l’extérieur de votre domicile.

Tutoriel d’installation recommandé

Pour l’installation de Ntfy sur Synology, nous recommandons de suivre le tutoriel détaillé de Marius Hosting, qui couvre l’installation pas à pas via Container Manager ou Portainer :

mariushosting.com — How to Install Ntfy on Your Synology NAS

4.2.5 Résumé — Quel mode choisir ?

Ntfy.sh publicSelf-hosted
InstallationAucune~15 min via tutoriel
ConfidentialitéMoyenneMaximale
DisponibilitéInternet requisWiFi local suffit
MaintenanceAucuneMises à jour Docker
Idéal si…Test rapide ou débutantNAS disponible + vie privée

💡 Pour MailSense32 dans une boîte aux lettres d’immeuble, le self-hosted sur NAS est idéal : l’ESP32 et le NAS sont sur le même réseau WiFi, aucune connexion Internet n’est nécessaire pour les notifications.

4.3 Home Assistant MQTT

Home Assistant est une plateforme domotique open source qui permet de centraliser et d’automatiser tous les appareils connectés de votre domicile. L’intégration de MailSense32 avec Home Assistant se fait via le protocole MQTT, un protocole de messagerie léger et rapide conçu pour les appareils IoT.

4.3.1 Les deux acteurs : MQTT et Home Assistant

Le protocole MQTT

MQTT fonctionne sur un modèle « publish / subscribe » (publier / s’abonner) :

  • L’ESP32 (MailSense32) publie un message sur un « topic » MQTT quand il détecte du courrier
  • Home Assistant est abonné à ce topic et reçoit le message instantanément
  • Un broker MQTT (serveur intermédiaire) gère la distribution des messages

💡 Le broker MQTT le plus utilisé avec Home Assistant est Mosquitto, disponible directement comme add-on officiel dans Home Assistant.

Home Assistant

Home Assistant est la plateforme domotique qui reçoit les données de MailSense32, les affiche dans un tableau de bord, et peut déclencher des automatisations (notification sur téléphone, allumage d’une lumière, envoi d’un email, etc.).

⚠️ Cette option s’adresse aux utilisateurs ayant déjà une installation Home Assistant fonctionnelle. Si vous débutez en domotique, les options Email ou Ntfy.sh sont plus simples à mettre en place.

4.3.2 Ce que MailSense32 envoie

À chaque détection de courrier, MailSense32 publie un message JSON sur le topic MQTT configuré :

{
  "state":   "triggered",
  "message": "📬 Vous avez du courrier !",
  "time":    "15/03/2026 09:42",
  "battery": 87,
  "test":    false
}

💡 Le champ « test » est true uniquement lors d’un envoi depuis le bouton test du wizard — pratique pour distinguer les vrais événements des tests dans Home Assistant.

4.3.3 Prérequis

  • Une instance Home Assistant installée et fonctionnelle
  • L’add-on Mosquitto Broker installé dans Home Assistant
  • L’intégration MQTT activée dans Home Assistant
  • Connaître l’adresse IP de votre serveur Home Assistant sur le réseau local

4.3.4 Ressources pour l’installation

Si vous n’avez pas encore Home Assistant ou Mosquitto, voici les ressources officielles recommandées :

Installation Home Assistant : home-assistant.io/installation

Add-on Mosquitto Broker : home-assistant.io/docs/mqtt/broker

Intégration MQTT dans HA : home-assistant.io/integrations/mqtt

4.3.5 Configuration dans le wizard MailSense32

ChampValeur
MéthodeHome Assistant MQTT
Broker MQTT192.168.x.x  (IP de votre serveur HA)
Port1883  (port MQTT par défaut)
UtilisateurOptionnel — identifiant MQTT si configuré
Mot de passeOptionnel — mot de passe MQTT si configuré
Topic MQTTmailsense32/mail  (modifiable)

💡 Le port 1883 est le port MQTT standard non chiffré. Si votre broker utilise TLS (port 8883), une modification du code source sera nécessaire — cette configuration avancée sort du cadre de ce guide.

4.3.6 Configurer le sensor dans Home Assistant

Une fois MailSense32 configuré, ajoutez ce sensor dans votre fichier configuration.yaml de Home Assistant pour recevoir et exploiter les données :

mqtt:

  sensor:

    – name: « MailSense32 »

      state_topic: « mailsense32/mail »

      value_template: « {{ value_json.state }} »

      json_attributes_topic: « mailsense32/mail »

      json_attributes_template: « {{ value_json | tojson }} »

💡 Après modification de configuration.yaml, redémarrez Home Assistant pour appliquer les changements (Paramètres → Système → Redémarrer).

4.3.7 Créer une automatisation

L’intérêt principal de Home Assistant est de pouvoir déclencher des actions automatiques. Exemple d’automatisation pour recevoir une notification mobile quand du courrier arrive :

automation:

  - alias: "Courrier reçu"

    trigger:

      - platform: mqtt

        topic: mailsense32/mail

    condition:

      - condition: template

        value_template: "{{ trigger.payload_json.test == false }}"

    action:

      - service: notify.mobile_app

        data:

          title: "📬 Courrier !"

          message: "{{ trigger.payload_json.message }}"

💡 La condition « test == false » évite de déclencher l’automatisation lors des envois de test depuis le wizard MailSense32.

4.3.8 Points importants

  • Réseau local uniquement : comme pour Ntfy self-hosted, sans ouverture de port, MailSense32 ne peut contacter Home Assistant que depuis le réseau WiFi local.
  • IP fixe recommandée : configurez une adresse IP fixe pour votre serveur Home Assistant pour éviter que l’adresse change après un redémarrage.
  • Authentification MQTT : si votre broker Mosquitto utilise un identifiant et mot de passe, renseignez-les dans le wizard. Sinon, laissez ces champs vides.
  • Topic personnalisable : vous pouvez modifier le topic mailsense32/mail selon votre organisation dans Home Assistant.

4.4 Telegram

Telegram est une application de messagerie gratuite disponible sur Android, iOS, Windows, Mac et Linux. Elle permet de créer des « bots » — des comptes automatisés capables d’envoyer des messages à la demande.

MailSense32 utilise l’API officielle de Telegram pour envoyer une notification directement dans votre conversation avec le bot, sur tous vos appareils connectés à Telegram simultanément.

4.4.1 Avantages de Telegram

  • Gratuit et sans publicité
  • Fonctionne depuis n’importe où — connexion Internet requise, pas de réseau local nécessaire
  • Notification instantanée sur tous vos appareils (téléphone, PC, tablette)
  • Aucun serveur à installer — tout passe par l’infrastructure Telegram
  • API simple — une seule requête HTTP depuis l’ESP32

4.4.2 Créer un bot Telegram

La création d’un bot Telegram se fait entièrement depuis l’application, en quelques minutes, via le bot officiel BotFather.

Étape 1 — Contacter BotFather

  1. Ouvrez Telegram sur votre téléphone ou PC
  2. Dans la barre de recherche, tapez @BotFather
  3. Sélectionnez le compte officiel (avec la coche bleue de vérification)
  4. Envoyez la commande /newbot

Étape 2 — Configurer le bot

  1. BotFather vous demande un nom d’affichage pour votre bot — entrez ce que vous souhaitez (ex: MailSense32 Home)
  2. Puis un nom d’utilisateur unique — il doit se terminer par bot (ex: mailsense32_fab_bot)
  3. BotFather vous répond avec le Token de votre bot, sous la forme :
123456789:AAxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

⚠️ Copiez et conservez ce token précieusement. Il donne le contrôle total de votre bot. Ne le partagez jamais publiquement.

4.4.3 Récupérer votre Chat ID

Le Chat ID est l’identifiant unique de votre conversation avec le bot. MailSense32 en a besoin pour savoir à qui envoyer la notification.

Étape 1 — Démarrer une conversation avec votre bot

  1. Dans Telegram, recherchez le nom d’utilisateur de votre bot (ex: @mailsense32_fab_bot)
  2. Cliquez sur Démarrer ou envoyez n’importe quel message à votre bot

Étape 2 — Récupérer le Chat ID via l’API

Ouvrez un navigateur web et accédez à l’URL suivante en remplaçant TOKEN par votre token :

https://api.telegram.org/bot[TOKEN]/getUpdates

Exemple concret :

https://api.telegram.org/bot123456789:AAxxxx/getUpdates

Vous obtenez une réponse JSON. Repérez le champ « id » dans la section « chat » :

{"ok":true,"result":[{
  "message":{
    "chat":{
      "id": 987654321,   ←  voici votre Chat ID
      "first_name": "Fab",
    }
  }
}]}

💡 Si la réponse est vide (result: []), envoyez d’abord un message à votre bot depuis Telegram, puis rechargez l’URL.

4.4.4 Configurer dans le wizard MailSense32

ChampValeur
MéthodeTelegram
Bot Token123456789:AAxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Chat ID987654321

💡 Cliquez sur « Envoyer une notification test » dans le wizard pour vérifier que le bot vous envoie bien un message avant de fermer le boîtier.

4.4.5 Exemple de notification reçue

Le message reçu dans Telegram ressemble à ceci :

4.4.6 Partager les notifications avec plusieurs personnes

Par défaut, seul votre Chat ID reçoit les notifications. Si vous souhaitez que d’autres personnes (conjoint, colocataire) reçoivent également les notifications, deux options sont possibles :

Option A — Groupe Telegram

  1. Créez un groupe Telegram avec les personnes concernées
  2. Ajoutez votre bot au groupe
  3. Récupérez le Chat ID du groupe via getUpdates (il sera négatif, ex: -987654321)
  4. Entrez ce Chat ID négatif dans le wizard

Option B — Channel Telegram

  1. Créez un channel Telegram (public ou privé)
  2. Ajoutez votre bot comme administrateur
  3. Utilisez le nom du channel comme Chat ID (ex: @mon_channel_courrier)

4.4.7 Points importants

  • Connexion Internet requise : contrairement à Ntfy self-hosted ou Home Assistant, Telegram nécessite que l’ESP32 puisse accéder à Internet lors de chaque détection.
  • Token à protéger : ne publiez jamais votre token bot dans un article ou sur GitHub — il donne le contrôle total du bot.
  • Bot inactif : Telegram peut désactiver un bot qui n’est pas utilisé pendant longtemps. Envoyez un test occasionnel pour le maintenir actif.
  • Gratuit sans limite : l’API Telegram bot est entièrement gratuite, sans limite de messages pour un usage personnel.
Ce projet vous a aidé ?
Soutenez le développement open source
Offrir un café

5. Page de statut

Après chaque réveil, l’ESP32 reste actif 3 minutes avec un serveur web accessible depuis votre réseau local. Ouvrez l’adresse IP affichée dans le moniteur série (ex : 192.168.0.198) dans votre navigateur.

Informations affichées

  • Niveau de batterie en temps réel
  • Force du signal WiFi (RSSI en dBm)
  • Heure de la dernière détection
  • Nombre total de déclenchements
  • Statut de la dernière notification (✅ Envoyée / ❌ Échec)
  • Configuration active (réseau, capteur, méthode de notification)
  • Activer le mode charge : surveille la batterie toutes les 5 minutes et envoie une notification quand elle atteint 95%
  • 🔴 Détection désactivée / 🟢 Détection active — active ou désactive les notifications sans manipulation physique

Actions disponibles

  • Ouvrir le wizard : accès direct à la configuration sans manipulation physique
  • Envoyer une notification test : vérifier que la notification fonctionne
  • 🔴 / 🟢 Détection : activer ou désactiver le mode maintenance
  • Activer le mode charge : surveille la batterie et notifie à 95%
  • Mettre en veille : forcer le retour en deep sleep immédiatement

💡 La page reste active tant qu’elle est ouverte dans le navigateur — le timer de veille se réinitialise automatiquement toutes les 25 secondes. Dès que vous fermez la page, le compteur reprend normalement jusqu’à la mise en veille.

5.1 Comment activer le mode charge

  1. Branchez le câble USB de charge sur le port micro-USB du TP4056
  2. La LED rouge du TP4056 s’allume — la charge est en cours
  3. Réveillez l’ESP32 en éloignant brièvement l’aimant du Reed Switch, en appuyant sur le bouton externe, ou en appuyant sur le bouton BOOT
  4. Connectez-vous à votre WiFi et ouvrez : http://192.168.x.x (IP de l’ESP32)
  5. Dans la section Actions, cliquez sur « 🔋 Activer le mode charge »
  6. Le bouton passe à « ✅ Mode charge actif » — c’est confirmé

✅ L’ESP32 entre maintenant en veille périodique. Vous pouvez quitter la page et vaquer à vos occupations.

5.2 La notification de fin de charge

Quand la batterie atteint 95%, vous recevez une notification via la méthode configurée dans le wizard :

🔋 Batterie chargée !

Vous pouvez retirer le chargeur.

À réception de cette notification, débranchez simplement le câble USB. Le mode charge se désactive automatiquement et MailSense32 retourne en mode normal — prêt à détecter le prochain courrier.

5.3 Points importants

  • Disponibilité de la page de statut : l’ESP32 reste accessible 3 minutes après chaque réveil. Activez le mode charge dans ce délai après avoir réveillé l’appareil.
  • Consommation en mode charge : l’ESP32 se réveille toutes les 5 minutes pendant quelques secondes — la consommation reste très faible sur la durée de charge.
  • Interruption possible : si vous avez besoin de l’ESP32 en mode normal avant la fin de charge, réveillez-le et accédez à la page de statut — le mode charge se désactivera au prochain cycle.
  • Notification unique : la notification de fin de charge n’est envoyée qu’une seule fois. Si vous ne la recevez pas (WiFi coupé momentanément), vérifiez le niveau de batterie sur la page de statut.

5.4 Mode maintenance

Le mode maintenance permet de désactiver temporairement toute détection de courrier, sans débrancher quoi que ce soit. C’est la première chose à faire lors de l’installation du boîtier — et la dernière avant de le refermer.

Bouton affichéÉtatComportement
🔴 Détection désactivéePar défaut (premier démarrage)Aucune notification — Reed Switch ignoré
🟢 Détection activeAprès activation manuelleFonctionnement normal

Un clic sur le bouton bascule entre les deux états. Le changement est immédiat et survit au deep sleep — l’ESP32 se souvient de l’état même après une mise en veille.

Workflow d’installation recommandé

  1. Flashez le code et configurez le wizard
  2. Installez le boîtier dans la boîte aux lettres
  3. Ouvrez la page de statut — le bouton affiche 🔴 Détection désactivée
  4. Cliquez sur le bouton — il passe à 🟢 Détection active
  5. Testez en éloignant l’aimant — vous devez recevoir une notification
  6. Fermez le boîtier — le projet est opérationnel

✅ Une fois la détection activée, MailSense32 fonctionne de manière totalement autonome.

5.5 Conclusion — Page de statut

La page de statut est un outil précieux, particulièrement en phase de test et d’installation. Elle vous donne une visibilité complète sur l’état de votre MailSense32 sans avoir à brancher un câble USB ni ouvrir le moniteur série d’Arduino.

Une fois votre boîtier fermé et installé dans la boîte aux lettres, cette page reste votre interface de contrôle principale. Elle vous permet de vérifier d’un coup d’œil que tout fonctionne, de modifier la configuration si nécessaire, et de tester une notification sans attendre le facteur.

💡 Pensez à noter l’adresse IP de votre ESP32 (visible dans le moniteur série au premier démarrage). Vous pouvez également configurer une IP fixe dans votre routeur pour que l’adresse ne change jamais.

6. Conclusion

MailSense32 est un projet maker complet qui combine plusieurs aspects essentiels de l’électronique embarquée : la gestion de l’énergie avec le deep sleep, la connectivité WiFi, les interfaces web embarquées et la notification multi-plateforme.

Conçu pour fonctionner sur batterie pendant 1 à 3 ans sans intervention, il s’adapte à tous les environnements grâce à son wizard de configuration accessible depuis n’importe quel téléphone. Que vous soyez dans un appartement, une maison ou un immeuble avec des boîtes aux lettres communes, MailSense32 s’installe discrètement et fonctionne de manière totalement autonome.

Le code source complet est disponible sur GitHub sous licence MIT — vous êtes libre de le modifier, l’améliorer et le partager. Si ce projet vous a été utile, n’hésitez pas à laisser une étoile sur le dépôt et à partager l’article autour de vous.

MailSense32
egalistel-dev / GitHub

Quelle méthode de notification choisir ?

MailSense32 supporte 4 méthodes de notification différentes, chacune avec ses avantages et contraintes. Le tableau ci-dessous vous aide à choisir celle qui correspond le mieux à votre situation.

La méthode se configure entièrement depuis le wizard — aucune recompilation du code n’est nécessaire. Vous pouvez en changer à tout moment en accédant au wizard via l’IP locale de l’ESP32 ou en maintenant le bouton BOOT 3 secondes.

💡 Vous hésitez ? Commencez par Email Gmail — c’est la méthode la plus simple et la plus universelle. Vous pourrez toujours migrer vers Ntfy self-hosted ou Telegram une fois le projet en place.

Ma préférence
📧
Email SMTP
Gmail, Outlook ou tout serveur SMTP
DifficultéFacile
Mise en place~5 min
Compte requisGmail
Internet requisOui
Serveur à installerNon
Confidentialité
Idéal pour débuter — tout le monde a un email
📣
Ntfy.sh public
Service push gratuit sans compte
DifficultéTrès facile
Mise en place~2 min
Compte requisNon
Internet requisOui
Serveur à installerNon
Confidentialité
Le plus simple — topic public, choisir un nom aléatoire
Recommandé
📣
Ntfy self-hosted
Instance privée sur NAS Synology
DifficultéMoyen
Mise en place~15 min
Compte requisNon
Internet requisNon
Serveur à installerDocker NAS
Confidentialité
Idéal si vous avez un NAS — 100% local et privé
✈️
Telegram
Bot Telegram via API officielle
DifficultéFacile
Mise en place~10 min
Compte requisTelegram
Internet requisOui
Serveur à installerNon
Confidentialité
Notification sur tous vos appareils simultanément
🏠
Home Assistant
Intégration domotique via MQTT
DifficultéAvancé
Mise en place~30 min+
Compte requisNon
Internet requisNon
Serveur à installerHA + MQTT
Confidentialité
Pour utilisateurs domotique — automatisations avancées
Ce projet vous a été utile ?
MailSense32 est un projet open source gratuit.
Un café aide à financer les prochains projets !
Offrir un café
egalistelw — egamaker.be