Projet migration projet 328p vers ESP32 WROOM mini D1

bonjour à tous et toutes
je vous presente le projet de transfert d'un montage fonctionnel sous arduino 328P vers esp32 WROOM D1 mini
certains elements de ce montage ont éte partage dans ce forum.
le projet sous 328p gerer
1 entrée DATA via des TSOP 4856 (5v ou 3.3v)
1 sortie PWM via IRLD110/024 vers LEd IR (5v)
1 sortie UART (TX,RX) pour un module son MINIPLAYER (5v)
1 sortie digit pour commander 12 (max) LED WS2812B (5V)
1 source DC avec module DC-DC BOOST via batterie 16850 et/ou alim ext

montage 328P.pdf (23.0 KB)

Je souhaite donc transfert l'ensemble sous ESP32 WROOM D1 mini
Pourquoi : leur puissance cpu et connectivité wifi, Bt, interface SPi, I2C, uart,....

je precise que je n'ai aucune connaissance des ESP32
je remarque :
ESP32 fonctionne en 3,3V et non 5v .
j 'utiliserai donc DC-DC boost 3.3v/5v pour l'alim 5V des modules concernés ( GND commun).
d'apres le MAPPING 3-esp32 mini pappinbg

certaines pin semblent deconseillées car double emploi, entre autre, pour le flash de ESP32.

Pour le module MP3 je prendrai UART1 GPIO10(RX) et GPIO09(TX)

Pour les TSOP ( initialement 1 mais je souhaiterai passer à 4 entrees separées).
la , je pense prendre GPIO17,16,15 et 27

Pour le pwm pour la led IR via le mosfet , il semblerait que le choix soit restreint donc GPIO00 ( PWM01) et le PWM00 etant pour la led . surtout que si j'envisage d'avoir 4 MOSFET avec 4 Led , la ......

Pour la commande des LED WS1812B , je partai sur le GPIO14

Avant t'attaquer le scheam que je vous presenterai , pouvez vous me dire si mon analyse est correcte sur le choix des pin de ESP32

cordialement
didier2010

Les GPIOs 9 et 10 ne semblent pas être un bon choix:

Plus de détails ici : ESP32 UART Communication Pins Explained with Example

bonsoir
merci pour les liens, le UART necessiterai une reaffectation de pin, je pars UART0
donc GPI01 et GP03.
Pourtant sur Arduion l'utilisation de UARTO et sur monitoring pouvez poser des confilts avec le port USB de mermoire .
pour le reste cela semble bon ?

cordialement

UART0 est l'UART réservé au téléversement et Serial Monitor, donc bien évidemment que cela va poser un problème.

ok donc par d'autre solution UART1 meme en reassignant les pin ?

sinon le reste vous semble pas trop mal

UART1 en réassignant les pins, ou UART2.

UART2, sur esp32 mini elle n'est pas presente !

Donc, reste UART1 en réassignant RX TX.

bonjour
si j'ai bien tout compris,
Pour l'utilisateur que je suis, c'est deroutant de mettre des pins et fonctions soient disant disponibles mais certaines ne pouvant pas etre utiliser simplement car elles interferent avec le fonctionnement du module ( UART0= monitoring et .d'autre sur la mgestion de la memoire flash )
De plus d'apres le mapping , on a que 3 pwm sur ce module D1.

pour rappel , le projet necessite en entrées/sorties
minima 1 entrée DATA via des TSOP 4856 (5v ou 3.3v) mais le besoin irait vers 4 entrées DATA pour 4 lignes de TSOP
minima 1 sortie PWM via IRLD110/024 vers LEd IR (5v) mais le besoin irait vers 4 sorties PWM pour MOSFET IRLD110/024
1 sortie UART (TX,RX) pour un module son MINIPLAYER (5v)
1 sortie digit pour commander 12 (max) LED WS2812B (5V)

avec tout ca ,
cela remet peut etre en cause le type de carte ESP32 que j'avais choisi car j'ai peur de me brider des le debut du projet avec une D1 ?

Bonjour @didier2010

(fil de discussion déplacé dans la partie principaledu forum Francophone)

La carte fournit un nombre conséquent de GPIO avec ses 4 rangées de pins !

Prendre avec un estprit critique le 'pin out' propsoé, les vraies contraintes, le réel potentiel de la carte est défii dans l'article du site Rando Nerd Tutorial mentionné au dessus au message #2.

Pour moi le 'pin out' proposé est une 'suggestion du dessinateur sur de nomreux points...

exemple :

UART2, sur esp32 mini elle n'est pas presente !

Non . l'UART2 peu être aiguillé sur presque n'importe quelle pin.
UART1 en 9 et 10,? ....c'sst une des nombeuses possibilités....

De plus d'apres le mapping , on a que 3 pwm sur ce module D1.

Idem

Le matriçage des E/S présent dans les ESP32 implique de relativiser les divers 'pinout' proposés pour les cartes, pour diverses fonctions ils ne présentent q'une possibilité , ne pouvant les représenter toutes !

Faire son propre 'pinout'' en tenant compte :
-des fonctionnalités offerte par chacun des GPIO pris un à un. (propriéié des ESP32)
-du schéma de la carte qui montre quels GPIO sont 'réquisitionnés ' sur la carte pour l'interface USB , la ou les LEDS.....d'ou l'intérêt d'avoir une carte dont le schéma est accessible....

bonjour al1ch
si je comprends bien la presentation graphique sur le mapping reste une interpretation de celui ou de celle qui l'a fait en bridant les capacite des pin de esp32.

Faire son propre 'pinout'' en tenant compte :
-des fonctionnalités offerte par chacun des GPIO pris un à un. (propriéié des ESP32)
-du schéma de la carte qui montre quels GPIO sont 'réquisitionnés ' sur la carte pour l'interface USB , la ou les LEDS.....d'ou l'intérêt d'avoir une carte dont le schéma est accessible....

dois je comprendre qu'il faut prendre mapping contructeur sur chaque GPIO pour ESP32 de expressif et faire son propre mapping vis à vis de ses besoins. autrement dit , sur la carte proposée dans ce post les 3 PMW ou UART 0 et 1 indiquées sont une limitation du schema et non des capacites de esp32 ?
en utilisation les gpio dans le lien ci-dessous .

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

par contre toutes les gpio sont elles accessibles suivant le modele mecanique des cartes proposées ?
didier2010

En #2 je t'ai proposé un lien avec des exemples :

#include <HardwareSerial.h>

HardwareSerial SerialPort(2); // use UART2

char number  = ' ';
int LED = 15;

void setup()
{
  SerialPort.begin(15200, SERIAL_8N1, 16, 17);
  pinMode(LED, OUTPUT);
}
void loop()
{
  if (SerialPort.available())
  {
    char number = SerialPort.read();
    if (number == '0') {
      digitalWrite(LED, LOW);
    }
    if (number == '1') {
      digitalWrite(LED, HIGH);
    }
  }
}

Cet exemple utilise 16 & 17 comme pins RX et TX.
Pour RX et TX, la seule restriction est de choisir des GPIOs non problématiques, comme celles marquées "connected to the integrated SPI flash", ou "boot fails if pulled high, strapping pin".
Pour TX il y en a une autre : la GPIO ne doit pas être "input only".
https://randomnerdtutorials.com/esp32-pinout-reference-gpios/

C'est presque ça , mais il faut nuancer et distinguer ce qui, sur la carte en question est figé et ce qui reste libre.

exemple :

A la mise sous-tension l'ESP32 , peut par conception , utiliser à la demande l'UART0 pour son bootloader afin de charger le code perso. Cet UART0 est , via les GPIO1 et 3, relié à la puce d'interface USB . Il vaut mieux ne pas interférer avec cela et donc délaisser ces deux GPIO sauf impératif particulier.

Pour les PWM c'est totalement différent, les 16 canaux de l'ESP32 peuvent être 'sortis' sur n'importe quelle broche capable de fonctionner en sortie. les 4 GPIOs indiqué PWM sur le 'pinout' sont une possibilité parmi d'aures, toutes réalisables à priori sur ta carte ....si elles peuvent cohabiter avec tes autres choix.

Autre exemple :
le dessinateur du pin-out a fait déboucher l'UART1 sur les GPIO 9 et 10..... si tu en as envie tu peux , avce ta carte, attribuer les 2 GPIO 9 et 10 à UART2 avec Serial2.begin(115200, 10,9) et envoyer UART1 ailleurs !

Il faut distinguer les possibilités et contraintes à 3 niveaux :

-de l'ESP32 lui même présent dans le module WROOM32

-celles , un peu petit peu plus restrictives, de ta carte vu le câblage de certains composants associés à l'ESP32 (UART0 relié au CP2102 ou CH340 via GPIO 1 et GPIO3)

-celles , majoritairement fictives, du 'pinout' arbitraire suggéré (trop restrictif par par rapport à l'éventail des possibilités de la carte et de l'utilisation de l'ESP32 qu'elle fait)

Au final : oublies les fausses contraintes d'un 'pinout' genre 'suggestion de présentation'.... avec ta carte tu as le choix.... et l'embarras du choix !

les 'pinouts' viennent des microcontrlleurs 8 bits, (PIc, AVR...) assez rigides dans le positionnement des fonctionnalités sur les broches. Avec la flexibilité 'hardware' des micros 32 bits, dont les ESP32, l'exercice devient impossible. Tout 'pinout' est en garde partie 'indicatif'

bonjour al1CH, hbachetti
merci pour cette eclairage . je continu à fouiller .

c'est identifié pour GPIO 6 à 11 ne pas utiliser car SPI FLASH

Dans le datasheet esp32 de espressif ( 70 pages), item 2.2, page 15, " pin description" , il faut prendre cela comme la reference pour la description des pin !

part contre , je lis " strapping pin "à plusieurs endroit .
je comprends pas cette expression " la pin doit elle etre mise mecaniquement par un fils à telle ou telle polarité ?

'strapping pins' = les niveaux logiques présents au moment de la mise sous tension peuvent influencer le comportement de la puce, comme par exemple démarrer en mode bootloder ou pas. Pour moi ce snt des pins à laisser à priori tranquilles et n'utiliser, avec précaution qu'en cas de nécessité absolue. On s'assure alors d'en faire un usage ne perturbant pas le fonctionnement de l'ESP32

Sur la plupart des cartes un transistor et/ou un Bouton poussoir 'Flash' s'ocuppent de la 'strapping pin' GPIO0 pour aciver le bootloader

Dans le datasheet esp32 de espressif ( 70 pages), item 2.2, page 15, " pin description" , il faut prendre cela comme la reference pour la description des pin !

Oui mais au quotidien le résumé fait sur le site Random Nerd
ce site en complément
ainsi que celui-ci
me parait suffire, quitte à aller dans la Data Sheet pour approfondir en cas de besoin , lever les doutes....

Le côté pénible, c'est que selon le modèle d'ESP32 (qui est le nom d'une famille nombreuse de microcontrôleurs) ce n'est pas toujours GPIO 0.
Toujours resté attentif. Regarder sur quelle broche est raccordé le bouton poussoir pour le flashage du programme. Le juge de paix pour les strapping pins : la datasheet du microcontrôleur.

@didier2010
Le microcontrôleur ESP32 est un micro très particulier.
C'est un 32 bits, mais absolument pas un ARM.
C'est un micro "à terminer" par le client. Le client, c'est Espressif qui achète de la propriété intellectuelle à Cadence, termine le micro à sa sauce, et le fait fabriquer par Cadence.

+1

aujourd'hui deux sous-familles

coeur(s) Xtensa / Cadence : boot par GPIO0 (ESP32, ESP32-S2, ESP32-S3...)
coeur RISC-V : boot par GPIO9 (ESP32-C3, ESP32-C2.....)

bonsoir à tous
j'ai une synthese des pins en tenant compte des informations prises sur les 3 liens du post.
il reste bien sur à etre verifié
esp32 pin synthese.pdf (425.1 KB)

j'ai mis en bleu , partie de gauche ce que j'envisage sur utilisation des GPIO.

votre avis sur les choix.

cordialement

Beau travail

il me semble que ça fait une base solide pour .... faire les essais.... avant de lancer la fabrication éventuelle d'un circuit imprimé.

I2C gardé en réserve :+1:

plusieurs entrées analogiques d'ADC1 gardées réserve :+1: (utilisables en même temps que le WiFi)

perso : j'aurai tendance à garder sous le coude les 4 broches du VSPI qui me semble souvent utilisé avec ses broches par défaut (5, 18, 19, 23) dans les exemples et librairies courantes.

bonsoir al1ch
merci.
Pour les essais, effectivement a faire . Incourtounable
Concernant le SPi , si j'ai tout compirs il y a 3 spi , je suppose que SPI, VSPI(SPI3) et HSPI ( SPI2)
tu me conseilles donc de basculer HSPI vers VSPI

cordialement