terça-feira, maio 27, 2025

Placa ESP32-C3 com Display OLED de 0,42"

Uma compra por impulso na AliExpress, para atingir o mínimo do frete grátis, acabou me levando a um pequeno mistério: como usar o display desta placa?


Esta placa (e outras muito parecidas) é facilmente encontrada em várias lojas no AliExpress. Embora a descrição varie um pouco de anúncio para anúncio, em todos eles nenhuma informação importante sobre o display é passada. Tanto a resolução como o chip controlador são omitidos.

Uma busca encontrou esta pergunta e várias respostas, com referências aos chips SH1106 e SSD1306 (o chip que é usado nos mais conhecidos displays OLED de 128x64 pontos), resoluções de 128x64 e 72x40 e deslocamento da imagem visível dentro na memória do controlador. Localizei também um repositório no github com uma biblioteca específica para esta placa (construída a partir do driver para o SSD1306). A maioria das respostas é para uso com o MicroPython e foi isso que usei nos meus testes.

Neste ponto é bom lembrar que nem sempre as placas enviadas no AliExpress correspondem às fotos nos anúncios e não dá para identificar o modelo do display nas fotos. Após a placa inicial eu comprei mais duas em outra loja e as três placas são iguais.

Os datasheets do SH1106 e SSD1306 mostram algumas semelhanças e algumas diferenças nos comandos. Os meus primeiros testes aumentaram a minha confusão, pois eu não estava ressetando a placa entre um teste e outro. Ao final eu percebi que:

  • Os exemplos usando o driver para o SH1106 não apresentam nada na tela, quando executados na placa recém ligada. Porém funcionam (parcial ou totalmente) se anteriormente eu rodei um exemplo com o driver para o SSD1306.
  • Alguns exemplos apresentam imagem na tela com a posição inicial incorreta.
Examinando os códigos dos drivers para SH1106, SSD1306 original e o driver alterado para a placa, descobri que:
  • O driver para SH1106 praticamente não envia comandos de configuração para o controlador, usando os valores default (que claramente são inadequados para este display)
  • As diferenças entre o SSD1306 original e o alterado são mínimas. A principal é somar um deslocamento (offset) fixo nas coordenadas X e Y.
Minhas conclusões são:
  • O chip de controle do display é um SSD1306 ou muito parecido. Este chip possui internamente uma memória capaz de armazenar até 128x64 pontos
  • A resolução do display é de 72x40 pontos
  • A imagem do display fica deslocada na memória do controlador de 28 pontos na direção X e 24 pontos na direção Y (ou seja, está centrada horizontalmente e encostada na parte inferior da memória)
Para quem quer programar em MicroPython a biblioteca específica é bem apropriada. A única coisa que posso dizer contra ela é o fato de manter no microcontrolador uma imagem de 128x64, desperdiçando 664 bytes.

Para quem quer usar o ambiente Arduino, fiz uma biblioteca básica que está no meu repositório de informações sobre placas chinesas.

Afora o display, a placa é semelhante a outras mini placas ESP32-C3: 4M de Flash (no mesmo encapsulamento que o processador), uma quantidade razoável de pinos nos conectores laterais e uma antena cerâmica (com um projeto de placa que minimiza interferências do resto do circuito).





Nenhum comentário: