N'hésitez pas à ouvrir un problème ou un PR si vous avez des suggestions. Et si vous l'avez trouvé utile, vous aimerez peut-être visiter l'un de ces liens:
J'ai toujours utilisé cette page de nerds aléatoires comme référence pour laquelle les broches ESP32 sont en sécurité à utiliser.
Mais je n'en ai pas vu un similaire pour l'ESP32-S3 - donc j'ai pensé que je devrais en faire un!
La majorité de ces informations sont tirées de la fiche technique ESP32-S3-WORM avec des informations supplémentaires de la fiche technique ESP32-S3.
Vous pouvez télécharger une version PDF haute résolution de cette image ici.
L'image ci-dessus est un module Wroom avec les broches étiquetées. Bold indique le comportement par défaut de chaque broche. J'ai comité certains des noms des broches les plus ésotériques, mais vous pouvez trouver la liste complète dans la fiche technique.
Il y a beaucoup plus de flexibilité avec l'ESP32-S3, donc la plupart des broches peuvent être utilisées pour n'importe quel périphérique. Cependant, il y a encore des épingles qui ont un comportement amusant.
Évitez-les à moins que vous n'ayez le choix.
Nom de broche | Détails |
---|---|
Gpio0 | Maintenez ce bas pendant le démarrage pour entrer le mode de téléchargement du firmware. |
Gpio3 | En combinaison avec EFUS, contrôle le comportement par défaut des broches JTAG. Sécurité à utiliser à moins que vous ne jouiez avec EFUS |
GpiO45 | Vdd_spi - mieux laisser ce déconnecté |
Gpio46 | Impression des messages ROM - Mieux vaut également laisser cette déconnecté. Provoque des problèmes avec le téléchargement du micrologiciel (voir le tableau de contrôle du mode de démarrage ci-dessous) |
Vous pouvez utiliser ces broches comme entrées ou sorties une fois que l'ESP a démarré. Mais soyez conscient des résistances de traction vers le haut / vers le bas (voir ci-dessous).
Si vous souhaitez les utiliser comme entrées, assurez-vous de ne pas entrer en conflit avec les configurations par défaut pendant le démarrage.
Par exemple, il est sûr d'avoir un bouton connecté à GPIO0 et d'utiliser ce bouton dans votre code. Mais si vous maintenez le bouton en bas pendant le démarrage, il entrera dans le mode de téléchargement du firmware.
Si vous souhaitez les utiliser comme sorties, soyez conscient des résistances de pull up ou de la baisse par défaut.
Mode de démarrage | Gpio0 | Gpio46 |
---|---|---|
SPI Boot (par défaut) | 1 | Toute valeur |
Télécharger le démarrage | 0 | 0 |
Combinaison non valide | 0 | 1 |
Épingle | Configuration par défaut | Valeur bit |
---|---|---|
Gpio0 | Tirer vers le haut | 1 |
Gpio3 | Flottant | - |
GpiO45 | Tire-tête | 0 |
Gpio46 | Tire-tête | 0 |
Ceux-ci peuvent utiliser toutes les broches GPIO sur ESP32-S3.
GPIO19, GPIO20 - Ceux-ci sont tous deux utilisés pour la connexion USB.
Pour les modules qui incluent le PSRAM octal (tout module qui a 8 Mo de PSRAM), vous ne devez pas utiliser GPIO35, GPIO36 ou GPIO37.
GPIO39, GPIO40, GPIO41, GPIO42
Le comportement de ces broches est déterminé par EFUS en conjonction avec GPIO3. Par défaut, si vous n'avez pas encore brûlé EFUS, ces épingles sont sûres à utiliser. JTAG sera disponible sur USB.
Si vous souhaitez utiliser ces épingles pour JTAG, vous devez brûler des EFUS et contrôler GPIO3 au démarrage. Voir la section 2.6.4 de la fiche technique pour plus de détails.
GPIO43, GPIO44
Ceux-ci par défaut UART0 jusqu'à ce qu'ils soient utilisés par votre code.
Les canaux ADC sont tous sur des broches fixes, et si vous utilisez le wifi, vous ne pouvez pas utiliser l'unité ADC 2
Les broches pour ADC Unit 1 sont:
Numéro GPIO | Canal ADC |
---|---|
Gpio1 | Adc1_ch0 |
Gpio2 | Adc1_ch1 |
Gpio3 | Adc1_ch2 |
Gpio4 | Adc1_ch3 |
Gpio5 | Adc1_ch4 |
Gpio6 | Adc1_ch5 |
Gpio7 | Adc1_ch6 |
Gpio8 | Adc1_ch7 |
Gpio9 | Adc1_ch8 |
Il n'y a pas de DAC sur l'ESP32-S3 - vous pouvez simuler la sortie analogique à l'aide de PWM ou I2S PDM.
Les épingles suivantes ont des pépins pendant la puissance.
GPIO1, GPIO2, GPIO3, GPIO4, GPIO5, GPIO6, GPIO7, GPIO8, GPIO9, GPIO10, GPIO11, GPIO12, GPIO13, GPIO14, GPIO15, GPIO16, GPIO17:
GPIO18:
GPIO19, GPIO20:
Voir le tableau-2-2 ici
Si vous voyez des problèmes d'alimentation sur certaines broches lorsque vous exécutez "votre" logiciel, mais pas lorsque vous exécutez un simple Hello World, cela pourrait être une erreur courante:
gpio_reset_pin ( RELAY1_SC );
gpio_set_direction ( RELAY1_SC , GPIO_MODE_OUTPUT );
Cette syntaxe peut être trouvée, par exemple: blink_example_main.c
Utilisez plutôt cette syntaxe:
//zero-initialize the config structure.
gpio_config_t io_conf = {};
//disable interrupt
io_conf . intr_type = GPIO_INTR_DISABLE ;
//set as output mode
io_conf . mode = GPIO_MODE_OUTPUT ;
//bit mask of the pins that you want to set,e.g.GPIO18/19
io_conf . pin_bit_mask = ( 1ULL << RELAY1_SC );
//disable pull-down mode
io_conf . pull_down_en = 0 ;
//disable pull-up mode
io_conf . pull_up_en = 0 ;
//configure GPIO with the given settings
gpio_config ( & io_conf );
Cette syntaxe peut être trouvée, par exemple: gpio_example_main.c
Il y a des cas où la broche est par défaut connectée à un domaine d'alimentation + 3.3 V ou A + 1,8 V. Les exemples sont GPIO20 (D +) ou GPIO48.
Vous pouvez les éteindre à un stade très précoce de Bootloader:
voir ici
avec par exemple le code suivant:
void bootloader_before_init ( void ) {
/* Keep in my mind that a lot of functions cannot be called from here
* as system initialization has not been performed yet, including
* BSS, SPI flash, or memory protection. */
ESP_LOGI ( "HOOK" , "This hook is called BEFORE bootloader initialization" );
gpio_hal_iomux_func_sel ( GPIO_PIN_MUX_REG [ GPIO_NUM_20 ], PIN_FUNC_GPIO );
esp_rom_gpio_pad_select_gpio ( GPIO_NUM_48 );
gpio_ll_output_enable ( & GPIO , GPIO_NUM_48 );
gpio_ll_set_level ( & GPIO , GPIO_NUM_48 , 0 );
}
Il y a une feuille de calcul vraiment pratique ici fournie par Mark Nowell avec des listes de modules ESP32-S3 et leurs épingles.
Nom de broche | Numéro d'épingle | Taper | Description |
---|---|---|---|
GND | 1,40 | P | GND |
EPAD | 41 | P | GND |
3V3 | 2 | P | Alimentation électrique |
En | 3 | je | High: ON, permet à la puce. Faible: Off, la puce se propage. Remarque: ne laissez pas la broche flottante. |
Gpio0 | 27 | E / S | RTC_GPIO0, GPIO0 |
Gpio1 | 39 | E / S | RTC_GPIO1, GPIO1 , Touch1, ADC1_CH0 |
Gpio2 | 38 | E / S | RTC_GPIO2, GPIO2 , Touch2, ADC1_CH1 |
Gpio3 | 15 | E / S | Rtc_gpio3, gpio3 , touch3, adc1_ch2 |
Gpio4 | 4 | E / S | RTC_GPIO4, GPIO4 , Touch4, ADC1_CH3 |
Gpio5 | 5 | E / S | RTC_GPIO5, GPIO5 , Touch5, ADC1_CH4 |
Gpio6 | 6 | E / S | RTC_GPIO6, GPIO6 , Touch6, ADC1_CH5 |
Gpio7 | 7 | E / S | RTC_GPIO7, GPIO7 , Touch7, ADC1_CH6 |
Gpio8 | 12 | E / S | RTC_GPIO8, GPIO8 , Touch8, ADC1_CH7, Subspics1 |
Gpio9 | 17 | E / S | RTC_GPIO9, GPIO9 , Touch9, ADC1_CH8, FSPIHD, subspihd |
Gpio10 | 18 | E / S | RTC_GPIO10, GPIO10 , Touch10, ADC1_CH9, FSPICS0, FSPIIO4, Subspics0 |
Gpio11 | 19 | E / S | RTC_GPIO11, GPIO11 , Touch11, ADC2_CH0, FSPID, FSPIIO5, subspid |
Gpio12 | 20 | E / S | RTC_GPIO12, GPIO12 , TOUCH12, ADC2_CH1, FSPICLK, FSPIIO6, SUBSPICLK |
Gpio13 | 21 | E / S | RTC_GPIO13, GPIO13 , Touch13, ADC2_CH2, FSPIQ, FSPIIO7, subspiq |
GPIO14 | 22 | E / S | RTC_GPIO14, GPIO14 , Touch14, ADC2_CH3, FSPIWP, FSPIDQS, subspiwp |
GPIO15 | 8 | E / S | RTC_GPIO15, GPIO15 , U0RTS, ADC2_CH4, XTAL_32K_P |
Gpio16 | 9 | E / S | RTC_GPIO16, GPIO16 , U0CTS, ADC2_CH5, XTAL_32K_N |
GPIO17 | 10 | E / S | RTC_GPIO17, GPIO17 , U1TXD, ADC2_CH6 |
GPIO18 | 11 | E / S | RTC_GPIO18, GPIO18 , U1RXD, ADC2_CH7, CLK_OUT3 |
Usb_d- | 13 | E / S | RTC_GPIO19, GPIO19, U1RTS, ADC2_CH8, CLK_OUT2, USB_D- |
Usb_d + | 14 | E / S | RTC_GPIO20, GPIO20, U1CTS, ADC2_CH9, CLK_OUT1, USB_D + |
Gpio21 | 23 | E / S | RTC_GPIO21, GPIO21 |
SPICS1 | E / S | SPICS1, GPIO26 | |
Gpio33 | E / S | Gpio33 | |
Gpio34 | E / S | Gpio33 | |
Gpio35 | 28 | E / S | SPIIO6, GPIO35 , FSPID, subspid |
Gpio36 | 29 | E / S | SPIIO7, GPIO36 , fspiclk, subspiclk |
Gpio37 | 30 | E / S | SPIDQS, GPIO37 , FSPIQ, subspiq |
Gpio38 | 31 | E / S | GPIO38 , FSPIWP, subspiwp |
MTCK | 32 | E / S | MTCK , GPIO39, CLK_OUT3, SUBSPICS1 |
Mtdo | 33 | E / S | MTDO , GPIO40, CLK_OUT2 |
Mtdi | 34 | E / S | MTDI , GPIO41, CLK_OUT1 |
MTM | 35 | E / S | MTMS , GPIO42 |
U0txd | 37 | E / S | U0TXD , GPIO43, CLK_OUT1 |
U0rxd | 36 | E / S | U0rxd , gpio44, clk_out2 |
GpiO45 | 26 | E / S | GpiO45 |
Gpio46 | 16 | E / S | Gpio46 |
GPIO47 | 24 | E / S | SPICLK_P_DIFF, GPIO47 , subspiclk_p_diff |
GpiO48 | 25 | E / S | SPICLK_N_DIFF, GPIO48 , subspiclk_n_diff |
Pour les personnes qui préfèrent le contenu vidéo - vous pouvez regarder une version vidéo ici: