ESP

Mise en place

Nous allons tenter de progammer des microcontrolleurs ESP32 à l’aide de ESPHome. Cet outil nous permet de créer des programmes complets (firmwares) pour utiliser des ESP dans un langage relativement simple.

Les ESP sont des microcontrolleurs qui disposent de capacités Wifi. Cela va nous faciliter la tâche car ESPHome crée des firmwares qui intègrent la possiblité d’être mis à jour par le Wifi.

Pour éviter d’avoir à installer cet outil sur chaque ordinateur, ESPHome fourni une interface web qui permet d’éditer le programme de chacun des ESP32 et de les mettre à jour. On a donc une seule instance d’ESPHome qui tourne sur mon ordinateur, qui nous sert donc de serveur. Il faut que nos ordinateurs soient sur le même réseau. Vous pouvez donc vous connecter au réseau Wifi « EcologiesNumeriques » avec le mot de passe econum24. Vous pouvez ensuite accèder à l’interface d’ESPHome en allant sur http://192.168.1.42:6052/.

ESPHome

Une fois que vous avez récupéré un ESP, il suffit de l’alimenter en usb, en le branchant à un ordinateur par exemple. Vous devriez alors voir la case correspondante devenir grise et indiquée comme « ONLINE ».

ESP online

En cliquant sur « Edit », on peut voir le programme actuel, il peut être modifié dans cet éditeur, puis installé sur l’ESP en cliquant sur « Install » :

ESP edit

On va alors vous demander la méthode d’installation, il faut choisir « Wirelessly » :

ESP wireless

Vous voyez alors défiler les informations sur la compilation puis l’installation du firmware. À la fin, vous devriez voir l’ESP vous indiquer qu’il s’est connecté au réseau Wifi.

ESP install success

Vous pouvez tester ce processus sans modifier le code pour avoir un apperçu.

Faire clignoter une LED

Maintenant que tout est en place, on peut commencer à modifier le programme. Ne touchez pas à ce qui est déjà écrit, ce sont les paramètres de base dont nous avons besoin.

Testons un premier programme. Vous pouvez rajouter ces lignes à la fin du fichier, puis installer le nouveau firmware sur l’ESP :

output:
  - id: light_output
    platform: gpio
    pin: GPIO2

light:
  - platform: binary
    id: LED
    output: light_output

time:
  - platform: sntp
    on_time:
      - seconds: /5
        then:
          - light.toggle: LED

ESPHome fonctionne en définissant des blocs qui créent des objets qui peuvent être des périphériques d’entrée, de sortie, ou des objets plus particuliers fournissant d’autres fonctionnalités. Par exemple, un périphérique d’entrée peut être un capteur. ESPHome intégre tout ce qu’il faut pour utiliser facilement tout un tas de capteurs communs, nous y reviendront bientôt. Pour tous ces objets nous pouvont définir des paramètres qui dépendent de leur type.

Ici nous définissons d’abord une sortie, ou output, qui a un identifiant interne light_output. GPIO signifie « General Purpose Input / Output », ou « entrée / sortie générique », qui correspond généralement aux pins de l’ESP. Cependant une des entrée/sortie GPIO est directement connectée à une LED sur l’ESP. En l’occurence sur la sortie GPIO 2. Ce type d’objet est décrit dans la documentation d’ESPHome ici (en français).

Nous définissons ensuite un objet qui représente une lumière « binaire », c’est à dire qui peut être soit allumée soit éteinte, mais qui ne fournit pas d’autre fonctionnalité (luminosité, couleur etc). Créer cet objet permet d’avoir accès à des fonctionnalités spécifiques aux lumières, et pas simplement des sorties génériques. Sa documentation se trouve (en français).

Enfin, nous la faisons clignoter grâce au module time (documentation, ou en français), qui va se connecter à un server NTP (serveur sur internet qui indique l’heure). Ce module comprend une option on_time, qui est une Trigger ou un déclancheur, c’est à dire qui va pouvoir décrire le déclanchement d’une Action. Ici on indique que l’action sera lancée toute les 5 secondes seconds: /5, et après le then: se trouve la ou les action(s) que nous souhaitons activer. Nous lançons donc l’action light.toggle, qui change l’état d’une lumière, sur la lampe d’identifiant LED.

Utiliser un capteur de température

Nous allons connecter un capteur de température TMP117 (en français) à l’ESP. Ce capteur utilise le protocole I²C (en français) pour communiquer ses relevés. Il faut donc en premier lieu indiqué à l’ESP quels sont les pins que l’ont souhaite utiliser pour la communication I²C. Deux pins sont nécessaires, SDA pour « Serial Data » (la ligne de données), et SCL pour « Serial Clock » (l’horloge, qui cadance le transfert de données).

i2c:
  sda: 22
  scl: 23

Pour connecter le capteur à l’ESP, en mettant le capteur devant soi avec l’inscription “Sparkfun” en haut, on branche son câble par la droite. Ensuite, le fil noir va se brancher à un pin de l’ESP noté GND (la terre), le fil rouge va sur un pin noté 3V3 (l’alimentation 3,3 volts), le fil bleu va sur le pin noté D22 (SDA), et enfin le fil jaune va sur le pin D23 (SCL)

Ensuite il faut inquiquer à ESPHome le type de capteur qu’on a branché :

sensor: 
  - platform: tmp117
    name: "Temperature"
    update_interval: 10s

Lorsque vous installez ce nouveau programme, vous devriez voir l’ESP vous indiquer la température relevée toute les 10 secondes.

Allumer une led avec un doigt

Maintenant tentons de combiner ça. Tous les types de capteurs ont des options pour déclancher des actions selon les valeurs reçues. Vous pouvez trouver plus d’information là dessus ici (en français). L’idée est d’essayer de déclancher l’allumage de la LED à partir d’une certaine température. On peut alors faire monter la température du capteur en plaçant sont doigt par dessus ou en rapprochant une flame (pas trop proche !).

À vous de jouer !