Smarte Türklingel mit dem ESP8266 und Fritz!Box selber bauen

Créez simplement et en toute autonomie une sonnette intelligente avec l’ESP8266 et Fritz!Box

Il est parfois difficile d’entendre la sonnette, que vous soyez à la cave, avec des écouteurs sur les oreilles ou avec la musique à plein volume. Est-ce qu’il ne serait pas mieux de trouver une solution simple et mobile parfaitement intégrée à l’infrastructure existante ? Découvrez comment utiliser le microcontrôleur ESP8266 et Fritz!Box pour faire de vos appareils mobiles DECT une sonnette mobile.

Les caractéristiques de l’ESP8266 en font une base idéale pour ce projet : il dispose d’une connexion au réseau Wi-Fi, consomme moins d’un mW en mode veille profond (Deep Sleep) et est simple à programmer. Par conséquent, il existe une large communauté de développeurs, garantissant une bonne assistance des outils et proposant de nombreuses ressources. Le module de développement que nous utilisons est programmable par câble micro-USB classique qui sert également à l’alimentation pendant le développement. Si vous souhaitez un circuit de sonnette particulièrement pratique, il existe des modules très compacts comme l’ESP-12F (DEBO ESP8266-12F). Un convertisseur USB-TTL-UART est donc encore nécessaire pour le développement.

Pour la programmation, nous utiliserons Arduino-IDE.

L’électronique

Le circuit de test

Pour le développement, outre l’ESP, nous avons besoin de câble. Pour simuler la sonnette, il suffit de relier Reset (RST) et Ground (GND) de l’ESP.

Le circuit de sonnette

Pour une utilisation sur la véritable sonnette de porte, seuls quelques composants sont requis : un optocoupleur isole les circuits du transformateur de sonnette et de l’ESP. Si l’optocoupleur est alimenté en courant, Reset (RST) et Ground (GND) de l’ESP sont connectés. Le microcontrôleur sort du mode veille profond et lance le programme de la sonnette.

Schéma électrique d'une sonnette connectée
Schéma électrique d’une sonnette connectée

Traduction du schéma :

KlingeltrafoTransformateur de sonnette
ResetReset
KlingelSonnette
GNDGND

Les transformateurs de sonnette classiques fournissent une tension alternative comprise entre huit et 24 V. La résistance R1 garantit que l’optocoupleur reçoit une tension de 1,2 V et doit donc être adaptée à la tension de la sonnette. La diode s’assure que la tension alternative de la sonnette se transforme en impulsions de tension continue pour l’optocoupleur. Tant que le programme fonctionne, peu importe que le Reset soit déclenché plusieurs fois.

Pour une alimentation sur batteries (3-3,6 V), le support de batterie doit être raccordé aux broches 3V et GND.

Valeurs R1 pour tensions de sonnette courantes :

Tension de sonnetteR1
8 V330 Ohm
12 V560 Ohm
24 V1,2 kOhm

Préparation de Fritz!Box

Pour que notre microcontrôleur puisse communiquer avec la Fritz!Box, nous devons avoir accès au protocole TR-064. Pour cela, dans le menu administrateur de la Fritz!Box (http//fritz.box), sous « Home » →  « Aperçu du réseau domestique » → « Réglages réseau », la case « Autoriser l’accès aux applications » doit être cochée.

Le logiciel

Installations Arduino IDE

La programmation de l’ESP8266 s’effectue via USB par notre circuit de développement qui permet parallèlement d’assurer l’alimentation pendant le développement.

Nous utiliserons Arduino-IDE (https://www.arduino.cc/en/Main/Software) pour compiler le logiciel et programmer le microcontrôleur.

Par défaut, dans Arduino-IDE, seuls des circuits de la gamme Arduino sont disponibles. Les développeurs ESP8266 préparent à cet effet les configurations de circuits correspondantes :

  1. Dans les réglages d’Arduino-IDE « Fichier -> Modifier les réglages par défaut », dans le champ « URL des gestionnaires de circuits complémentaires », saisir l’URL pour les circuits ESP8266 :
    http://arduino.esp8266.com/stable/package_esp8266com_index.json
  2. Installer la configuration du circuit avec les outils correspondants via « Gestionnaire de circuits », « Outils -> Circuit : Arduino/Genuino Uno ». Indiquer simplement ESP8266 comme répertoire cible et sélectionner la dernière version. Le téléchargement est d’env. 150 Mo, puisqu’un compilateur, des bibliothèques et des outils distincts sont requis pour les systèmes ESP8266.

Une fois l’installation terminée, les circuits ESP8266 peuvent également être sélectionnés, dans notre cas « ESP-12E Module ».

La documentation complète est disponible ici : https://arduino-esp8266.readthedocs.io/en/2.4.2/

Installation de la bibliothèque TR-064

La communication avec Fritz!Box s’effectue par le protocole TR-064. Une bibliothèque correspondante est disponible sous : https://github.com/Aypac/Arduino-TR-064-SOAP-Library

Pour l’installation, déplacer simplement le dossier « TR-064-SOAP-Library » dans le répertoire pour les bibliothèques Arduino dans le répertoire d’origine Arduino/Bibliothèques sous Linux ou Documents/Arduino/Bibliothèques sous Windows).

Le programme

Avec ce programme rapide, le circuit ESP8266 appelle chaque téléphone connecté pendant quatre secondes lorsque la sonnette est actionnée, et repasse ensuite en mode veille profond.

#include 
#include 
#include 
#include 
 
const char WIFI_SSID[] = "WLANNAME(SSID)";   // <-- modifier
const char WIFI_PASSWORD[] = "WLANPASSWORT"; // <-- modifier
const char USER[] = "admin";
const char PASSWORD[] = "PASSWORT"; // <-- modifier
const char FRITZBOX_IP[] = "192.168.178.1";
const int FRITZBOX_PORT = 49000;
 
TR064 tr064_connection(FRITZBOX_PORT, FRITZBOX_IP, USER, PASSWORD);
 
const IPAddress STATIC_IP(192, 168, 178, 230);
const IPAddress GATEWAY(192, 168, 178, 1);
const IPAddress SUBNET(255, 255, 255, 0);
const IPAddress DNS(GATEWAY);
 
const char DEVICE_NAME[] = "ESP-Klingel";
 
void setup() {
  WiFi.hostname(DEVICE_NAME);
  WiFi.config(STATIC_IP, SUBNET, GATEWAY, DNS);
  WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
  WiFi.mode(WIFI_STA);
 
  while (WiFi.status() != WL_CONNECTED) {
    delay(50);
  }
 
  tr064_connection.init();
 
  String tr064_service = "urn:dslforum-org:service:X_VoIP:1";
 
  // Le numéro de téléphone **9 est le numéro d’appel en diffusion de Fritzbox.
  String call_params[][2] = {{"NewX_AVM-DE_PhoneNumber", "**9"}};
  tr064_connection.action(tr064_service, "X_AVM-DE_DialNumber", call_params, 1);
 
  // Patienter quatre secondes avant de raccrocher
  delay(4000);
  tr064_connection.action(tr064_service, "X_AVM-DE_DialHangup");
 
  ESP.deepSleep(0);
}
 
void loop() {}

Dans un premier temps, les paramètres requis sont définis afin que l’ESP8266 puisse se connecter au réseau et que l’interface TR-064 puisse appeler. Le nom d’utilisateur et le mot de passe pour l’identifiant Fritz!Box sont nécessaires pour l’authentification à l’interface TR-064 (le nom d’utilisateur sur site « admin »). En outre, une instance du client TR-064 API est établie.

Pour que le microcontrôleur puisse passer la plupart du temps en mode veille profond permettant une économie d’énergie, il se connecte de nouveau au réseau à chaque appel. Pour maintenir un temps de réaction court entre l’actionnement de la sonnette et l’appel des téléphones, nous utilisons une adresse IP fixe et évitons une attribution dynamique plus lente par DHCP.

Les développeurs d’Arduino expérimentés remarquent tout de suite que l’ensemble de la logique du programme se trouvent dans setup() et non dans loop(). Cela s’explique par le fonctionnement de l’ESP8266 qui, en mode veille profond, coupe tous les composants en dehors de l’horloge temps réel (Real Time Clock), y compris la CPU. Ainsi, loop() ne peut pas être exécuté dans cet état. setup() est exécuté à chaque fois que le microcontrôleur est activé.

Dans un premier temps, la connexion au réseau WLAN est établie, puis la connexion à l’interface TR-064. Celle-ci permet d’abord d’appeler tous les appareils mobiles connectés puis après quatre secondes, nous raccrochons. Il est également possible, bien évidemment, de composer directement un numéro d’appareil mobile précis.

Pour charger le programme, sélectionnez un port. Cliquez sur « Outils » → « Port » → « COM3 » sous Windows ou « ttyUSB0 » sous Linux. Le programme est exécuté pour la première fois après le chargement et les téléphones sonnent rapidement. Pour exécuter le programme une nouvelle fois, court-circuiter simplement GND et RST sur le microcontrôleur.

Profitez bien !

Illustration : Adobe Stock, 161405299, terovesalainen

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *