Exploration des ESP32

Publié par Richard Dern le 13/08/2019 - Aucun commentaire

Si vous êtes un visiteur régulier de mon site, vous savez que je suis très fan des ESP8266. J'ai mis un peu de temps à m'y mettre, mais j'ai enfin pu mettre la main sur leur successeur: l'ESP32. Plus exactement, sur deux dérivés basés sur l'ESP32: le WROOM (à prononcer comme "room") et l'ESP32-CAM.

Le SoC

Le SoC mis en oeuvre dans les ESP32 est un Tensilica Xtensa LX6, qui est un micro-processeur 32 bits cadencé de 160 à 240MHz. Il est mono-core sur les ESP32-S et dual-core sur les ESP32. Pour rappel, le L106 des ESP8266 a une fréquence comprise entre 80 et 160MHz sur un seul coeur. Je rappelle également que bien qu'ils soient utilisables "en l'état", ces SoC sont proposés par différents constructeurs sous la forme de petits modules intégrant le SoC afin d'étendre leurs fonctionnalités (par exemple, en rajoutant un port micro-USB afin de faciliter leur programmation ou leur alimentation).

En plus du Wifi b/g/n, on dispose maintenant du Bluetooth 4.2, et de plein d'autres entrées/sorties. En particulier, on a deux interfaces I2C, deux interfaces I2S, quatre interfaces SPI, du PWM, des convertisseurs analogique/numérique et vice-versa, etc. Bref, de quoi réaliser plein de projets intéressants.

Pinout des ESP32

Description des entrées/sorties des ESP32

En outre, les ESP32 offrent, selon les déclinaisons, jusqu'à dix capteurs sensitifs (qui peuvent être utilisés pour réaliser un clavier à touches sensitives par exemple) et un capteur à effet Hall.

ESP32

ESP32 - Face avant

ESP32 - Face avant

  • Attribution:
  • Richard Dern

La carte en ma possession est dotée d'une entrée micro-USB, qui va donc pouvoir servir à l'alimenter en 5V, mais aussi la programmer sans avoir recours à un convertisseur série. C'est la puce SIL 2104, visible sur la photo du haut, en bas à gauche, près du bouton Reset. Il s'agit d'un convertisseur USB/série de chez SiliconLabs, le populaire CP2104. On distingue aussi en bas à droite, près des LEDs de mise sous tension et d'activité, un régulateur de tension LD1117, qui prend les 5V en entrée et redistribue du 3.3V en sortie. Notons d'ailleurs qu'un GPIO configuré en entrée peut recevoir un maximum de 3.3V.

ESP32 - Face arrière

ESP32 - Face arrière

  • Attribution:
  • Richard Dern

Comme on peut le voir ici, le nombre d'entrées/sorties disponibles par rapport à l'ESP8266 est en nette hausse: on dispose de pas moins de 38 pins (plus deux "NC", donc non utilisés/utilisables), là où l'ESP8266 ne nous en offrait "que" 16.

Parmi les 38 pins présents et utilisables sur ma carte, on trouve:

Ça, c'est suivant la sérigraphie sur la carte. En réalité, c'est beaucoup plus complexe, étant donné que la plupart des pins peuvent être utilisés à des fins différentes. Par exemple, il est possible d'utiliser les pins GPIO16 et GPIO17 pour ajouter deux lignes de données supplémentaires à l'interface SD.

Autre élément d'importance qu'on ne peut connaitre qu'après un examen attentif du datasheet de l'ESP32: les GPIO34 et GPIO35 (présents et disponibles sur ma carte) sont similaires aux pins SVP et SNV, dans la mesure où ils ne peuvent être utilisés qu'en entrée, et qu'ils n'ont pas de résistance pull up/down.

Il est également utile de savoir que la puissance offerte par chaque sortie est paramétrable, entre 5 et 40mA, mais que par défaut, les sorties sont limitées à 20mA chacune. Je n'ai pas encore cherché comment changer cette valeur dans le code, mais à mon humble avis, une bonne pratique consiste de toute façon à utiliser une alimentation et un régulateur distincts pour les périphériques.

Enfin, la LED d'activité (verte) peut se piloter via le GPIO02 (opportunément utilisé également par l'interface SD). La LED de mise sous tension (rouge) ne semble pas pouvoir être contrôlée (ce qui, de toute façon, n'a pas vraiment de sens).

ESP32-CAM

Le modèle "authentique" est basé sur un module Ai-Thinker (du nom de son fabriquant). En ce qui me concerne, pour moins de six euros (près de moitié moins cher que l'original), j'ai obtenu un clone que j'espère être de qualité raisonnable. Il semble identique en tout point à l'original sur le plan matériel, seule la sérigraphie du couvercle et du PCB diffère. Il est fabriqué par DiYmore, et devrait être basé sur un ESP32-S, donc la version mono-core.

ESP32-CAM - Face arrière

ESP32-CAM - Face arrière

  • Attribution:
  • Richard Dern

La carte embarque un lecteur de cartes micro-SD, une caméra OV2640, et même une LED blanche haute-luminosité qui sera utilisée comme un flash ou un éclairage d'appoint dans des conditions de lumière difficiles.

Sur cette carte aussi on peut voir le LD1117 (en bas au milieu): on va donc l'alimenter en 5V directement via le pin dédié.

l'ESP32-CAM devrait supporter au moins deux types de caméras sur connecteur FPC: la OV2640 fournie pré-montée, et la OV7670. La OV2640 est toutefois la plus intéressante puisqu'elle peut filmer jusqu'en 1600x1200@15FPS, là où la OV7670 ne monte pas au-delà de 640x480.

Utilisée conjointement à ESPHome, elle se configure comme une Ai-Thinker, et devrait donc être totalement compatible.

La LED flash se pilote via le GPIO 04. Or, c'est un pin utilisé également par le lecteur de cartes. Donc il faudra ruser pour faire fonctionner les deux (forcément alternativement) si tant est que cela soit même possible. Au pire, on peut toujours faire appel à des LEDs externes.

La carte s'alimente en 5V, et consomme 180mA à vide, mais peut dépasser les 500mA selon les circonstances (en streaming avec flash par exemple). On va donc opter pour une alimentation capable de délivrer au moins 2A, voire, et ce serait même mieux, un chargeur USB capable de débiter 2.4A, histoire d'avoir de la marge et d'être tranquille.

Puisque la caméra à elle seule phagocyte un certain nombre d'entrées/sorties, on est limités à 16 pins (incluant le 5V et le 3.3V, mais aussi des masses). Malgré tout, cela sera largement suffisant pour lui adjoindre, par exemple, un détecteur de mouvement, et quelques autres capteurs ou LEDs à l'envi.

ESP32-CAM - Face avant

Face avant de l'ESP32-CAM. On peut voir la LED flash en bas à droite. La caméra repose sur le lecteur de cartes SD.

  • Attribution:
  • Richard Dern

Je n'ai pas eu trop de mal à l'installer via ESPHome. Par contre, un streaming permanent fait beaucoup chauffer la carte et la rend instable, même avec un paramétrage "raisonnable" (j'ai testé en 640x480@10FPS). L'idéal sera donc de "désactiver" la caméra tant qu'on n'en a pas besoin, et limiter la durée des séquences vidéo.

Comme la carte ne dispose pas d'un port USB, il va falloir faire appel à un câble UART pour le premier upload du firmware (et pour les suivants si on n'utilise pas l'OTA).

Conclusion

Les ESP8266 étaient déjà de petites machines très funs à utiliser et programmer. À ce jour, je ne les ai encore jamais poussés dans leurs derniers retranchements. Ils paraissent bien faibles quand on a l'habitude des Raspberry Pi par exemple, mais encore une fois, ce serait comparer ce qui n'est pas comparable, et leur puissance est tout à fait suffisante, même pour des projets avec un peu plus d'envergure que simplement piloter un relais et une LED.

Mais les nouveautés introduites par les ESP32 et mentionnées ici, en particulier la présence d'un deuxième coeur, l'intégration de deux ADC et toutes les entrées/sorties, permettent des projets beaucoup plus ambitieux.

En ce qui me concerne, et probablement comme d'habitude, je pense à contre-courant. Non, je ne crois pas que l'ESP8266 soit rendu obsolète par l'ESP32. Je pense que les deux sont complémentaires, et que si un projet simple fonctionne bien avec un ESP8266, il n'y a pas de raison de le remplacer par un ESP32.

En revanche, l'ESP32 permet de combler une partie du manque existant entre les ESP8266 et les Raspberry Pi.

Encore une fois, en ce qui me concerne, je dispose d'une douzaine de Raspberry Pi Zero W, et une vingtaine d'ESP8266. Certains de mes projets nécessitaient une puissance que n'offre pas un ESP8266: par exemple, le Pi Zero et sa caméra. Pas le choix, donc: je dois passer d'un petit SoC à un véritable ordinateur, avec tout ce que ça implique comme désagréments (lenteur du démarrage, instabilité du système ou des applications, etc.)

L'ESP32 est donc le bienvenu, puisqu'il offre assez de puissance pour des projets complexes, avec une consommation réduite par rapport aux Pi, tout en héritant de l'ESP8266 la "simplicité" de sa programmation et de son utilisation. La comparaison avec les Pi s'arrête vraiment à la consommation: un ESP32 n'est pas capable de faire ce qu'on demande à un ordinateur comme le Pi, et ce n'est de toute façon pas son sujet. Encore que: après tout, Octoprint et ESP3D, tournant respectivement sur Raspberry Pi et sur ESP8266/ESP32, ont tous les deux pour objectif de contrôler une imprimante 3D en réseau...

Commentaires

Vous pouvez utiliser markdown dans votre commentaire. Si vous indiquez une adresse email, elle sera utilisée pour vous notifier des commentaires publiés sur cette page. Elle ne sera utilisée qu'à cette fin et ne sera jamais transmise à un tiers.