Manual
do
Maker
.
com
Estou usando já há algum tempo algumas placas com ESP32S3, vilipendiando por todo esse tempo o poder dessa placa. Somente hoje, durante o ensaio do artigo "Como usar mais de um display SPI?" tive a necessidade de dar real atenção à placa. E vi que dava outro artigo: Como usar SPI no ESP32S3?
No ESP32 tradicional, temos 1 periférico SPI. No ESP32S2 e ESP32S3 as coisas mudam, mas vamos falar de ESP32S3.
O ESP32S3 possui 4 periféricos SPI, sendo que SPI0 e SPI1 são usados internamente para gerenciamento da memória, ficando disponíveis para o usuário o SPI2 e SPI3. Os SPI disponíveis são o VSPI e HSPI.
O SPI2 tem 6 linhas CS, enquanto SPI3 tem 3 linhas CS. Cada CS pode ser usado para controlar um dispositivo SPI.
Usando o framework do Arduino (seja na IDE do Arduino ou no PlatformIO) podemos facilmente definir pinos alternativos; isto é, podemos definir qualquer pino para o SPI:
#ifdef ALTERNATE_PINS
#define VSPI_MISO 2
#define VSPI_MOSI 4
#define VSPI_SCLK 0
#define VSPI_SS 33
#define HSPI_MISO 26
#define HSPI_MOSI 27
#define HSPI_SCLK 25
#define HSPI_SS 32
#else
#define VSPI_MISO MISO
#define VSPI_MOSI MOSI
#define VSPI_SCLK SCK
#define VSPI_SS SS
#define HSPI_MISO 12
#define HSPI_MOSI 13
#define HSPI_SCLK 14
#define HSPI_SS 15
#endif
No else podemos ver que existe uma definição de pinos padrão. Mas que pinos são MISO, MOSI, SCK e SS (CS)? - Se estiver usando VS Code com PlatformIO, basta parar o mouse sobre as definições. Se estiver utilizando a IDE do Arduino, segure a tecla Ctrl e clique sobre a definição. Isso abrir o arquivo pins_arduino.h (para isso, você já deve estar com a placa ESP32S3 Dev Module selecionada). E nesse caso poderemos ver:
static const uint8_t TX = 43;
static const uint8_t RX = 44;
static const uint8_t SDA = 8;
static const uint8_t SCL = 9;
static const uint8_t SS = 10;
static const uint8_t MOSI = 11;
static const uint8_t MISO = 13;
static const uint8_t SCK = 12;
Já aproveitei para colar o I2C e uma UART, porque certamente esses serão dúvidas para muitos (como era para mim também).
Tem um sketch de exemplo contendo os defines expostos mais acima. Basta abrir o sketch indo em Arquivos > Exemplos > SPI > Múltiplos barramentos SPI. O exemplo mostra uma comunicação SPI, fazendo a transmissão diretamente no sketch.
No próximo artigo mostrarei como controlar múltiplos displays SPI usando o ESP32S3, portanto, esse artigo é uma referência para a configuração inicial do SPI. Se esquecer, só procurar na caixa de Busca rápida por SPI ou ESP32S3.
Até o próximo artigo!
Autor do blog "Do bit Ao Byte / Manual do Maker".
Viciado em embarcados desde 2006.
LinuxUser 158.760, desde 1997.