Olá.

No tutorial de hoje teremos uma introdução à placa T-PicoC3 ESP32-C3/RP2040 - LILYGO. Daremos os primeiros passos com esta placa, mostrando suas características e aplicando em nossos projetos do dia a dia.

Caso deseje ir para alguma parte especifica deste tutorial, clique em um dos links a baixo para ser redirecionado para o trecho da página:

Introdução à placa T-PicoC3 - ESP32-C3/RP2040 – LILYGO

Principais Características

Porque tem dois microcontroladores? Quais as vantagens de se utilizar dois?

Protocolo de comunicação entre os dois microcontroladores

Configurações para uso da placa T-PicoC3 - ESP32-C3/RP2040 – LILYGO

Carregando um programa de teste de LED Blynk

Código original da T-PicoC3

Teste do display da placa T-PicoC3 - ESP32-C3/RP2040 – LILYGO e o sensor AHT21

Conclusão

 

Introdução à placa T-PicoC3 - ESP32-C3/RP2040 – LILYGO

Essa é uma placa que possui grande versatilidade vinda de fabrica. Com um RP2040 da Raspiberry PI como o principal microcontrolador da placa, ela também conta com o módulo ESP32-C3 MCU que suporta Wi-Fi, Bluetooth 5.0 e Bluetooth Low Energy Além disso, esta placa também conta com um display colorido IPS LCD ST7789V de 1.14 polegadas.

Placa T-PicoC3

Como visto acima, os dois microcontroladores possuem seus próprios pinos e se conectam através dos pinos TX e RX.

 

Principais Características

- Modelo: Placa T-PicoC3 - ESP32-C3 / RP2040 – LILYGO;

- Microcontrolador RP2040: Dual ARM Cortex-M0+;

- Microcontrolador ESP32-C3: Support WiFi, Bluetooth V5.0+BLE;

- Linguagem de programação: C/C++, MicroPython;

- Flash externa (RP2040):  4Mb;

-Flash externa (ESP32-C3):  4Mb;

-Display: Controlador ST7789 ligado ao RP2040 via SPI;

-Conector: USB-C;

-Dimensões: 2,4 x 5,3cm;

 

Porque a placa tem dois microcontroladores? Quais as vantagens de se utilizar dois?

A programação, seja para qualquer tipo de aplicação, é algo sequencial. Todo comando é executado em sequencia, um de cada vez. No entanto existem situações em que é necessário que um mesmo comando seja realizado em conjunto com outro.

A ideia por trás desse sistema com dois microcontroladores é utilizar o RP2040 como processador principal que controlará os sensores e atuadores. E o ESP32-C3 fica atrelado à função de comunicação, já que o seu firmware vem de fábrica com o padrão EspressIf que é utilizado para comandos AT.

O grande diferencial desta placa é a sua capacidade de trabalhar com os dois microcontroladores, pois os dois conseguem realizar suas operações ao mesmo tempo, sem a necessidade de que um pare o trabalho do outro como ocorre em placas comuns que possuem módulos de Wi-Fi e Bluetooth.

Ela pode ser programada nas linguagens C, C++ e MicroPYthon.

Possui dois botões na placa interligados ao RP2040 através dos IO06 e IO07.

Seu display colorido IPS LCD ST7789V de 1.14 polegadas possui um controlador ST7789 que vem interligado ao RP2040 via SPI.  

Também possui conectores com acesso a 3 pinos de I/O do ESP32-C3 (1 deles com capacidade de ADC) e 15 pinos de I/O do RP2040 (incluindo 3 pinos com capacidade de ADC), e um conector para bateria que inclui carregador TP4054.

Ela também é capaz de medir a tensão da bateria que pode ser lida através de um pino ADC do RP2040.

 

Protocolo de comunicação entre os dois microcontroladores

O RP2040 e o ESP32-C3 são interligados através de UART.

Essa sigla significa Transmissor/Receptor assíncrono universal.  Esse protocolo de possibilita que dois dispositivos se comuniquem um recebendo e o outro transmitindo dados. Esse sistema necessita que estejam interligados os pinos TX/RX de uma placa nos pinos RX/TX da outra placa, também é necessário interligar os GNDs das placas.  O pino TX é o pino transmissor de dados e o pino RX é opino receptor. Por conta disso, liga-se TX no RX e o mesmo ao contrário.

 

Configurações para uso da placa T-PicoC3 – ESP32-C3/RP2040 – LILYGO 

Para iniciarmos os testes da placa T-PicoC3- ESP32-C3/ RP2040 LILYGO primeiro devemos entender como ela se conecta com ao computador.

Quando conectado ao USB tipo C, um LED azul ou verde acenderá:

Led da placa T-PicoC3

Para identificar qual é o microcontrolador que está operando, conecte o cabo.

Se o LED Azul acender, o microcontrolador que está funcionando é o RP2040 da Raspberry pi. Se o LED que acenda seja verde, o microcontrolador funcionando é o ESP32-C3.

Para identificar melhor, utilize uma fita e caneta para marcar no cabo, qual o lado da conexão acende o LED.

Led Azul e Led Verde T-PicoC3

Caso a opção que deseja seja diferente da que acendeu o LED, o truque é simples, remova o cabo e inverta a conexão girando o cabo 180°, para a respectiva cor do microcontrolador que deseja utilizar.

Mas fique atento, a própria empresa cita que pode haver problemas relacionados ao cabo, como cor do LED inversa ao microcontrolador desejado e até mesmo as duas luzes do LED acesas ao mesmo tempo. Se enfrentar qualquer um desses problemas, será necessário utilizar outro cabo.

 

Carregando um programa de teste LED Blynk 

Para iniciar esta etapa, é necessário que você tenha instalado em seu computador um programa que possa identificar e abrir arquivos .ZIP.

Com isso em mente, durante esta etapa será necessário à utilização de alguns exemplos simples para testar a placa. Esses exemplos podem ser encontrados no GitHub. Para acessa-los basta clicar no link abaixo:

https://github.com/Xinyuan-LilyGO/T-PicoC3

Abrindo o site, clique em Code e depois vá até a opção de download:

Github T-PicoC3

Após realizar o download, localize-o e extraia o conteúdo em uma pasta, clicando com o botão direito no ícone e indo em “Extract Files Here”.

Feito isso, abra a pasta de nome T-PicoC3-main: Pasta descompactada T-picoC3

Nela você vai encontrar diversas pastas. Dentro da pasta “Lib”, vamos encontrar todas as bibliotecas necessárias para conseguir utilizar a placa.

Neste tutorial você pode aprender a adicionar essas bibliotecas e placa utilizada neste tutorial na IDE Arduino:

https://curtocircuito.com.br/blog/Categoria%20Arduino/como-adicionar-placas-e-bibliotecas-a-ide-do-arduino

 

Para adicionar as placas na IDE Arduino você deve utilizar os seguintes endereços de referência que são adicionados em Arquivo/preferências:

Para o RP2040:

https://github.com/earlephilhower/arduino-pico/releases/download/global/package_rp2040_index.json

Por conter dois microcontroladores, é necessário adicionar o ESP32-C3:

https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json

Após adicionar os microcontroladores, você deve adicionar as bibliotecas necessárias para utilizar essa placa.

Todo este processo pode ser encontrado no tutorial citado mais a cima.

 

Quando adicionar as bibliotecas e, vá à pasta da biblioteca em documentos\arduino\libraries\TFT_eSPI. Ao abrir a pasta, entre na pasta User_Setups e procure por o arquivo “Setup135_ST7789.h”

Encontrar biblioteca dos displays

Copie este arquivo para a pasta TFT_eSPI.

Caminho biblioteca TFT_eSPI

Após isso, voltamos à pasta T-PicoC3-main e nela vamos até a pasta example:

Pasta T-picoC3

Dentro dessa pasta você vai encontrar outras três pastas, “Arduino”, “Factory” e “Microphyton”. 

Para testar o RP2040, vamos colocar nele um código simples de blink do seu LED. Indo a pasta “Arduino\blink” podemos encontrar o arquivo “blink.ino”

Abrindo ele, temos um código simples para o LED do RP2040 piscar.

É necessário que você tenha adicionado à placa na IDE do Arduino como citado acima.

Após adicionar a placa, vamos seleciona-la indo no menu “Ferramentas”, “Placa”, “Raspberry Pi RP2040 Boards(3.1.1)” e selecionar a placa Raspberry Pi PICO.

Localizar Placa IDE Arduino

Após isso vamos conectar o cabo na T-PicoC3 do lado A do RP2040 e LED azul.

Para iniciar no modo de gravação da placa, mantenha o botão de boot que fica na parte de trás da placa pressionado e pressione uma vez o botão de reset.

Você também consegue inicializar a placa em modo de gravação segurando seu botão de boot e plugando o cabo na entrada USB.

Modo de gravação T-picoC3

Feito isso, a placa entrará em modo de gravação e já podemos selecionar a porta dentro da IDE do Arduino.

Dentro da IDE do Arduino, vá em “Ferramentas”, “Porta” e selecione a porta “UF2 Board”.

Selecionar porta IDE Arduino

Após seleciona-la podemos compilar o código.

Com isso, podemos verificar o LED vermelho piscando na parte inferior da placa, logo abaixo do LED azul do RP2040.

Após este pequeno teste, vamos carregar o código que vem com a placa T-PICO-C3.

 

Código original da T-PICOC3

Para carregar o código original, precisamos acessar a pasta que extraímos os arquivos “T-PicoC3-main”. Após acessa-la encontre a pasta chamada Example.

Dentro dela, vamos entrar na pasta factory\pico\firmware e abrir o arquivo firmware.ino

Localizar código original T-PicoC3

Após abrir o arquivo, será necessário adicionar no código o comando #Include “Setup135_ST7789.h” para encontrar as configurações necessárias para utilizar o display LCD.

Incluir Biblioteca

A aba “Firmware” é responsável pelo código. picoImage.h é responsável por a imagem que aparece ao ligar a placa. pin_config.h é responsável pela configuração dos pinos referentes ao display e o controlador ST7789V.

Feito isso, é só carregar o código da mesma forma explicada anteriormente, apertando e mantendo pressionado o botão de boot, aperte o botão reset uma vez e solte o botão de boot.

Feito isso o código original vai voltar e nele você pode ver o WiFi da placa ESP32C3 funcionando. Neste caso ele é utilizado na função Slave em relação ao RP2040, mas ele também pode ser utilizado em outras aplicações controlando algo ligado diretamente a suas portas.

 

Teste do display da placa T-PicoC3 - ESP32-C3/RP2040 – LILYGO

Para esta etapa, vamos escrever coisas simples para testar o display da placa T-PicoC3. Abaixo o pequeno código para ligar escrever algumas frases no display.

#include <stdio.h> // inclui a biblioteca Stdio que é um cabeçalho padrão do C.
#include "TFT_eSPI.h" // Inclui a biblioteca TFT_eSPI que é responsável por controlar o LCD
#include <WiFiEspAT.h> // Inclui a biblioteca WifiEspAt que é responsável pelo controle e conectividade do Wifi do esp32
#include "OneButton.h" // inclui a biblioteca OneButton que é responsável por controlar os botões que já vem na placa

#include "pico/stdlib.h" // inclui a biblioteca stdlib, referente a placa Raspberry pi PICO
#include "hardware/gpio.h" // inclui gpio.h
#include "hardware/adc.h" //inclui adc.h

#include "Setup135_ST7789.h" // Inclui a biblioteca que possui as informações necessárias sobre o controlador do display LCD da placa
// Você vai encontrar este arquivo "Setup135_ST7789.h" na biblioteca TFT_eSPI dentro da pasta "User_Setups"

//************************* Definição de pinos da placa ***************************
#define TFT_MISO -1 // Define o pino -1 como MISO da placa T-PICOC3
#define TFT_MOSI 3  // Define o pino 3 como MOSI da placa T-PICOC3
#define TFT_SCLK 2 // Define o pino 2 como SLCK da placa T-PICOc3
#define TFT_CS 5  // Define o pino 5 como CS da placa T-PICOC3
#define TFT_DC 1  // Define o pino 1 como DC da placa T-PICOC3
#define TFT_RST 0 // Define o pino 0 como RESET da placa T-PICOC3

#define PIN_TFT_BL 4 // Define o pino 4 como pino do backlight da placa T-PICOC3
#define PIN_PWR_ON 22 // Define o pino 22 como pino de Power on da placa T-PICOC3
#define PIN_BOTTON1 6 // Define o pino IO6 do botão que já vem acoplado à placa T-PICOC3
#define PIN_BOTTON2 7 // Define o pino IO7 do botão que já vem acoplado à placa T-PICOC3
#define PIN_RED_LED 25 // Define o pino 25 como o led interndo da placa T-PICOC3
#define PIN_BAT_VOLT 26 // Define o pino 26 como pino para a leitura da bateria que pode ser acoplada à placa

#define ESP32C3_RX_PIN 9 // Define o pino de comunicação da placa ESP32C3 que vem acoplada na T-PICOC3
#define ESP32C3_TX_PIN 8 // Define o pino de comunicação da placa ESP32C3 que vem acoplada na T-PICOC3

//********************* Fim da definição de pinos da placa ********************
const char ssid[] = "Sua Rede"; // Define uma variavél do tipo char para armazenar o nome da sua rede wifi. "Sua rede" deve ser substituido com o nome da sua Rede WiFi
const char pass[] = "Sua senha"; // Define uma variavél do tipo char para armazenar o conteudo da sua senha. "Sua senha" deve ser substituido pela senha da sua Rede WiFi

TFT_eSPI tft = TFT_eSPI(135, 240); // Chama a função TFT para o código habilitando os comandos tft para o código

void setup()
{
Serial.begin(115200); // Inicia a comunicação serial

 // Abre a fonte de alimentação
  pinMode(PIN_PWR_ON, OUTPUT); // define o pino PIN_PWR_ON como saída
  digitalWrite(PIN_PWR_ON, HIGH); // define o pino PIN_PWR_ON como nível alto
   
// Configura os pinos de comunicação do ESP32C3-AT
  Serial2.setTX(ESP32C3_TX_PIN); // Define o pino ESP32C3_TX_PIN commo TX na comunicação Serial
  Serial2.setRX(ESP32C3_RX_PIN); // Define o pino ESP32C3_RX_PIN como RX na comunicação Serial
  Serial2.begin(115200); //inicia a comunicação serial


// Configuração do pino da placa 
pinMode(PIN_RED_LED, OUTPUT); //Define o pino do led vermelho que vem acoplado a placa como saída
pinMode(PIN_TFT_BL, OUTPUT); // Define o pino de Backlight do display como saída
digitalWrite(PIN_TFT_BL, 0); // Define o valor do pino do backlight como 0

//Inicia o monitor 
tft.init(); //Inicia a biblioteca TFT
tft.fillScreen(TFT_BLACK); // Limpa a tela
tft.setRotation(1); // Define a direção do display, neste caso 1 é horizontal 
tft.setSwapBytes(true); // Configura a ordem dos bytes enviados ao display


//liga a luz do LCD gradualmente
analogWrite(PIN_TFT_BL, 0); // Define a leitura analogica do pino
for (int i = 0; i < 0xff; i++) // Cria uma função para iniciar o display lcd gradualmente
{
 delay(5);
 analogWrite(PIN_TFT_BL, i);//Define o backlight com a função for acima
}
  delay(1000);//delay de 1 segundo
  
}

void loop()
{

tft.fillScreen(TFT_BLACK); //Apaga os dados na tela
tft.setCursor(45,15,4); // Define a posição de escrita, sendo 45 a coluna, 15 a linha, 4 a fonte a ser utilizada
tft.print("Curto Circuito"); // Escreve Curto circuito no display mantendo a mesma fonte usada acima
tft.setCursor(55,55); // Define a posição de escrita, sendo 55 a coluna, 55 a linha
tft.println("Hello World"); // Escreve Hello World no display mantendo a mesma fonte usada acima
tft.setCursor(55,95, 2); // Define a posição de escrita, sendo 55 a coluna e 95 a linha, 2 a fonte diferente
tft.println("Teste de outra fonte");//Escreve teste no display com a fonte 2
delay(2000);  //delay de 2 segundos
}

Após testar o código, podemos alterar da forma que for necessário.

 

Conclusão

Mesclando dois microcontroladores em uma só placa, a placa LilyGO T-PicoC3 traz uma grande versatilidade.

 Possui conectividade bluetooth e WiFi através do ESP32C3, um display que é conectado através da comunicação SPI no segundo microcontrolador RP2040. E o RP2040 controlando qualquer dispositivo que deseja.

É uma ótima placa caso deseje realizar monitoramentos, tanto por WiFi quanto através do seu LCD.