Sinta -se à vontade para abrir um problema ou relações públicas se tiver alguma sugestão. E se você achou útil, poderá visitar um desses links:
Eu sempre usei esta página de nerds aleatórios como uma referência para a qual os pinos ESP32 são seguros de usar.
Mas eu não vi um semelhante para o ESP32 -S3 - então pensei em fazer um!
A maioria dessas informações é retirada da folha de dados ESP32-S3-WOLOM com informações adicionais da folha de dados ESP32-S3.
Você pode baixar uma versão em PDF de alta resolução desta imagem aqui.
A imagem acima é um módulo Wroom com os pinos rotulados. Bold indica o comportamento padrão de cada pino. Eu me dividi alguns dos nomes de pinos mais esotéricos, mas você pode encontrar a lista completa na folha de dados.
Há muito mais flexibilidade com o ESP32-S3, para que a maioria dos pinos possa ser usada para qualquer periférico. No entanto, ainda existem alguns pinos que têm algum comportamento engraçado.
Evite isso a menos que você não tenha escolha.
Nome do pino | Detalhes |
---|---|
Gpio0 | Mantenha isso baixo durante a inicialização para inserir o modo de download do firmware. |
Gpio3 | Em combinação com EFUSES, controla o comportamento padrão dos pinos JTAG. Seguro de usar, a menos que você esteja mexendo com efuses |
GPIO45 | Vdd_spi - melhor deixe isso desconectado |
GPIO46 | ROM Mensagens Impressão - Melhor deixar isso também desconectado. Causa problemas com o download do firmware (consulte a tabela de controle do modo de inicialização abaixo) |
Você pode usar esses pinos como entradas ou saídas assim que o ESP for inicializado. Mas esteja ciente dos resistores de pull Up/Down (veja abaixo).
Se você deseja usá -los como entradas, certifique -se de não entrar em conflito com as configurações padrão durante a inicialização.
Por exemplo, é seguro ter um botão conectado ao gpio0 e usar esse botão no seu código. Mas se você segurar o botão pressionado durante a inicialização, ele entrará no modo de download do firmware.
Se você deseja usá -los como saídas, esteja ciente do puxar padrão ou puxar os resistores para baixo.
Modo de inicialização | Gpio0 | GPIO46 |
---|---|---|
Boot SPI (padrão) | 1 | Qualquer valor |
Baixar inicialização | 0 | 0 |
Combinação inválida | 0 | 1 |
Pino de amarrar | Configuração padrão | Valor de bit |
---|---|---|
Gpio0 | Pull-up | 1 |
Gpio3 | Flutuante | - |
GPIO45 | Puxar para baixo | 0 |
GPIO46 | Puxar para baixo | 0 |
Estes podem usar pinos GPIO no ESP32-S3.
GPIO19, GPIO20 - Eles são usados para a conexão USB.
Para módulos que incluem PSRAM octal (qualquer módulo que possua 8 MB PSRAM), você não deve usar GPIO35, GPIO36 ou GPIO37.
Gpio39, gpio40, gpio41, gpio42
O comportamento desses pinos é determinado pelos EFUSes em conjunto com o GPIO3. Por padrão, se você ainda não queima nenhum efuses, esses pinos são seguros de usar. O JTAG estará disponível no USB.
Se você deseja usar esses pinos para JTAG, deve queimar alguns efuses e controlar o GPIO3 no início. Consulte a seção 2.6.4 da folha de dados para obter detalhes completos.
GPIO43, GPIO44
Eles são padrão para o UART0 até que sejam usados pelo seu código.
Os canais ADC estão todos em pinos fixos e, se você estiver usando o WiFi, não pode usar a unidade ADC 2
Os pinos para a unidade ADC 1 são:
Número 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 |
Não há DAC no ESP32 -S3 - você pode simular a saída analógica usando PDM PWM ou I2S.
Os pinos a seguir têm falhas durante a energia.
GPIO1, GPIO2, GPIO3, GPIO4, GPIO5, GPIO6, GPIO7, GPIO8, GPIO9, GPIO10, GPIO11, GPIO12, GPIO13, GPIO14, GPIO15, GPIO16, GPIO17:
GPIO18:
Gpio19, gpio20:
Veja a Tabela 2-2 aqui
Se você vê falhas de power up em alguns pinos ao executar o "seu" software, mas não ao executar um mundo simples de olá, isso pode ser um erro comum:
gpio_reset_pin ( RELAY1_SC );
gpio_set_direction ( RELAY1_SC , GPIO_MODE_OUTPUT );
Esta sintaxe pode ser encontrada, por exemplo: Blink_example_main.c
Em vez disso, use esta sintaxe:
//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 );
Esta sintaxe pode ser encontrada, por exemplo: gpio_example_main.c
Há casos em que o pino é por padrão conectado a um domínio de potência A +3,3V ou A +1,8V. Os exemplos são gpio20 (d+) ou gpio48.
Você pode desligá -los em um estágio muito inicial no bootloader:
Veja aqui
com por exemplo, o seguinte código:
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 );
}
Há uma planilha realmente útil aqui fornecida por Mark Nowell com listas de módulos ESP32-S3 e suas pinutas.
Nome do pino | Número do pino | Tipo | Descrição |
---|---|---|---|
Gnd | 1,40 | P | Gnd |
Epad | 41 | P | Gnd |
3v3 | 2 | P | Fonte de energia |
En | 3 | EU | High: On, Ativa o chip. Baixo: Off, o chip pode desligar. Nota: Não deixe o pino flutuando. |
Gpio0 | 27 | E/o/T. | Rtc_gpio0, gpio0 |
Gpio1 | 39 | E/o/T. | Rtc_gpio1, gpio1 , touch1, adc1_ch0 |
Gpio2 | 38 | E/o/T. | Rtc_gpio2, gpio2 , touch2, adc1_ch1 |
Gpio3 | 15 | E/o/T. | Rtc_gpio3, gpio3 , touch3, adc1_ch2 |
Gpio4 | 4 | E/o/T. | Rtc_gpio4, gpio4 , touch4, adc1_ch3 |
Gpio5 | 5 | E/o/T. | Rtc_gpio5, gpio5 , touch5, adc1_ch4 |
Gpio6 | 6 | E/o/T. | Rtc_gpio6, gpio6 , touch6, adc1_ch5 |
Gpio7 | 7 | E/o/T. | Rtc_gpio7, gpio7 , touch7, adc1_ch6 |
Gpio8 | 12 | E/o/T. | Rtc_gpio8, gpio8 , touch8, adc1_ch7, subespics1 |
Gpio9 | 17 | E/o/T. | Rtc_gpio9, gpio9 , touch9, adc1_ch8, fspihd, subspihd |
Gpio10 | 18 | E/o/T. | Rtc_gpio10, gpio10 , touch10, adc1_ch9, fspics0, fspiio4, subespics0 |
Gpio11 | 19 | E/o/T. | Rtc_gpio11, gpio11 , touch11, adc2_ch0, fspid, fspiio5, subspid |
Gpio12 | 20 | E/o/T. | Rtc_gpio12, gpio12 , touch12, adc2_ch1, fspiclk, fspiio6, subspiclk |
Gpio13 | 21 | E/o/T. | Rtc_gpio13, gpio13 , touch13, adc2_ch2, fspiq, fspiio7, subspiq |
Gpio14 | 22 | E/o/T. | Rtc_gpio14, gpio14 , touch14, adc2_ch3, fspiwp, fspidqs, subspiwp |
Gpio15 | 8 | E/o/T. | RTC_GPIO15, GPIO15 , U0RTS, ADC2_CH4, XTAL_32K_P |
GPIO16 | 9 | E/o/T. | RTC_GPIO16, GPIO16 , U0CTS, ADC2_CH5, XTAL_32K_N |
Gpio17 | 10 | E/o/T. | Rtc_gpio17, gpio17 , u1txd, adc2_ch6 |
GPIO18 | 11 | E/o/T. | Rtc_gpio18, gpio18 , u1rxd, adc2_ch7, clk_out3 |
USB_D- | 13 | E/o/T. | RTC_GPIO19, GPIO19, U1RTS, ADC2_CH8, CLK_OUT2, USB_D- |
USB_D+ | 14 | E/o/T. | Rtc_gpio20, gpio20, u1cts, adc2_ch9, clk_out1, usb_d+ |
Gpio21 | 23 | E/o/T. | RTC_GPIO21, GPIO21 |
SPICS1 | E/o/T. | SPICS1, GPIO26 | |
Gpio33 | E/o/T. | Gpio33 | |
Gpio34 | E/o/T. | Gpio33 | |
GPIO35 | 28 | E/o/T. | Spiio6, gpio35 , fspid, subespid |
GPIO36 | 29 | E/o/T. | Spiio7, gpio36 , fspiclk, subspiclk |
Gpio37 | 30 | E/o/T. | SPIDQS, GPIO37 , FSPIQ, SUBSPIQ |
GPIO38 | 31 | E/o/T. | Gpio38 , fspiwp, subespiwp |
Mtck | 32 | E/o/T. | Mtck , gpio39, clk_out3, subespics1 |
Mtdo | 33 | E/o/T. | Mtdo , gpio40, clk_out2 |
Mtdi | 34 | E/o/T. | Mtdi , gpio41, clk_out1 |
Mtms | 35 | E/o/T. | Mtms , gpio42 |
U0txd | 37 | E/o/T. | U0txd , gpio43, clk_out1 |
U0rxd | 36 | E/o/T. | U0rxd , gpio44, clk_out2 |
GPIO45 | 26 | E/o/T. | GPIO45 |
GPIO46 | 16 | E/o/T. | GPIO46 |
Gpio47 | 24 | E/o/T. | Spiclk_p_diff, gpio47 , subspiclk_p_diff |
GPIO48 | 25 | E/o/T. | Spiclk_n_diff, gpio48 , subspiclk_n_diff |
Para pessoas que preferem conteúdo de vídeo - você pode assistir a uma versão em vídeo aqui: