Anthias
mail

e

Carte ESP32 vers Nextion

. . . En développement très chaud . . .

a

w


Introduction
Fiche constructeur de l'ESP32
Outils de développement ESP32
Carte ESP32 /STM32 / Nextion
Le problème bloquant des alimentations
Programmes utilitaires « atomes » de tests
Documents Eagle

Le programme qui ne se charge pas
Conclusion

Maj : 19/08/19

Abstract :
A new component in the Arduino family is full of possibilities and after years working on the DUE, I choose the ESP32 for my new designs, to begin in the IOT (Internet of things) on a small, cheap and powerfull card.
This card is a part of my project <Nextion> arduino

Résumé :
Un nouveau composant de la famille Arduino est plein de possibilités et après des années de travail sur la DUE, j'ai choisi l'ESP32 pour mes nouvelles conceptions, pour commencer dans l'IOT (Internet des objets) sur une petite carte économique et performante.
Cette carte fait partie de mon projet <Nextion> arduino

arduino  Introduction ESP32

La famille Arduino s’enrichit de nombreux microcontrôleurs, dont l’ESP32 qui est un remarquable produit, basé sur un WROOM-32 d’Expressif.
Cette page n’a pas l’ambition de décrire les performances de ce chip très performant, il apporte plus de fonctions qu’une DUE pour un prix dérisoire, et comprend en standard le Wi-Fi et le Bluetooth ce qui ouvre tous les possibles.
Il faut se plonger dans les documents du constructeur Expressif pour s’étonner de tout ce qu’il contient et se dire qu’il va y avoir du travail pour en exploiter une partie pour nos petits besoins, et mettre le doigt ans l’IOT (Internet Of Things <des Objets>).
J’ai abandonné les DUE que j’utilisais depuis des années sur mes automates pour laisser la place au ESP32, quitte à perdre tout le hardware précédent qui tournait très bien et de repartir sur un tout nouveau design pour l’intégrer.
Le chapitre suivant se contente de reprendre une fiche constructeur pour se faire une idée sur ce produit :

Haut de page

arduino  Résumé de la fiche constructeur de l'ESP32

• Microprocesseur dual core de 240 MHz pour les Cores ESP32-D0WDQ6
et ESP32-D0WD. 160MHz pour les Cores ESP32-D2WD et ESP32-S0WD
• 4MB de mémoire flash
• Mémoire flash embarquée : 16-Mbit pour le Core ESP32-D2WD
• Wi-Fi 802.11 b/g/n conforme à la norme IEEE 802.11 compatible avec les sécurités WFA, WPA/WPA2 et WAPI
• Bluetooth 4.0 LE et BR/EDR
• 32 Entrées/Sorties
• 26x E/S digitales (3.3V). Toutes les sorties peuvent être PWM
• 18x entrées analogiques
• 3x UART
• 3x SPI
• 2x I2S
• 2x DAC
• 2x I2C
• Consommation en mode sommeil (Deep Sleep mode) : 5 μA
• etc.

w

e

Haut de page

arduino  Outils de développement ESP32

Expressif offre un environnement ESP-IDF ayant bien plus de possibilités que l’IDE de base d’Arduino, mais qui demande une bonne maîtrise de Linux et un délicat apprentissage de cet outil puissant pour celui qui veut exploiter à fond l’ESP32.

Pour des ambitions de programmation plus modestes, il sera plus simple de se contenter de l’IDE basique Arduino ou mieux, d'Eclipse.

1 La puissance du ESP32 et de l’IOT

Autant le développement du Nextion semble mort, autant celui d’Expressif est explosif !
 Le dynamique taïwanais a sorti une carte de développement complète à 25 € , un «  Œil artificiel = caméra + ESP32 + PSRAM + Flash + ESP-WHO », qui envoie les images en Wi-Fi, avec les outils de reconnaissance faciale.
Il paraissait impossible jusqu’à présent d’imaginer une telle puissance en développant sur Arduino, mais pourtant, Expressif continue d'ouvir la voie à l’intelligence artificielle des objets (IAdO) ou Artificial Intelligence of Things (AIoT), pour un prix dérisoire. Nous connaissions les solutions pour le Raspberry Pi sous Linux, mais pas sur Arduino.
Cela permet par exemple de ne pas avoir à faire porter une clef en collier aux enfants qui rentrent seuls à la maison après l’école, ils pourront ainsi ouvrir la porte en étant reconnus par la caméra.
Cherchez ESP-EYE sur votre moteur.

 Espressif a  lancé en juin 1029 un circuit encore plus puissant, avec plus de d’entrées/sorties et de fonctions, le ESP32-C2 mais sans le Bluetooth.

 Pour compiler, il faut choisit la bonne version dans outil/type de carte parmi la grande liste, par exemple avec le modèle en 38 pins sur la photo plus loin : DOIT ESP32 DEVKIT V1

Haut de page

arduino  Carte universelle ESP32 ou STM32 vers Nextion

Les caractéristiques impressionnantes de l'ESP32 m’ont conduit à développer une carte support qui recevra toutes les entrées-sorties et communiquera vers le Nextion en 2 fils (+alimentation).

Pour rendre cette platine plus universelle, elle devra aussi supporter les STM32 qui sont aussi des circuits remarquables, produits à plus d’un milliard d’exemplaires par ST Microélectronics, que l’on trouve cachés dans tous les objets du quotidien.
Les cartes de développement STM32 se trouvent aux prix délirants de 2 Euros, c’est aussi un chip très puissant, mais à la différence de l’ESP32, il n’a pas de Wi-Fi et Bluetooth.

Ce tutorial explique la délicate mise en service du STM32 sous Arduino : Tutoriels Arduino nextion

STM32

s

STM32

Ces deux familles existent en divers brochages, au maximum 40 pins, et en deux largeurs, 600 mils pour les STM32 (15.24 mm = 6 * pas de 2.54 mm ) et 1000 mils (25.4 mm = 10 * pas de 2.54 mm) pour les ESP32.
Cela est résolu par une grille banalisée qui pourra recevoir une implantation quelconque (hors divers autres variantes exotiques...).

Cela implique obligatoirement qu’aucune liaison (ports et alimentations) ne peut être câblée en dur vers le support de la carte choisie, chaque variante ayant des brochages différents !
A titre anecdotique, la moitié de mes ESP32 sont en 2*19 pins, l’autre moitié en 2*15 pins, mais il en existe aussi en 2*20 et en d’autres longueurs et largeurs plus exotiques.
Il faudra bien différencier les cartes configurées pour ne pas se tromper en ne mettant que le support de la bonne taille pour un câblage donné.

Les alimentations seront strappées sous les supports vers des rails communs.
Les liaisons se font avec des pins à wrapper, ou du fil émaillé auto dénudant, pour configurer chaque variante à la demande, il n’y a pas moyen de faire mieux.

Cette carte contient les multiples prises et composants annexes, comme pour mes anciennes cartes DUE, il n’y a pas de problème d’implantation, sauf pour les alimentations.

En plus des nombreuses prises pour les éléments extérieurs (en SPI, I2C, One Wire pour DS18SB20 , commande "blackout", etc.), la carte incorpore divers périphériques :

 Une horloge RTC (Real time clock) DS3231 fournissant le temps de référence avec une remarquable stabilité (quelques secondes par an si sa température reste assez stable autour de 20°). Cette horloge fournit un top toutes les quatre minutes par interruption (sortie SQW ).
Elle est associée à une EEPROM 512koctets (qui remplace la 32 k d’origine).
-Un lecteur de micro SD pour archiver et exploiter l’historique.
 Un buzzer qui est capable de jouer la musique, mais qu'il n'est utilisé ici que pour émettre quelques bips, en particulier un très court tout les 4 minutes un plus long toutes les heures (silencieux en mode blackout).
-Le capteur barométrique BMP280  (I2C).
-Un GPS NEO6M pour la position en mobile et un autre moyen supplémentaire pour connaitre l'heure.
-Des sorties sur des drains de Mosfets pour commander des actions internes (alimentation du Nextion) et externes (chauffage, volets,…)
Remarque : Pour économiser l'énergie et sauver la planète, le signal "blackout" coupe tout affichage si personne n'est en face du Nextion pour l'admirer, soit 500 mA sous 5V, il suffit de le reseter quand une présence est détectée par les capteurs infra-rouges et radars. Tout le reste étant en sommeil entre les interruptions, la consommation moyenne est quasi nulle sur le 12 V.
-Pour certaines applications, malgré que le Nextion soit totalement capable de les intégrer (mais il n’est pas présent sur toutes les cartes !), je rajoute cinq leds CMS et trois boutons poussoirs, et afin de ne pas gaspiller huit broches du ESP32, cela sera géré par l’increvable port PCF8574 en I2C (CMS). Deux autres poussoirs attaquent directement deux entrées GPIO.

Haut de page

arduino  Le problème bloquant des alimentations !

Le jack d’entrée est classique comme pour la famille Arduino en 5.5 mm, accepte entre 8 et 30 Volts pour fournir diverses alimentations sur la carte.

Les alimentations restent le problème de taille qui retarde la finalisation.
-Un 3.3 V permanent pour les microcontrôleurs d'une centaine de milliampères (généralement la consommation sera plus faible).
Il est en effet préférable d’alimenter les circuits directement en 3.3 V pour des problèmes de rendement, par exemple pour une consommation en 3.3 V de 100 mA :
Rendement d’une pompe down converter en 12 V -> 3.3 V = 90%
Consommation sur le 12 V = 100 mA * (3.3 /12) / 0.9 = 30 mA
En passant par le 5 V :
Rendement d’une pompe en 12 V -> 5 V = 90%
Régulateur linéaire de la carte LM1117 5V -> 3.3 V (perte sèche par dissipation thermique de 1.7 * .1 = 0.17 watt)
Consommation sur le 12 V = 100 mA * (5 /12) / 0.9 = 46 mA
C’est 50% de courant en plus, valeur très importante quand on travaille les modes faibles consommation en alimentation autonome.


-Un 5 V permanent pour certains périphériques, courant maximum du même ordre (en option).
Suivant les périphériques ajoutés, ce convertisseur peut être inutile si l’on utilise celui du Nextion, mais qui sera coupé la plupart du temps.


-Un 5 V, 500 mA pour le très vorace Nextion, qu’il faut couper à la demande par un Mosfet.

 

J’ai testé diverses platines de convertisseurs pour répondre à ces trois besoins, mais aucune ne m’a réellement convaincu, quant au rendement, au bruit résiduel, à la taille…
Je suis incapable aujourd’hui de définir une implantation stable d'une de ces alimentations sur ma carte !

J'ai validé la carte avec tous ses périphériques et connecteurs en laissant le plus possible de zones banalisées avec des trous au pas de 2.54 mm, les alimentations bricolées à la demande du moment seront montées sur une carte à trous séparée en attendant mieux.

Avec l’expérience acquise sur cette première implantation imparfaite, je retirerai une version 2 améliorée incorporant les alimentations.
C’est chaque fois le même problème, pendant que l’on monte la première carte qui vient d’arriver, toute une série de modifications et d’améliorations apparaissent, et la version suivante est plus aboutie.
Cela n’est pas un gros investissement, les chinois produisent une dizaine de cartes d’excellente fabrication pour moins de 20 Euros tout compris, livrées dans la semaine, à ce prix-là, on à le droit de se tromper…

e

Haut de page

arduino  Programmes utilitaires « atomes » de tests

Pour chacune de mes cartes j’associe dans une directorie toute une série de tests qui permettent de vérifier un a un chaque composant au fur à mesure de l’installation.
Pendant ces tests le courant d’alimentation est toujours contrôlé.
Ces petits outils de tests sont les plus simples possible et n’utilisent aucune bibliothèque personelle.
Ils permettent de débugger le hardware (pistes coupées, soudures baveuses…).
Certains sont simplement dérivés d’un exemple arduino, voici les premiers pour cette carte :

Liste adresses I2c
Mise à l’heure RTC DS3231
Affiche RTC DS3231
EEPROM 24c512 (32 kO)
PCF8574 + leds et boutons
BMP280 HP buzzer
Commande Mosfets
Créneaux programmables sur pins de sortie
OneWire
Diverses mises en sommeil
Etc..
Il est en effet inutile de persister à débuger son programme si la carte à des problèmes de hardware.

Haut de page

arduino  Documents Eagle

La version en cours est disponible en Eagle, les documents comportant l’outillage complet pour la production sont disponibles sur demande pour envoyer en fabrication.

Ces documents seront fournis après validation des premiers prototypes finalisés :
à suivre…

1 Remarque sur les leds CMS

Ces nouvelles leds CMS au format 1206 (pas de 0.1 pouce) ont un rendement surprenant et sont mêmes visibles avec quelques dizaines de microAmpères.
Suivant la couleur, ces leds ont des luminosités très différentes à résistance (et non courant) identique.
Il est difficile d’équilibrer les résistances pour obtenir des luminosités proches suivant les couleurs, et de plus cela dépend de l’observateur, car chacun a une perception différente.
Par défaut une résistance de 3.3 K sera installée au départ. Une forte augmentation du courant n’amène qu’un gain réduit en luminosité !
Les leds jaunes et bleues sont les moins brillantes et peuvent demander plus de courant. Les vertes et blanches sont les plus brillantes (à R constant)

Résultat des tests, alimentation à 3.3 V, résistance série de 3.3 kOhms puis 10 kOhms :

 

Test
leds CMS
Tension
résistance
3,3 kOms
Tension
Led
3,3 kOhms
Courant
3,3 kOhms
µA
Tension
résistance
10 kOms
Tension
Led
10 kOhms
Courant
10 kOhms
µA
red 1,544 1,756 473 1,55 1,73 160
Green 0,933 2,367 288 1,059 2,244 111
Blue 0,758 2,542 235 0,81 2,493 86
Yellow 1,457 1,843 447 1,504 1,598 155
White 0,718 2,582 223 0,758 2,545 81

Il faut remarquer les tensions très variables des leds (de 0.7 à 1.5 V) et les courants extrêmement faibles pour des visibilités très correctes (de 0.2 à 0.5 mA avec 3.3k, le tiers avec 10k) !
La led jaune a un rendement très inférieur aux autres, il faut diminuer sa résistance pour monter le courant.

 

Les 5 leds et les 3 poussoirs sont branchés sur les 8 ports du circuit I2C PCF8574 en CMS (qui supporte 20 mA par I/O, il y a de la marge).


La ligne d'interruption branchée sur une entrée de l'ESP32 réveille le circuit si un des trois poussoir est activés.

Toutes les lignes ouvertes sont tirées au + par une dizaine de kOhms pour éviter les déclenchements intempestifs d’interruption par des parasites.
En milieu perturbé, il faudra ajouter un petit filtrage capacitif pour casser les pics induits par effet d’antenne sur chaque entrée.

Deux poussoirs supplémentaires SW& et SW2 sont rajoutés pour réveiller lors d’un sommeil profond par action directe sur deux entrées GPIO.

1 Remarques sur le GPS

En option, un GPS NEO6M trouvait sa place sous la carte. Il a été supprimé pour minimiser le taille du circuit, mais pourra se retrouver sur la carte piggy-back inférieure des alimentations.
Les trames NMEA183 donnent la position et l’heure, mais la RTC DS3231 est très stable, et l’heure est aussi disponible en WiFi sur un serveur de temps.

leds

 

1 Remarques sur l'alimentation

L’alimentation est protégée par une diode en inverse et un fusible en série, cela évite de mettre une diode série qui fait perdre 0.7 V et plombe le rendement de conversion.
En temps normal, des straps au pas de 2.54 mm sont enfichés entre l’arrivée du jack d’alimentation extérieure (12Vo) et les départs vers les deux convertisseurs (JP3v3 pour l'ESP32, JP5v pour le 5v 0.5 A du Nextion).
Chaque strap peut être remplacé par un ampèremètre ou un shunt pour mesurer un courant particulier, par exemple via un INA 219 qui fournira l’information en I2C. Cela est très utile pour travailler les modes "sommeil" et vérifier les différentes étapes de baisses de la consommation.

Les condensateurs réservoirs et filtrages ne sont pas oubliés, ils sont sur la carte annexe d’alimentation, qui comprend aussi un Mosfet pout éteindre le Nextion trop gourmand en mode blackout.

(à droite, le petit haut-parleur buzzer pour la musique d’ambiance).

1 Conversion 5 V vers 3.3 V

Attention les entrées du ESP32 ne supportent pas le 5 Volt, comme par exemple la sortie TX du Nextion !
Il faut faire une conversion, le plus élégant est avec un petit Mosfet, le plus rustique par un pont diviseur 2/3.
Cette carte comprend trois ponts de conversion, l’entrée du signal 5 V est sur JP5Vx au travers d’une résistance 4.7 kOhms, le point commun avec la 10 kOhms à la masse est la sortie JP3Vx, en 3.3 V.  
Le Nextion accepte un signal 3.3 V sur son entrée RX.

 

12v

1 Remarques sur les prises I2C

Quatre prises I2C banalisées reçoivent de nombreux accessoires dont le capteur de pression BMP280 flottant au bout de quelques centimètres de câble, et de nombreux autres périphérique sur cartes externes (qui dupliquent les prises) suivant les besoins.
L’horloge RTC a sa propre prise avec sa sortie d’interruption.
L’expandeur de ports PCF8574 est en dur sur la carte (voir au-dessus).
Les lignes i2C doivent être tirées au <+> par des résistances entre 4.7 k et 10 k.
Elles ne sont pas sur le schéma Eagle, car incorporées à la platine DS3231, mais il faut bien vérifier à l’ohmmètre (alimentation coupée !) qu’elles existent.

 

1 Remarques sur les prises OneWire

Plusieurs prises sont prévues pour les entrées OneWire des multiples capteurs de température DS18B20 en divers endroits.

En principe une seule ligne OneWire peut gérer tous les capteurs en étoile, mais il a été prévu des signaux séparés car les lignes très longues plantent de manière aléatoire les autres capteurs, malgré des filtrages d’alimentation soignés en bouts de lignes.
Il est ainsi possible de lancer plusieurs instances sur des lignes indépendantes pour isoler les problèmes et comme le temps d’attente est très long pour d’obtenir une mesure (0.7 seconde), cela permet de lancer les commandes décalées sans multiplier les attentes.

La prise vers le capteur de la chaudière a un fil de plus pour commander l’activation par un Mosfet P. Il est simple de couper un dispositif par le négatif avec un Mosfet P, mais couper par le point chaud est plus délicat car il faut fournir une tension élevée (non disponible basiquement) sur la gate d'uv Mosfet N.

Une autre ligne OneWire récupère l’information de l’activité solaire plus girouette et anémomètre.
J’ai renoncé au pluviomètre trop délicat à maintenir. En option entrée de mesure de radiations.

i2c

 

1 Les supports universels

Les implantations sont au pas de 2.54, avec les espacements comme représentés.
Les rangées J00 et J12 reçoivent les pins à wrapper à la demande.

Pour un ESP32, supports en J01 et J11 (10 * pas de 2.54 mm ).


Pour un STM32, supports en J03 et J09 (6 * pas de 2.54 mm ).

 

slots

1 La carte finale équipée

Carte montée version 1908 sans les alimentations.

C’est une variante ESP32 en 36 pins
Le baromètre BMP280 est monté en l’air (pour ne pas être influencé par la température du CI), prise blanche I2C 1/4.
Un seul capteur de température DS13b20 est monté en l’air sur ce proto, prise 5/5 One Wire.
Remarquez les 5 leds et 3 poussoirs en bas, sur le PCF8574
Les deux poussoirs horizontaux attaquent directement les GPIO.

Comme déjà signalé, aucune liaison (ports et alimentations) ne peut être câblée en dur vers le support de la carte choisie, ce qui explique l’obligation du wrapping pour relier l’ESP32.

 

Ces cuivres nus, avec éventuellement les éléments critiques spécifiques (PCF8574, poussoirs…), sont disponibles pour qui en fera la demande.

nu

ci

Cliquez pour agrandir

1 Les fausses alimentations

Pour mes premières cartes, j’ai commandé sur eBay une dizaine de cartes d’alimentation (down converters), basées sur l’excellent MP1584EN pour 5€ les dix, prix semblant imbattable.
L'une doit fournir le 3.3 V (environ 70 mA en tout) pour l’ESP32, l’autre le 5V commuté 500 mA pour le Nextion, depuis le jack 12V.
L’étude du datasheet m’a montré que la consommation à vide (mode sommeil) devrait être inférieure à 1 mA sur le 12 V.
Lors des tests, très mauvaises surprises, deux constatations contraires aux spécifications !
Pour 5 V,  500 mA, le chip chauffe très anormalement, rendement médiocre.
Pour 3.3 V, sortie en l’air consommation à vide de 23 mA sur le 12 V, au lieu des moins du 1 mA attendu !
Devant ces résultats catastrophiques j’ai examiné de plus près les cartes.
Sur tous les sites eBay, Bangood,…, la photo de la carte montre bien un vrai chip, bien implanté comme sur le datasheet du MP1584EN.
Malheureusement, les cartes envoyées ne sont pas du tout les mèmes, comme vous pouvez le voir sur les photos, ce n’est absolument pas un vrai chip, mais un faux piratage chinois sans sérigraphie, aux pattes dans un ordre tout différent et aux performances lamentables.

Vrai : Vin pin 7, Self  (SW) pin 5, GND pin 5…
Faux: Vin pin 2, Self  (SW) pin 3, GND pin 4…

Il semble n’exister aucun chip connu de convertisseur qui réponde à ce brochage farfelu.
L’idée était d’exploiter les modes sommeil pour travailler à des courants moyens très faibles, c’est évidement exclu avec cet ersatz défectueux.

C’est de la tromperie, produit pas cher mais inexploitable.
Je relance des commandes pour essayer de trouver de vrais chips conformes aux photos des annonces mensongères…

Après échanges dans le forum Arduino, il m’a été signalé que ceux-ci sont des vrais : fr.aliexpress.com/...
Les évaluations suivront dès réception.
Il faut remplacer le fragile potentiomètre par deux résistances fixes ou le noyer dans une goutte de cire de bougie pour le protéger.

mp

Cliquez pour agrandir

Haut de page

arduino Le programme qui ne se charge pas

Les ESP32 sont pleins de surprises, les platines sont toujours basées sur l’excellent WROOM-32 d’Expressif, mais chaque intégrateur fait sa variante ensuite.
Sur certaines platines après la compilation, le transfert est bloqué : Connecting ….____....____....____
Il faut alors faire un long appui (cinq secondes) sur le poussoir <BOOT> pour lancer le transfert.
Sur d’autres, mieux conçues, c’est inutile, le reset se fait tout seul.

Cela peut provenir aussi d’un câble USB trop long et fin, à trop forte impédance, changez de câble.

Haut de page

arduino  Conclusion

Ce n’est pas simple de transposer des dizaines de gros programmes tournant sur une configuration éprouvée (à base de DUE), vers un nouvel environnement (à base d’ESP32), en s’adaptant à l’IOT (Internet des Objets), mais il faut savoir évoluer pour survivre dans un monde des microcontrôleurs en mutation permanente.
Je regrette simplement d'avoir basculé sur le STM32 et l’ESP32 aussi tard, en ayant été figé sur le DUE.

Vous trouverez en pages <électronique>, les détails sur l’utilisation de cette carte avec le Nextion arduino

 

© Christian Couderc 1999-2019     Toute reproduction interdite sans mon autorisation


* Page vue   108   fois       IP : 35.173.234.237

 Haut de page         Dernière retouche le 20 Août 2019 à 08 h         Retour page précédente

   Collector