CodificaLab

Fazendo Funcionar

ESP32 com Display OLED SSD 1306 e Sensor BMP180 – IDE Arduino

Published by

on

No post anterior, abordamos os primeiros passos com o ESP32, explorando sua configuração básica e suas funcionalidades. Agora, vamos avançar um pouco mais e demonstrar como conectar o ESP32 a um sensor BMP180 para medir pressão e temperatura, exibindo as informações em um display OLED I2C SSD1306. Esta combinação de sensores e displays é amplamente utilizada em projetos de IoT, e neste tutorial, vamos guiar você passo a passo na integração desses componentes, permitindo que você crie suas próprias soluções de monitoramento de ambiente com o ESP32.

Sensor BMP180

O sensor BMP180 é um sensor barométrico de alta precisão fabricado pela Bosch Sensortec. Ele é amplamente utilizado em projetos eletrônicos e de Internet das Coisas (IoT) para medir pressão atmosférica e temperatura. A partir da leitura da pressão atmosférica, é possível calcular a altitude aproximada, o que torna o BMP180 útil em projetos que envolvem monitoração de ambiente, previsão do tempo, sistemas de navegação e drones.

Principais Características do BMP180:

  1. Medição de Pressão Atmosférica: O BMP180 mede a pressão atmosférica em Pascal (Pa), com uma faixa de medição que vai de 300 hPa até 1100 hPa. Isso cobre desde o nível do mar até cerca de 9.000 metros de altitude.
  2. Medição de Temperatura: Ele também possui um sensor de temperatura embutido que permite leituras de temperatura ambiente, que ajudam a compensar a medição de pressão.
  3. Cálculo de Altitude: Com a leitura da pressão atmosférica e usando equações matemáticas simples, o BMP180 pode calcular a altitude com base na pressão do ambiente. Isso é útil para projetos de geolocalização, drones e dispositivos móveis.
  4. Comunicação I2C: O BMP180 se comunica com microcontroladores e plataformas, como o ESP32 ou Arduino, via barramento I2C, facilitando a integração com outros sensores e displays.
  5. Baixo Consumo de Energia: O sensor foi projetado para funcionar com baixo consumo de energia, o que o torna ideal para aplicações móveis e dispositivos alimentados por bateria.

Funcionamento:

O BMP180 utiliza um princípio físico chamado efeito piezoelétrico para medir a pressão. Basicamente, o sensor converte as variações de pressão no ambiente em sinais elétricos que são processados para fornecer a leitura em Pascal. O sensor também faz medições de temperatura, o que é necessário para compensar as variações de pressão devido às mudanças de temperatura ambiente.

Resolução e Precisão:

  • Resolução de pressão: O BMP180 tem uma resolução de até 0,01 hPa, o que permite detectar mudanças sutis na pressão atmosférica.
  • Precisão: A precisão de pressão é de aproximadamente ±0,12 hPa, e para a temperatura, a precisão é de ±2°C.

O que é o I2C?

I2C ou I²C significa Inter-Integrated Circuit (Circuito Inter-Integrado) e pode ser pronunciado como “I dois C”. Ele foi criado pela Philips, tendo como vantagem a simplicidade e o baixo custo, e, como desvantagem, a velocidade.

Canais de comunicação:

• Canal de dados seriais, chamado de serial data (SDA);

• Canal de sincronização, chamado serial clock (SCL). Simplificadamente, o Clock é um sinal que oscila entre nível alto e baixo rapidamente. Então, essa oscilação é utilizada para sincronizar os dispositivos.

Ligação do sensor de temperatura e pressão (BMP180) no ESP32 de 30 pinos.

Conexões de Hardware

O BMP180 se comunica via I2C, portanto, precisamos conectar os pinos corretos do ESP32.

BMP180ESP32
VCC3.3V
GNDGND
SCLGPIO 22
SDAGPIO 21

Display OLED SSD1306

O display OLED SSD1306 é um display de matriz de pixels baseado em tecnologia OLED (Organic Light-Emitting Diode). Ele é amplamente utilizado em projetos eletrônicos devido ao seu tamanho compacto, baixo consumo de energia e qualidade de exibição. A unidade SSD1306 refere-se ao controlador que gerencia o display, que geralmente vem em resoluções de 128×64 ou 128×32 pixels. O display é ideal para exibir informações simples, como texto, gráficos e ícones em projetos com Arduino, ESP32 e Raspberry Pi.

Principais Características do Display OLED SSD1306:

  1. Tecnologia OLED:
    • O OLED é diferente de displays tradicionais, como LCD, porque cada pixel é uma fonte de luz própria. Isso significa que o display não precisa de uma luz de fundo, o que economiza energia e oferece um contraste mais elevado.
    • Pixels desligados são verdadeiramente pretos, resultando em uma excelente nitidez de imagem e baixo consumo de energia quando exibe imagens predominantemente escuras.
  2. Controlador SSD1306:
    • O controlador SSD1306 é responsável por gerenciar o funcionamento do display, permitindo a comunicação com microcontroladores por meio de interfaces I2C ou SPI, sendo o protocolo I2C o mais comumente utilizado devido à simplicidade e uso de menos fios.
    • Ele controla o mapeamento dos pixels, o que significa que você pode definir individualmente cada pixel na tela para criar gráficos ou textos.
  3. Resolução:
    • As resoluções mais comuns são 128×64 pixels (mais usada) ou 128×32 pixels. Isso significa que o display pode exibir até 128 colunas de pixels e 64 ou 32 linhas, o que é suficiente para textos, gráficos simples e pequenas interfaces de usuário.
  4. Tamanho Compacto:
    • O display geralmente tem um tamanho físico entre 0,96 polegadas a 1,3 polegadas, o que o torna ideal para projetos portáteis ou dispositivos com espaço limitado, como medidores, relógios inteligentes e sistemas de controle embarcados.
  5. Baixo Consumo de Energia:
    • O fato de cada pixel emitir sua própria luz significa que o consumo de energia pode ser bastante reduzido, especialmente em aplicações que exibem muito conteúdo em preto (com pixels desligados).
  6. Interface I2C:
    • A maioria dos displays OLED SSD1306 utiliza o protocolo I2C, o que facilita a conexão com microcontroladores usando apenas dois pinos de comunicação, além dos pinos de alimentação. Isso economiza espaço e simplifica as conexões, especialmente em projetos onde vários dispositivos precisam compartilhar o barramento I2C.
  7. Cores:
    • O display SSD1306 geralmente exibe em duas cores: branco sobre preto (ou azul em alguns modelos), onde os pixels ativados são brancos e o fundo é preto. Isso é perfeito para a exibição de texto nítido e gráficos simples.

Conectar o Display OLED SSD1306 ao ESP32:

Assim como o BMP180, o display SSD1306 também usa comunicação I2C. Conecte-o da seguinte maneira:

OLED SSD1306ESP32
VCC3.3V
GNDGND
SCLGPIO 22
SDAGPIO 21

Conexão final

Instalando as Bibliotecas Necessárias

No Arduino IDE, precisamos instalar algumas bibliotecas para trabalhar com o OLED e o sensor BMP180:

  1. Abra o Arduino IDE e vá em Sketch > Incluir Biblioteca > Gerenciar Bibliotecas.
  2. Na janela de gerenciamento de bibliotecas, pesquise e instale as seguintes bibliotecas:
    • Adafruit BMP085 (funciona também para o BMP180)
    • Adafruit GFX Library (necessária para o display OLED)
    • Adafruit SSD1306 (biblioteca específica para o display SSD1306)

Código de Exemplo

A seguir, um código simples para ler os dados do BMP180 e exibi-los no display OLED.

Link para download

#include <Wire.h>
#include <Adafruit_SSD1306.h>
#include <Adafruit_BMP085.h>

// Definir a largura e altura do display OLED
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64

// Criar uma instância do display OLED (endereço I2C padrão 0x3C)
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);

// Criar uma instância do sensor BMP180
Adafruit_BMP085 bmp;

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

  // Inicializar o display OLED
  if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
    Serial.println(F("Falha ao inicializar o display SSD1306"));
    for (;;);
  }
  
  // Limpar o display
  display.clearDisplay();
  display.display();

  // Inicializar o sensor BMP180
  if (!bmp.begin()) {
    Serial.println(F("Falha ao inicializar o sensor BMP180"));
    for (;;);
  }

  // Exibir mensagem de inicialização
  display.setTextSize(1);
  display.setTextColor(SSD1306_WHITE);
  display.setCursor(0, 0);
  display.println(F("Iniciando..."));
  display.display();
  delay(2000); // Aguardar 2 segundos antes de prosseguir
}

void loop() {
  // Limpar o display para atualizar as informações
  display.clearDisplay();

  // Ler dados do BMP180
  float temperature = bmp.readTemperature();
  float pressure = bmp.readPressure();

  // Exibir temperatura e pressão no display OLED
  display.setCursor(0, 0);
  display.setTextSize(1);
  display.setTextColor(SSD1306_WHITE);
  display.println(F("Temperatura:"));
  display.print(temperature);
  display.println(" C");

  display.println(F("Pressao:"));
  display.print(pressure / 100.0);
  display.println(" hPa");

  // Enviar os dados também para o monitor serial
  Serial.print(F("Temperatura: "));
  Serial.print(temperature);
  Serial.println(" C");

  Serial.print(F("Pressao: "));
  Serial.print(pressure / 100.0);
  Serial.println(" hPa");

  // Atualizar o display com as novas informações
  display.display();
  
  // Aguardar 2 segundos antes de atualizar novamente
  delay(2000);
}

Carregando o Código no ESP32

  1. Conecte o ESP32 ao computador via cabo USB.
  2. No Arduino IDE, selecione a placa ESP32 e a porta COM correta.
  3. Carregue o código no ESP32.
  4. Abra o Monitor Serial para ver as leituras de temperatura e pressão em tempo real.

Testando a Configuração

Após carregar o código, o display OLED deve começar a mostrar os valores de temperatura e pressão medidos pelo sensor BMP180. Além disso, os valores também serão exibidos no monitor serial.

Agora, você está pronto para utilizar o ESP32 com o sensor BMP180 e o display OLED SSD1306 em seus projetos!

Deixe um comentário