UART2 sur ESP32

Bonjour,
Sur une application de Webradio composée de :

  • 1 ESP32 devkit C V4
  • 1 Module Audio à base de VS1053 connecté au bus SPI3 (pins 4, 5, 16, 18 ,19, 23 et EN)
  • 1 écran tactile Nextion NX3224T028_011 connecté en UART2.

Le GPIO 16 étant occupé, j'ai déclaré l'UART2 sur les pins 12 et 13.
(on lit partout que l'assignation des pins UART de l'ESP32 sont libres).

je rencontre le problème suivant :

La configuration sans écran fonctionne parfaitement mais L'ESP 32 refuse de booter avec l'écran connecté.
J'obtiens le message suivant :

rst:0x10 (RTCWDT_RTC_RESET),boot:0x33 (SPI_FAST_FLASH_BOOT)
flash read err, 1000

Par contre, une fois l'ESP démarré et l'écran connecté tout fonctionne.

Après recherche il semblerait que le GPIO 12 pose problème en utilisation UART, ce qui contredit ce qu'on peut lire concernant la liberté de choix des pins.
Avant de re-fabriquer le circuit imprimé, j'aimerais lire vos avis concernant le choix des GPIO qui ne posent réellement pas de problème en UART...
Les pins libres sont nombreuses :
0, 1, 2, 3, 6, 7, 8, 9, 10, 11, 14, 15, 17, 21, 22, 25, 26, 27, 32, 33, 34, 35, 36, 39.
Merci d'avance.

Pas vraiment : https://randomnerdtutorials.com/esp32-pinout-reference-gpios/

GPIO12 : boot fail if pulled high

+1
Le tableau du site précédent est à garder sous le coude , il indique quelques limites à la grande liberté offerte par l'ESP32 en matière de routage des fonctions vers les GPIO

Les pins libres sont nombreuses :
0, 1, 2, 3, 6, 7, 8, 9, 10, 11, 14, 15, 17, 21, 22, 25, 26, 27, 32, 33, 34, 35, 36, 39.

J'enlèverai 1 et 3 de cette liste, le premier UART étant associé à ces broches au niveau du bootloader, en amont du code flashé.

:mag:https://microcontrollerslab.com/esp32-pinout-use-gpio-pins/
Cette page web mentionne , partie Strapping PIns, les divers GPIO dont l'état au démarrage a une influence, ces GPIO étant lus par le bootloader pour déterminer divers paramètres de lancement

Les infos détaillées et précises sont fournies par Espressif dans la Data Sheet et le Technical Reference Guide des ESP32, les pages web précédentes donnent l'essentiel sous forme agréable et pratique ..... sans être complets.

Merci à vous,
Comme je comptais garder RX2 en 13 et passer le TX2 en 14, dois-je m'attendre à un souci, vu que la 14 est mentionnée comme outputs PWM signal at boot ?

Il faudrait mettre l'oscillo ou l'analyseur logique sur GPIO14 pour voir la nature (fréquence, rapport cyclique) et la durée du 'crachoullis' au démarrage... ça passera peut être inapercu à l'autre bout.

EDIT : test fait, carte LOLIN32 Lite, programme Blink, en fait de PWM je ne vois au Reset qu'un niveau bas transitoire d'environ 210ms avant le niveau haut de repos, (gros plan ci dessous sur ce niveau bas initial)
boot GPIO14

.....Effet sur l'UART récepteur à tester

Merci pour ton travail, résultat curieux, mais intéressant. Je testerai ça dans un prochain projet.
Dans l'immédiat, et dans le doute, j'ai préféré utiliser le GPIO 27, et tout fonctionne parfaitement.
Merci à vous deux, toujours fidèlement prêts à dépanner.

ça enverra un message bidon vers le récepteur (au moment du boot)
voir comment pallier au niveau du récepteur

Je déterre le sujet avec une alternative :
Je m'y perds dans le choix des GPIO de mes DEVKIT V4

J'ai juste besoin de trouver où raccorder 6 sorties tout-ou-rien et 1 sortie PWM.

En regardant le pinout je remarque une quantité de pins labellisées "OD/ID" que je traduis par "désactivée en sortie et en entrée (après reset)".
Cela signifié qu'elles sont inutilisables ou qu'elles sont forcées à zéro au reset?
Du temps qu'on y est, la pin 39 est-elle bien utilisable en sortie PWM ?
Merci d'avance pour vos lumières.

Bonjour @jackjean

cette page fait une bonne récapitulation des utilisations possibles des divers GPIO des ESP32 (lien déjà donné plus haut dans le fil de discussion)

https://randomnerdtutorials.com/esp32-pinout-reference-gpios/ :

C'est bien plus explicite que des notations ambigües et hyper condensées sur des dessins de pinout

On trouve des page similaires pouvant donner des informations complémentaires

https://electropeak.com/learn/full-guide-to-esp32-pinout-reference-what-gpio-pins-should-we-use/

En regardant le pinout je remarque une quantité de pins labellisées "OD/ID" que je traduis par "désactivée en sortie et en entrée (après reset)".

Il semble s'agir de l'état initial des GPIO au Reset avant l'excécution du code, code qui peut ensuite définir librement un mode de fonctionnement du GPIO.... dans les limites de ce qu'il peut faire !!

GPIO39 ne fonctionne qu'en entrée, en vert foncé sur ton Pinout

Le dessin du 1er lien de al1fch est assez instructif

  • certains pins balancent du pwm au moment du boot, perso, je ne les utilise pas en entrée, c'est pour éviter un conflit
  • le pin 39 est input only, donc à préférer pour tes besoins en entrées ; forcément, il ne peut pas sortir de pwm

j'ajouterais que :

  • les périphériques de l'esp32 peuvent être routés via la matrice interne vers n'importe quel pin, ce qui te permet de sortir ton led_pwm sur n'importe quel pin utilisable en sortie

n'hésites pas à revenir ici en cas de doute

Merci pour l'éclairage, le site suggéré par @al1fch est effectivement exhaustif.

Par contre je me retrouve de nouveau face à une issue, plus sur les Pins de sorties, mais sur les entrées, plus exactement les entrées ana.
Je dois lire 4 CTN, et au vu des capacités des convertisseurs (en nombre - 2 - et en qualité) de l'ESP32, j'ai opté pour la solution I2C avec un ADS1115.
Mon sketch dédié à cette lecture fonctionne très bien en individuel.
A présent je tente de l'insérer dans mon projet complet faisant tourner un serveur Web, et curieusement je fais face à une incompatibilité entre les bibliothèques WebServer.h et ADS1115_WE.h.
J'inclus la bibliothèque ADS : ça marche toujours
J'inclus a fonction de lecture :

float readChannel(ADS1115_MUX channel) {
adc.setCompareChannels(channel);
adc.startSingleMeasurement();
while(adc.isBusy()){}
voltage = adc.getResult_mV(); 
return voltage;
}

ça marche toujours.
Quand j'inclus ces lignes dans le loop :

voltage = readChannel(ADS1115_COMP_0_GND);
tss = 25.5-((1650-voltage)/36.7); // ecriture de la mesure corrigée du canal zéro

le serveur Web ne fonctionne plus. L'adresse IP locale est toujours visible, mais la connexion ne se fait plus... Me voici donc coincé avec mes 4 CTN à traiter...

Bonjour,
c'est déjà pas mal !
peut-être le souci c'est ton while(, qui bloque le core un certain temps : le rtos de l'esp32 n'aime pas
essaye ceci : bibale <Adafruit_ADS1015.h>

Bonjour,
L'explication du while est probablement la bonne. De plus j'ai été intéressé par la simplicité de l'exemple cité dans le site suggéré

http://www.esp32learning.com/code/ads1115-analog-to-digital-converter-and-esp32.php

http://www.esp32learning.com/code/ads1115-analog-to-digital-converter-and-esp32.php.

Par contre, comme quasi à chaque tentative, je me heurte à des erreurs de compil liées à la refonte de la bibliothèque.
Ce site annonce utiliser la bibliothèque : Adafruit_ADS1X15 (la seule à jour trouvable).
Par contre dans le code proposé #include <Adafruit_ADS1015.h> ne peut pas fonctionner
et encore moins Adafruit_ADS1115 ads(0x48);
Ces deux appels sont rejetés en compil.
Autre doute : je ne trouve nulle part la définition du range, pas plus que le nombre d'échantillons par seconde.
J'ai alors tenté le sketch exemple de la bibliothèque en single ended.
On ne trouve nulle part comment assigner l'adresse I2C du module, donc ça compile mais module introuvable...

Bonsoir @jackjean

Je n'ai pas encore utilisé les ADS1015 ou ADS1115

Parmi les multiples librairies propsosées pour ces convertisseurs ADS1XXX dans le Gestionnaire de librairie je remarque ADSX1S de Rob Tillaart (une pointure !!)

Ce sera mon choix initial le jour où ......

L'exemple ADS_continuous_4_channel est configuré pour ADS115 et permet d'assigner l'adresse I2C selon le câblage de la puce

// choose you sensor
// ADS1013 ADS(0x48);
// ADS1014 ADS(0x48);
// ADS1015 ADS(0x48);
// ADS1113 ADS(0x48);
// ADS1114 ADS(0x48);
ADS1115 ADS(0x48);

@al1fch
c'est effectivement une librairie bien écrite avec pas mal d'exemples, et qui fonctionne bien. Merci !

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.