Skip to Content

Começar com o LCD 2.8″ ESP32 Solo Miner

Começar com o LCD 2.8″ ESP32 Solo Miner

O 2.8-inch ESP32 Solo Miner LCD Display da Elecrow é um módulo integrado compacto que combina um ecrã tátil TFT a cores com um microcontrolador ESP32-WROOM-32 para fornecer tanto interface de utilizador como capacidade de processamento autónomo numa única placa.

O ecrã tátil resistivo de 320 × 240 pixels é controlado por um controlador ILI9341V e pelo CPU dual-core LX6 do ESP32 integrado. Também integra Wi-Fi 2.4 GHz e Bluetooth. A placa expõe ainda um slot para cartão TF, múltiplas portas I/O, interfaces USB-C e UART, e um conector para altifalante/bateria.

Quando usado com firmware de mineração compatível como NMMiner ou NerdMiner, o dispositivo pode participar em mineração solo de criptomoedas para fins educativos. Não espere gerar qualquer rendimento com ele ; )

Neste tutorial vamos focar-nos na programação do ecrã com o Arduino IDE usando a biblioteca gráfica TFT_eSPI. Também vai aprender a usar a porta GPIO, o altifalante e o leitor de cartão SD.

Peças Necessárias

As peças necessárias incluem o ecrã e, se quiser ligar algum hardware externo, alguns cabos, resistores, LEDs e uma breadboard serão úteis.

Ecrã LCD 2.8″ ESP32 Solo Miner

Dupont wire set

Conjunto de fios Dupont

Half_breadboard56a

Breadboard

Kit de resistores e LEDs

Makerguides is a participant in affiliate advertising programs designed to provide a means for sites to earn advertising fees by linking to Amazon, AliExpress, Elecrow, and other sites. As an Affiliate we may earn from qualifying purchases.

Características do Ecrã LCD 2.8″ ESP32 Solo Miner

O 2.8″ ESP32 Solo Miner é construído em torno do sistema em módulo ESP32-WROOM-32-N4, que integra um microprocessador dual-core Xtensa LX6 capaz de atingir até 240 MHz. O núcleo ESP32 oferece conectividade Wi-Fi (802.11 b/g/n, 2.4 GHz) e Bluetooth (Bluetooth 5.0/BLE) nativamente no chip.

Ecrã e Interface Tátil

O módulo apresenta um painel TFT-LCD de 2.8 polegadas com resolução de 320 × 240 pixels e tipo de ecrã TN (Twisted Nematic). O ecrã usa um controlador ILI9341V que comunica com o ESP32 via interface SPI, responsável pelo controlo dos pixels, renderização de cores e operação da retroiluminação. A imagem abaixo mostra a frente do módulo de ecrã:

Front of 2.8″ ESP32 Solo Miner Display
Frente do Ecrã 2.8″ ESP32 Solo Miner (source)

Uma camada tátil resistiva está laminada sobre a superfície do LCD, permitindo a entrada de coordenadas através de contacto por pressão. O painel resistivo aceita um stylus ou dedo e comunica com o ESP32 via linhas analógicas/digitais dedicadas geridas por um controlador tátil onboard (XPT2046).

Especificações de Energia e Físicas

A placa pode ser alimentada por uma fonte externa DC de 5 V até 2 A para operação estável sob carga, ou por uma bateria Li-ion/LiPo de 3.7–4.2 V ligada ao conector integrado de bateria. Inclui botões físicos BOOT e RESET para controlo do utilizador durante o desenvolvimento ou gravação de firmware.

A área ativa do ecrã mede aproximadamente 43.2 mm por 56.7 mm, e o peso líquido total da placa é cerca de 61 g, tornando-a compacta para aplicações embutidas ou portáteis.

Interfaces Periféricas e I/O

Além do ecrã e toque, a placa expõe múltiplas interfaces periféricas. Um slot para cartão TF (microSD) permite armazenamento local ou carregamento de firmware/dados. As interfaces de comunicação incluem I2C, UART0 e UART1 para integração serial com sensores ou controladores externos.

Back of 2.8″ ESP32 Solo Miner Display
Verso do Ecrã 2.8″ ESP32 Solo Miner (source)

O conector USB-C (UART0) funciona tanto como entrada de energia como interface USB-to-TTL para gravação de firmware e depuração serial.

Um cabeçalho GPIO de uso geral expõe linhas digitais I/O adicionais, enquanto uma porta dedicada para altifalante suporta sinalização áudio simples. Os conectores usam pinos padrão e micro-conectores PH2.0/HY2.0. A tabela seguinte resume quais pinos GPIO estão atribuídos às interfaces IO, ao altifalante e ao leitor de cartão SD:

EcrãGPIO
GPIO_DIO25; IO32
UARTRX(IO16); TX(IO17)
I2CSDA(IO22); SCL(IO21)
SPKIO26
Slot para Cartão SD (SPI)MOSI(IO23); MISO(IO19); SDK(IO18); CS(IO5)

Suporte ao Desenvolvimento

A placa suporta múltiplos ambientes de desenvolvimento como Arduino IDE, Espressif IDF, Lua RTOS e Micro Python, e é compatível com o LVGL graphics library. Contudo, neste tutorial vou focar-me no Arduino IDE e na TFT_eSPI graphics library

Especificações Técnicas

A tabela seguinte resume as especificações técnicas do Ecrã LCD 2.8″ ESP32 Solo Miner:

CategoriaEspecificação
Controlador PrincipalESP32-WROOM-32-N4
Arquitetura CPUDual-core Xtensa LX6
Frequência MáximaAté 240 MHz
Conectividade WirelessWi-Fi 802.11 b/g/n (2.4 GHz), Bluetooth 5.0 / BLE
Tamanho do EcrãTFT LCD de 2.8 polegadas
Resolução do Ecrã320 × 240 pixels
Tipo de EcrãTN TFT
Controlador do EcrãILI9341V
Painel TátilEcrã tátil resistivo (controlador XPT2046)
Interface do EcrãSPI
Armazenamento ExternoSlot para cartão MicroSD (TF)
Entrada de Energia (Com Fios)5 V DC via USB-C
Entrada de Energia (Bateria)3.7–4.2 V Li-ion / LiPo
Controlo do UtilizadorBotões BOOT e RESET
Interface de ÁudioConector para altifalante (amplificador SC8002B)
Interfaces de ComunicaçãoUART0, UART1, I2C, GPIO
Interface de ProgramaçãoUSB-C (USB-to-TTL)
Plataformas de Desenvolvimento SuportadasArduino IDE, ESP-IDF, PlatformIO, MicroPython, Lua RTOS, ESPHome
Temperatura de Operação−20 °C a +70 °C
Temperatura de Armazenamento−30 °C a +80 °C
Área Ativa do Ecrã43.2 mm × 56.7 mm
Peso Aproximado~61 g

Instalar Core ESP32

O Ecrã LCD 2.8″ ESP32 Solo Miner é baseado no ESP32. Se quiser programá-lo, precisa de instalar o core ESP32 no seu Arduino IDE.

Comece por abrir o diálogo de Preferências selecionando “Preferences…” no menu “File”. Isto abrirá o diálogo de Preferências mostrado abaixo.

Na aba Settings encontrará uma caixa de edição no fundo do diálogo rotulada “Additional boards manager URLs“:

Additional boards manager URLs in Preferences
URLs adicionais do gestor de placas nas Preferências

Neste campo copie a seguinte URL:

https://espressif.github.io/arduino-esp32/package_esp32_dev_index.json

Isto permitirá ao Arduino IDE saber onde encontrar as bibliotecas do core ESP32. A seguir vamos instalar as placas ESP32 usando o Gestor de Placas.

Abra o Gestor de Placas via “Tools -> Boards -> Board Manager”. O Gestor de Placas aparecerá na barra lateral esquerda. Digite “ESP32” no campo de pesquisa no topo e deverá ver dois tipos de placas ESP32; as “Arduino ESP32 Boards” e as placas “esp32 by Espressif”. Queremos as “esp32 libraries by Espressif”. Clique no botão INSTALL e aguarde até o download e instalação terminarem.

Install ESP32 Core libraries
Instalar bibliotecas Core ESP32

Estou a usar a versão 3.3.5 aqui, mas qualquer outra versão 3.x deve funcionar para este projeto. Se precisar de mais informações, leia o nosso Install ESP32 core in Arduino IDE tutorial.

Selecionar Placa

Também precisa de selecionar uma placa ESP32. No caso do Ecrã LCD 2.8″ ESP32 Solo Miner, pode escolher o genérico “ESP32S3 Dev Module”. Para isso, clique no menu suspenso e depois em “Select other board and port…”:

Drop-down Menu for Board Selection
Menu suspenso para seleção de placa

Isto abrirá um diálogo onde pode digitar “esp32s3 dev” na barra de pesquisa. Verá a placa “ESP32S3 Dev Module” em Boards. Clique nela e no porto COM para ativá-la e depois clique OK:

Board Selection Dialog "ESP32S3 Dev Module" board
Diálogo de seleção de placa “ESP32S3 Dev Module”

Note que precisa de ligar a placa via cabo USB ao seu computador antes de poder selecionar uma porta COM.

Testar GPIO

A placa Solo Miner expõe dois pinos GPIO na porta GPIO_D. Neste exemplo implementamos um programa simples Blink para testar a porta GPIO.

Como o ecrã não tem LED integrado, vamos ligar e controlar dois LEDs externos. O diagrama de ligação abaixo mostra como ligar os dois LEDs à porta:

Wiring for blinking two LEDs
Ligação para piscar dois LEDs

Os pinos na porta GPIO_D são IO25; IO32, 3.3V, GND. Não precisamos da saída 3.3V, apenas dos dois pinos GPIO e do terra. Ao montar o circuito, não se esqueça dos resistores de 220Ω para limitar a corrente aos LEDs e certifique-se que o terra está bem ligado.

Depois pode carregar o código seguinte que pisca os dois LEDs alternadamente. Também imprime no monitor Serial, para que se houver algum problema na ligação, possa pelo menos verificar que o programa está a correr. Certifique-se que a taxa de baud do monitor Serial está definida para 115200.

const int led1 = 25;
const int led2 = 32;

void setup() {
  Serial.begin(115200);
  pinMode(led1, OUTPUT);
  pinMode(led2, OUTPUT);
}

void loop() {
  Serial.println("on");
  digitalWrite(led1, HIGH);
  digitalWrite(led2, LOW);
  delay(1000);

  Serial.println("off");
  digitalWrite(led1, LOW);
  digitalWrite(led2, HIGH);
  delay(1000);
}

Configurar a biblioteca TFT_eSPI

Se quiser mostrar algo no ecrã, vai precisar de usar uma biblioteca gráfica. Vamos usar a biblioteca TFT_eSPI do Bodmer. Para a instalar, abra o LIBRARY MANAGER, escreva “TFT_eSPI” na barra de pesquisa e clique no botão INSTALL. A imagem abaixo mostra como fica uma instalação bem-sucedida:

TFT_eSPI library in Library Manager
Biblioteca TFT_eSPI no Library Manager

De seguida precisamos criar um ficheiro chamado tft_setup.h com os parâmetros corretos para o ecrã. Este ficheiro precisa fazer parte de qualquer projeto Arduino que use o ecrã.

Aqui está como isso funciona em detalhe. Primeiro crie um novo projeto Arduino e guarde-o como “tft_test“, por exemplo. Isso criará uma pasta tft_test com um ficheiro tft_test.ino dentro:

Arduino Project Folder tft_test
Pasta do Projeto Arduino tft_test

Nesta pasta, crie um ficheiro chamado “tft_setup.h“. O nome tem de ser exato! A sua pasta de projeto deverá então ficar assim:

Pasta do Projeto Arduino com tft_setup.h

No seu Arduino IDE deverá agora ver duas abas; tft_test.ino e tft_setup.h que pode clicar para editar os ficheiros.

Arduino IDE with tft_test.ino and tft_setup.h tabs
Arduino IDE com as abas tft_test.ino and tft_setup.h

No ficheiro tft_setup.h copie as seguintes definições de parâmetros:

#define ILI9341_DRIVER
#define TFT_WIDTH  320
#define TFT_HEIGHT 240 

#define TFT_BACKLIGHT_ON HIGH
#define TFT_BL   27 
#define TFT_MISO 4
#define TFT_MOSI 13
#define TFT_SCLK 14
#define TFT_CS   15
#define TFT_DC    2 
#define TFT_RST  -1
#define TOUCH_CS 33

#define SPI_FREQUENCY        27000000
#define SPI_TOUCH_FREQUENCY   2500000
#define SPI_READ_FREQUENCY   16000000

#define LOAD_GLCD   // Font 1. Original Adafruit 8 pixel font needs ~1820 bytes in FLASH
#define LOAD_FONT2  // Font 2. Small 16 pixel high font, needs ~3534 bytes in FLASH, 96 characters
#define LOAD_FONT4  // Font 4. Medium 26 pixel high font, needs ~5848 bytes in FLASH, 96 characters
#define LOAD_FONT6  // Font 6. Large 48 pixel font, needs ~2666 bytes in FLASH, only characters 1234567890:-.apm
#define LOAD_FONT7  // Font 7. 7 segment 48 pixel font, needs ~2438 bytes in FLASH, only characters 1234567890:-.
#define LOAD_FONT8  // Font 8. Large 75 pixel font needs ~3256 bytes in FLASH, only characters 1234567890:-.
#define LOAD_GFXFF  // FreeFonts. Include access to the 48 Adafruit_GFX free fonts FF1 to FF48 and custom fonts
#define SMOOTH_FONT

No ficheiro tft_test.ino copie o seguinte código. Este é um pequeno teste que usa a biblioteca TFT_eSPI para mostrar o texto “Makerguides” no centro do ecrã.

#include "tft_setup.h"
#include"TFT_eSPI.h"

TFT_eSPI tft = TFT_eSPI();

void setup(void) {
  tft.init();
  tft.setRotation(3);
  tft.fillScreen(TFT_BLACK);  
}

void loop() {
  tft.setTextColor(TFT_WHITE, TFT_BLACK);
  tft.setTextSize(2);
  tft.setTextDatum(MC_DATUM);
  tft.drawString("Makerguides", tft.width() / 2, tft.height() / 2); 
  delay(5000);
}

Note que tft_setup.h está incluído no topo do programa. O código em si é fácil de entender. Criamos um objeto TFT_eSPI e inicializamo-lo na função setup(). Na função loop, definimos a cor do texto, tamanho e alinhamento, e desenhamos a string “Makerguides” no centro do ecrã TFT.

Se compilar e carregar este programa, deverá ver a seguinte saída no seu ecrã:

Text "Makerguides" shown on display
Texto “Makerguides” mostrado no ecrã

Nas próximas secções, vai aprender a ler dados de toque.

Detetar Eventos de Toque

O código seguinte mostra como detetar eventos de toque. Desenha um pequeno círculo amarelo onde quer que toque no ecrã:

#include "tft_setup.h"
#include "TFT_eSPI.h"

TFT_eSPI tft = TFT_eSPI();
uint16_t cal[5] = { 210, 3484, 285, 3511, 7 };

void setup() {
  tft.begin();
  tft.setRotation(3);  
  tft.setTouch(cal);
  tft.fillScreen(TFT_BLACK);
}

void loop() {
  static uint16_t x = 0, y = 0;
  if (tft.getTouch(&x, &y)) {
    tft.fillCircle(x, y, 5, TFT_YELLOW);
  }
  delay(100);
}

Como antes, incluímos tft_setup.h e a biblioteca TFT_eSPI. De seguida criamos o objeto do ecrã e um array com dados de calibração. O array cal contém essencialmente as coordenadas dos cantos e a orientação do ecrã tátil. Vou mostrar na próxima secção como pode encontrar os dados de calibração, mas os dados aqui fornecidos devem funcionar para começar.

Na função setup inicializamos o ecrã, definimos a orientação, os dados de calibração do toque e preenchemos o ecrã com preto.

Na função loop chamamos continuamente getTouch() para obter as coordenadas de um evento de toque. A função retorna true se um toque foi detetado. Nesse caso, desenhamos um círculo amarelo com raio de 5 pixels nas coordenadas do toque. Aqui está um exemplo de como isto aparece no ecrã:

Touch events shown on display
Eventos de toque mostrados no ecrã

Calibrar o Ecrã Tátil

O ecrã tátil está sobreposto ao ecrã e tem uma resolução, localização e orientação diferentes. Para corresponder a localização dos eventos de toque com as posições no ecrã, precisamos calibrar o ecrã tátil medindo as coordenadas dos cantos e a orientação do ecrã tátil.

Estas definições são armazenadas no array de calibração. Execute o programa seguinte para extrair os parâmetros de calibração e imprimi-los no Monitor Serial:

#include "tft_setup.h"
#include "TFT_eSPI.h"

TFT_eSPI tft = TFT_eSPI();

void setup() {
  Serial.begin(115200);
  tft.begin();
  tft.setRotation(3);
}

void loop() {
  static uint16_t cal[5];

  tft.fillScreen(TFT_BLACK);
  tft.setCursor(20, 0);
  tft.setTextFont(2);
  tft.setTextSize(1);
  tft.setTextColor(TFT_WHITE, TFT_BLACK);
  tft.print("Touch corners ... ");
  tft.calibrateTouch(cal, TFT_YELLOW, TFT_BLACK, 15);
  tft.println("done.");

  Serial.printf("cal: {%d, %d, %d, %d, %d}\n",
                cal[0], cal[1], cal[2], cal[3], cal[4]);
  delay(10000);
}

Quando executar este programa, ele pede para tocar nos quatro cantos do ecrã e depois imprime os cinco parâmetros de calibração (coordenadas dos cantos e orientação do ecrã). O seu ecrã durante a calibração deverá parecer assim:

Calibration of touch screen
Calibração do ecrã tátil

E no Monitor Serial deverá ver algo assim impresso, depois de tocar nos quatro cantos:

  cal: { 210, 3484, 285, 3511, 7 }

A calibração repete-se a cada 10 segundos, para que possa tentar várias vezes obter os parâmetros mais precisos. Depois use estes parâmetros ao inicializar o ecrã na função setup:

...
uint16_t cal[5] = { 210, 3484, 285, 3511, 7 };

void setup() {
  ...
  tft.setTouch(cal);
  ...
}

Nas próximas duas secções, vou mostrar rapidamente como gerar som e como usar o leitor de cartão SD.

Reproduzir Som no Altifalante

O código seguinte mostra como reproduzir som no altifalante. Produz um tom de 440Hz durante um segundo com uma pausa de um segundo:

const int speakerPin = 26;

void setup() {
  pinMode(speakerPin, OUTPUT);
}

void loop() {
  tone(speakerPin, 440); // 440Hz tone
  delay(1000);
  noTone(speakerPin);
  delay(1000);
}

Note que precisa de ligar um altifalante externo (3W, 4-8 Ohms) ao conector do altifalante da placa do ecrã, pois a placa não tem altifalante ou buzzer integrado.

Detetar Tipo de Cartão SD

Este último exemplo de código mostra como usar o leitor de cartão SD integrado do ecrã para detetar um cartão SD:

#include "FS.h"
#include "SD.h"
#include "SPI.h"

void setup() {
  Serial.begin(115200);

  if (!SD.begin()) {
    Serial.println("Card Mount Failed");
    return;
  }

  uint8_t cardType = SD.cardType();
  if (cardType == CARD_NONE) {
    Serial.println("No SD card attached");
  } else if (cardType == CARD_MMC) {
    Serial.println("MMC Card");
  } else if (cardType == CARD_SD) {
    Serial.println("Standard SD Card");
  } else if (cardType == CARD_SDHC) {
    Serial.println("SDHC Card");
  } else {
    Serial.println("Unknown Card Type");
  }
}

void loop() { }

Se precisar de mais informações e exemplos sobre leitores de cartão SD, consulte o SD Card Module with ESP32 tutorial.

Esquemas

Para conveniência, aqui estão as partes mais importantes do Schematics para a placa do Ecrã LCD 2.8″ ESP32 Solo Miner:

ESP32-WROOM-32 and TFT display wiring
Ligação ESP32-WROOM-32 e ecrã TFT (source)

ESP32-WROOM-32 and touch driver wiring
Ligação ESP32-WROOM-32 e controlador de toque (source)

Ligação do altifalante e amplificador (source)

Conclusão

Este tutorial mostrou como usar o ecrã, o ecrã tátil, o altifalante e o leitor de cartão SD do 2.8-inch ESP32 Solo Miner LCD Display. Para informações adicionais, consulte o Github repo e Wiki na Elecrow.

A placa Solo Miner ESP32 Display vem com praticamente tudo o que precisa para um projeto que envolva um ecrã. Inclui um ecrã tátil TFT, um ESP32, um slot para cartão TF, um conector de bateria com carregador, uma interface para altifalante e uma interface I2C.

No entanto, isto também significa que o número de pinos GPIO livres é limitado a apenas dois. Mas como existe uma interface I2C, pode usar um expansor GPIO para adicionar mais GPIOs. Veja o nosso tutorial Using GPIO Expander MCP23017 With Arduino.

O hardware do Ecrã 2.8″ ESP32 Solo Miner é essencialmente idêntico ao CrowPanel 2.8″ ESP32 Display. Veja o tutorial CrowPanel 2.8″ ESP32 Display : Easy Setup Guide para mais informações.

Para exemplos de aplicação dos ecrãs ESP32, veja os nossos tutoriais Digital Clock with CrowPanel 3.5″ ESP32 Display, Parking sensor with CrowPanel ESP32 Display e Digital Timer Switch with CrowPanel ESP32 Display.

Se tiver alguma dúvida, sinta-se à vontade para deixá-la na secção de comentários.

Boas experiências a criar ; )