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:
- 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.
- 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.
- 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.
- 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.
- 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.
| BMP180 | ESP32 |
|---|---|
| VCC | 3.3V |
| GND | GND |
| SCL | GPIO 22 |
| SDA | GPIO 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:
- 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.
- 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.
- 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.
- 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.
- 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).
- 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.
- 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 SSD1306 | ESP32 |
|---|---|
| VCC | 3.3V |
| GND | GND |
| SCL | GPIO 22 |
| SDA | GPIO 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:
- Abra o Arduino IDE e vá em Sketch > Incluir Biblioteca > Gerenciar Bibliotecas.
- 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.
#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
- Conecte o ESP32 ao computador via cabo USB.
- No Arduino IDE, selecione a placa ESP32 e a porta COM correta.
- Carregue o código no ESP32.
- 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