Arduino

Como fazer gráfico com OLED no Arduino

Gráfico com OLED no Arduino

Existem diversas maneiras de traçar gráfico com OLED no Arduino, mas a que me senti mais confortável foi utilizando a biblioteca u8glib, que facilitou o tempo de atualização do display e abstraiu bastante a interface. Mas antes de começar, gostaria de agradecer a todos que acompanham o blog todos os dias, que recomendam e compartilham os artigos, que dão apoio a essa iniciativa de distribuir informação.

Na tarde do último dia de Agosto batemos o record anual de visitas, com um crescimento realmente significativo. São esses sinais de apreciação que me dão o prazer de continuar escrevendo e tentando fazer cada vez um conteúdo melhor para vocês que prestigiam o blog. Muito obrigado!

Voltando ao tema, para esse artigo utilizei a placa AFSmartRadio da AFEletronica, cujo parceiro possui diversas placas para uso em campo, como você pode verificar no site deles. Essa placa em específico possui entrada para LoRa1276 e RF4463Pro, ficando à sua escolha. Além disso, caracteristicamente possui entrada para cartão micro-SD,  para geração de logs ou parametrização do serviço, botão de uso geral, um relé, slot para dispositivos SPI, I2C, pinos de GPIO expostos, alimentação externa pela barra de pinos e comunicação pela porta USB. A porta USB não alimenta a placa, é apenas para a comunicação e gravação de firmware. E antes que eu me esqueça, ao lado do slot do rádio tem um slot para SIM800L, permitindo o envio de informações para a Internet e possibilitando assim que a placa seja autônoma ou concentradora.

Essa placa usa um Atmega328P e é programada selecionando Arduino Nano, no menu de placas.

Display OLED

O display OLED é incrível. O único ponto negativo, em minha opinião, é o tamanho. Ele poderia ser maior.

Já escrevi montes de artigos com ele, e o que eu mais gosto é do artigo onde o uso como display da câmera do Raspberry.

Biblioteca

A biblioteca está disponível no repositório de bibliotecas do Arduino, portanto você pode usar a IDE oficial para instalá-la, ou então utilizar sua IDE preferida com PlatformIO. No meu caso, uso o Visual Studio Code, e sugiro fortemente por diversas razões. Já falei a respeito no artigo da roleta com Arduino.

Código para fazer gráfico com OLED no Arduino (1)

Primeiro, vamos ao código que resultou na imagem de destaque.

A biblioteca u8glib oferece diversas funções interessantes que facilitam a interação com esse display. No caso, bastou utilizar o traçado de linha e trabalhar os pontos na matriz X e Y.

À esquerda coloquei uma linha vertical por onde desliza um círculo. Esse círculo é a média dos valores. Invés de fazer wiring e colocar um sensor, criei uma função para geração de números randômicos, facilitando o desenvolvimento do código. Está tudo em tipo inteiro (int), mas se for ler temperaturas, certamente será ideal mudar a função que converte inteiro para char array, de forma que converta float para char array. Uma das possibilidades é utilizar a função dtostrf. O exemplo você encontra nesse outro artigo. A conversão é necessária para compor a string exibida no header do display, onde o primeiro valor é simulação de temperatura e o segundo valor é a média.

Esse código é bastante satisfatório para exemplo de como traçar gráfico com OLED no Arduino, mas sugiro que dê uma melhorada nele se for aplicá-lo a algum projeto. Eu desloquei a matriz para a direita, deixando livre o canto esquerdo para colocar a barra vertical, então os primeiros 10 valores estão “no limbo”.

A função map não deve ser necessária para temperaturas em ambiente normal porque o display conta com 64 pixels de altura (dos quais uma fração foi reservada para a string), mas se for aplicar e ambientes muito quentes ou muito frios, refaça o map.

Por fim, quando programo procuro modular o código. Para esse exemplo escrevi desordenadamente, só para mostrar a ideia. O código para esse exemplo:

Gráfico com OLED no Arduino (barras)

gráfico com OLED no Arduino

Já nesse código, utilizei a biblioteca da Adafruit, que também está disponível no repositório oficial do Arduino. Ainda não terminei a implementação e o estado desse código é “alpha”, porque vou implementar todos os recursos dessa placa da AFEletronica e deixar pronto para uso. Por enquanto, o que tem já serve de referência.

Acredito que será útil para diversos makers, afinal, nada melhor do que focar no objetivo e pular a fase de experimentação, certo?

Até a próxima!

2 comments

Comments are closed.

%d blogueiros gostam disto: