IoT simple et efficace avec ESPHome

Introduction

Contexte

Mon entrée dans le monde des objets connectés sait faite par l’achat d’ampoules Philips HUE (de son bridge et de la télécommande variateur). Mon excuse pour cet achat est que dans ma chambre, l’interrupteur est à l’entrée de ma chambre et mon lit de l’autre côté (avec mon bureau au milieu). L’idée était de pouvoir éteindre ma lumière depuis mon lit afin d’arrêter de me casser la gueule une fois plonger dans le noir.

J’ai ensuite décidé de me lancer dans la domotique avec Home Assistant. Maintenant que j’ai cette solution, je cherche à y intégrer des solutions pour me simplifier la vie (où me la compliqué gentiment). J’ai déjà dessus un visuel sur l’estimation du temps de trajet aller-retour au travail de Waze ainsi que les horaires du tramway de l’arrêt en bas de chez moi. J’y ai bien sûr intégré mes deux ampoules Philips HUE (d’ailleurs, à cause de sa, je ne me sert plus trop de la télécommande…).

Cette première entrée dans les objets connectés m’a permis d’avoir moins d’appréhension sur le sujet. Maintenant que je commence à me débrouiller (je comprends même ce que fait !), je rédige des articles afin de vous montrer par l’exemple que les objets connectés sont simples à mettre en place (« From SCRAMbled to simPLE ! ») et pour peu cher, grâce à la communauté et bien sûr aux sites d’achats chinois.

Qui dit projet IoT DIY (Do It Yourself), dit codage et soudage. Je vais vous montrer par ce tutoriel que cela peut devenir simplement de la configuration et du soudage (malheureusement, on ne peut pas y échapper). Pour cela, on va découvrir les modules ESP et ESPHome.

Protocoles de l’IoT

Les protocoles de communication standard de l’Internet des Objets sont nombreux. Les plus connus sont surement le Zigbee (utiliser par Philips HUE par exemple) et le Z-Wave (utiliser par les produits Fibaro). Le problème de ces solutions est qu’ils ont besoin d’un terminal de connexion qu’on appelle communément « bridge » (ou « pont ») ou « contrôleur ». Ces éléments coutent chères (40 € minimum) et en plus de cela, il faut acheter l’élément de contrôle (prise connectée…).

Ceux que je n’ai pas encore cités sont les plus intéressant (au niveau tarifs) sont le Bluetooth et le Wi-Fi car ils équipes bons nombres de nos appareils d’aujourd’hui. On va s’attarder sur le Wi-Fi car c’est la solution la plus accessible : on a tous un réseau Wi-Fi (via notre Box) chez soit.

Solutions

Matériels

Modules ESP

Les modules ESP sont une gamme de circuit intégré de microcontrôleur doté d’une connexion Wi-Fi (on parle alors de « SoC Wi-Fi »). Les plus connus sont l’ESP8266 et son successeur l’ESP32.

ESP8266 dans sa version ESP01

Ces modules sont vraiment pas chère du tout (de l’ordre de 2€). Ils sont fabriqués par la société chinoise Espressif.

Plateformes sous ESP

Il existe des plateformes basé sur les ESP qui permettent assez rapidement de développer un objet connecté. Les plus connus sont par exemple le NodeMCU ou encore ceux de Wemos. Ils ont l’avantage d’être programmable avec l’IDE Arduino ou plus simplement avec ESPHome (on en parle plus bas).

NodeMCU

Équipements sous ESP

Devant les facilités d’utilisation des ESP, de nombreux fabricants commercialise des objets connectées à base d’ESP. L’intérêt pour nous est tous trouvé : on va pouvoir les hacker ! Pourquoi me direz vous ? Pour les raisons suivantes :

  • Ne pas installé une énième application de contrôle sur votre smartphone. Vous n’aurez donc pas à créer de compte supplémentaire sur une application inconnu.
  • Vous n’enverrez pas vos informations d’utilisation dans le « cloud » !
  • Vous allez pouvoir exploités des choses non prévu par le fabricant !
  • Vous allez pouvoir l’intégrer dans un système domotique !
  • Vous allez bidouiller !

Alors convaincu ?

Les équipements à base d’ESP que j’ai découvert sont par exemple ceux de la marque Sonoff et plus particulièrement le Sonoff Basic :

Sonoff Basic

Cet élément permet de l’allumage et l’extinction d’un équipement comme une lampe ou un ventilateur. Oui, j’ai finalement trouvé une solution cheap de contrôle de mon ventilateur !

On va donc voir dans la partie d’application par l’exemple, comment on va reprendre le contrôle de cet objet (soudure et flashage). On verra en plus comment l’intégrer dans Home Assistant (optionnel).

Logiciel

Pour la partie programmation (pour les modules ou les plateformes) ou reprogrammation (pour les équipements), on peut coder ces éléments avec l’IDE Arduino. Le problème de cela, c’est que soit vous allez copier-coller un code en croisant les doigts pour que sa fonctionne ou vous n’allez pas faire de bidouillage du tout !

Pour ma part, je me débrouille en programmation mais je n’ai pas encore daigné apprendre le Python. J’ai donc cherché une solution accessible et compréhensible de programmation et je suis tombé sur des choses comme Tasmota ou ESPHome.

ESPHome est la solution que j’utilise car elle se base sur de la configuration en YAML comme Home Assistant. Ce langage fait que la programmation d’un objet ressemble plus à de la configuration qu’autre chose.

Voici un exemple de « code » YAML d’ESPHome pour récupérer la force du signal Wi-Fi d’un objet connecté en Wi-Fi :

sensor:
  - platform: wifi_signal
    name: "Signal Wi-Fi"
    update_interval: 60s

Vous l’aurez déduit par vous même, name correspond au titre de notre valeur et update_interval à l’intervalle où l’information est transmise. Plutôt accessible non ?

De ce fait, je vais axer mes différents projets IoT autour d’ESPHome.

Application par l’exemple

La suite de cet article constitue un tutoriel expliquant comment j’ai fait pour rendre pilotable mon ventilateur à distance. Pour cela, j’ai utilisé les éléments suivants :

  • Sonoff Basic
  • PC Linux (une machine virtuel ou un RPi sous Rasbian fera l’affaire)
  • Mon PC Windows (mais tous peut-être fait sous le Linux)
  • Convertisseur USB – TTL (pour reprogrammer le Sonoff Basic)
  • Câbles type « jumper »
  • Soudeur (pour pouvoir interfacer le Sonoff avec le convertisseur)
  • Tournevis (pour tourner les vis ^^)

Bricolage

On va donc préparer notre équipement pour être flasher, on va donc souder des pins pour s’y connecter avec notre convertisseur.

Certaines personnes ne soude pas des pins mais enfonce directement les pin des câble du convertisseur directement sur la carte. Le problème de cette pratique et que si le contact se coupe lors de l’upload du firmware, vous pouvez briqué votre carte !

On va donc ouvrir le boitier pour sortir la carte. Le boiter est simplement clipsé. Pour l’ouvrir, vous pouvez pousser la carte en pressant un des deux borniers avec un tournevis :

Points de pression pour ouvrir le boitier

Vous y arriverez aussi avec un coup de tournevis dans la tranche du boitier :

Boitier dé-clipsé

Ainsi, vous aurez accès à la carte.

Vous devrez alors soudé des pins dessus afin d’y insérer un convertisseur USB – TTL pour flasher la bête sur votre PC.

Pour trouvez des pins j’ai récupérer une carte électronique HS pour les lui piquer (il n’en n’as plus l’utilité). L’astuce est d’arraché au préalable (proprement) le guide noir des pins avec une pince.

Guide des pins partiellement arraché (et abimé…)

Vous pouvez alors dessouder un à un les pins et les souder sur la carte du Sonoff Basic et ensuite remettre le guide (ou pas, mais sa fait pro !).
Regardez bien la photo ci-dessous, il faut souder les pins sur les bornes à côté de l’interrupteur logique.

Carte avec les pins soudées

Maintenant que la carte est prête on va s’attarder à l’installation de la solution de flashage.

Serveur ESPHome

On va utiliser un outil plutôt simple d’utilisation que j’ai cité plus haut pour la création de notre firmware : ESPHome. Ce logiciel s’installe sur un serveur Linux.

Installation et lancement

sudo apt-get install python-pip
pip install esphome

Pour la configuration, on va installer le dashboard qui permet de configurer via une interface Web :

pip2 install tornado esptool

On va alors créer un dossier ou sera stocké nos configurations (je le créer dans mon dossier utilisateur) et lancer le service Web :

mkdir ~/esphome_config
esphome ~/esphome_config dashboard

Ainsi, votre serveur devrait-être accessible sur le port 6052 de la manière suivante : http://adresse_ip_du_serveur:6052
Si vous utiliser le navigateur Web du PC qui exécute ESPHome mettez « 127.0.0.1 » comme adresse IP.

Premier firmware

On clique alors sur le gros « + » afin de créer une nouvelle configuration. On choisis alors un nom unique pour l’équipement et on clique sur « Continue ».

On doit ensuite sélectionner le type d’équipement :

On laisse le choix par défaut

L’écran suivant vous demande le SSID et mot de passe de votre Wi-Fi. Le troisième champs constitue un mot de passe pour le flashage de l’équipement. Je vous conseille d’en mettre un.

En cliquant sur « Submit », vous devriez voir votre configuration apparaitre sur la page du dashboard :

J’ai mis pour nom « temp_flash »

On va maintenant éditer la configuration afin d’ajouter un service Web pour notre Sonoff. On clique donc sur « EDIT » et on ajoute les lignes suivantes dans le code :

# Serveur Web
web_server:
  port: 80

On clique alors sur « SAVE » et sur le bouton « VALIDATE » de notre élément du dashboard afin de valider notre configuration.

On peut alors compiler le programme en sélectionnant « Compile » du menu de notre élément :

On lance la compilation

Après un certain temps, la compilation se termine. On télécharge alors le firmware en cliquant sur « DOWNLOAD BINARY ».

Compilation du firmware basique fini

En l’état de ce firmware, le Sonoff ne fera rien du tout appart se connecté à notre Wi-Fi. On compilera plus tard une configuration complète que l’on flashera via le Wi-Fi (en OTA).

Flashage du firmware

On va alors connecté le Sonoff au PC pour le flasher

Pour la connexion en USB j’utilise le convertisseur suivant :

DSD TECH Convertisseur série USB à TTL CP2102

Branchez donc les câbles sur le bornier qu’on a soudé auparavant. On utilise bien le 3,3 V du convertisseur et non le 5 V !
A oui, on connecte le RX de l’un vers le TX de l’autre (et inversement !).

Maintenant, on va branché le port USB au PC en maintenant au même moment le bouton de la carte. Relâchez le bouton au bout de 5 sec, la carte est maintenant en attente d’être flashé. Notez que l’équipement n’est en aucun cas relié au 230 V.

On lance alors le logiciel « ESPHome Flasher » récupérable sur la page Github du projet.

On sélectionne alors notre convertisseur dans la liste (« COM4 » pour moi), on sélectionne le firmware récupéré auparavant et on clique sur « FlashESP ».

Flashage avec ESPHome Flasher
Flashage terminé

Lorsque le flashage se termine, vous devriez être en mesure d’aller sur la page Web de votre Sonoff (l’adresse IP est indiqué dans les logs) :

Interface Web du Sonoff Basic

N’ayant pas configuré de fonctionnalités, on ne peut rien faire sur la cette page appart envoyer un nouveau firmware. On va donc créer notre firmware final et l’envoyé sur le Sonoff.

Firmware final

Configuration finale

On repart alors sur le dashboard ESPHome afin d’éditer la configuration existante :

esphome:
  name: sonoff_fan
  platform: ESP8266
  board: esp01_1m

wifi:
  ssid: "Mon_Wi-Fi"
  password: "fromscrampledtosimple"

# Enable logging
logger:

# Enable Home Assistant API
api:
  password: "mdpmdpmdpmdpmdpmdpmdpmdp"

ota:
  password: "mdpmdpmdpmdpmdpmdpmdpmdp"

# Serveur Web
web_server:
  port: 80

# Définition du bouton physique
binary_sensor:
  - platform: gpio
    pin:
      number: GPIO0
      mode: INPUT_PULLUP
      inverted: True
    name: "Sonoff fan button"
    on_press:
      - switch.toggle: relayandled

# Témoin de fonctionnement
output:
  - platform: esp8266_pwm
    id: sonoff_fan_green_led
    pin:
      number: GPIO13
      inverted: True

light:
  - platform: monochromatic
    name: "Sonoff LED verte"
    output: sonoff_fan_green_led
    id: led

# Définition de l'action sur le relai
# et sur la LED
switch:
  - platform: gpio
    pin: GPIO12
    id: relay
  - platform: template
    name: "Sonoff fan relay"
    optimistic: true
    id: relayandled
    turn_on_action:
    - switch.turn_on: relay
    - light.turn_on: led
    turn_off_action:
    - switch.turn_off: relay
    - light.turn_off: led

# On récupère la force du signal Wi-Fi
sensor:
  - platform: wifi_signal
    name: "Sonoff fan WiFi signal"
    update_interval: 60s

# On récupère le temps de fonctionnement
  - platform: uptime
    name: "Sonoff fan uptime"

# On récupère la version de firmware
text_sensor:
  - platform: version
    name: "Sonoff fan ESPHome version"

Vous remarquez que j’ai changé le nom. J’ai fait exprès d’en mettre un autre au début afin de mettre en évidence la deuxième version de firmware (vous n’avez donc pas besoin de la changer).

Cette configuration implique le mode de fonctionnement suivant :

  • Lorsque le relais est fermé (il laisse donc passer le courant), la LED s’allume. À l’inverse, elle s’éteint.
  • Lorsque l’on appuie sur le bouton noir du boitier, le relais change d’état.

Cette configuration nous permet donc de contrôler physiquement le module en plus des actions à distance.

On sauvegarde alors notre configuration, on le valide et on le compile.

Upload du firmware en OTA

Le premier flashage nécessite un accès direct aux GPIOs de la carte. Pour les autres, tous peut se faire en Wi-Fi. De ce fait, vous pourriez renvoyer autant de firmware que vous voulez avec votre système en production.

Toujours sur le dashboard, sélectionner « OTA » dans la liste en haut à droite et cliqué sur le bouton d’upload de votre firmware.

Lorsque le nouveau firmware à fini de flasher et que l’équipement a bien redémarrer, vous devriez voir (en actualisant la page) du Sonoff le résultat suivant :

Interface Web du Sonoff avec le nouveau firmware

Testez alors les actions avec les boutons « Toggle ». L’action sur le relais devrait s’entendre au niveau du Sonoff.

Vous pouvez alors débranché la carte et la remettre dans le boitier et coupler le Sonoff à votre équipement. Pour ma part, je ne voulais pas coupé les fils de mon ventilateur alors j’ai acheté une rallonge comme ci-dessous (~2 €) que j’ai coupé en deux afin de les mettre d’une d’une part et d’autre du Sonoff.

Rallonge 6 A

Faites bien attention avec le courant secteur, veillez à ne pas mettre d’équipement de plus de 10 A (P = U * I => P = 230 * 10 = 2300 W). Et comme j’utilise une rallonge de 6 A, je suis plutôt limité à 1380 W (mon ventilateur fait 45 W…).

Je règle alors mon ventilateur sur une vitesse (avec oscillation) et je teste par tous les moyens : bouton physique du Sonoff et l’interface Web. Bravo à moi tous fonctionne !

Il ne me manque plus qu’à intégrer cela à Home Assistant !

Intégration à Home Assistant

Cette partie est optionnel vu que vous pouvez contrôler votre équipement via l’interface Web. L’intérêt d’intégrer l’équipement à une solution domotique fait que vous pouvez l’intégrer à des automatisme. Cela me permet aussi de contrôler l’équipement à distance car mon Home Assistant est accessible depuis l’extérieur (en HTTPS avec authentification bien sur !).

Ajout de l’appareil

Avant tous, j’ai créer un baud statique sur mon routeur Wi-Fi afin que cet équipement ait toujours la même adresse IP sur mon réseau.

Je l’ajoute donc dans la pages des intégrations en sélectionnant le composant « ESPHome ». Je renseigne ensuite l’adresse IP et le mot de passe (clé API) de la configuration. Vous pouvez aussi utiliser le nom de l’équipement avec « .local » à la fin (soit « sonoff_fan.local » dans mon cas) au lieu de l’adresse IP. En effet, ce nom est diffusé par le Sonoff en mDNS.

Ajout d’un composant d’intégration ESPHome

Le composant est maintenant visible :

Appareil sonoff_fan connecté à Home Assistant

Vous pouvez ici cliqué sur les différents éléments afin de joué avec.

Ajout d’un bouton de contrôle

J’ai intégré le contrôle de mon ventilateur (donc du Sonoff) sur Lovelace (UI d’Home Assistant) par le biais d’un bouton avec la carte « Entity Button » configuré comme ceci :

Bouton de contrôle de mon ventilateur

Et voila, c’est finis pour ce tutoriel ! Comme vous avez pu le voir la mise en place d’élément de l’IoT est grandement facilité avec ESPHome.

Prochain projet : mettre une prise connectée qui supervise la consommation électrique d’un équipement connecté dessus.

1 Comments

Laisser un commentaire

Your email address will not be published. Required fields are marked (required)