quinta-feira, junho 09, 2022

Usando o Sensor BMP280 com a Raspberry Pi Pico

Depois de todas as dificuldades com as placas suspeitas, vamos ver dois exemplos simples de uso do BMP280 com a Raspberry Pi Pico. Em ambos vou usar o MicroPython e a Pi Pico ligada ao BMP280 e a um display OLED I2C. A diferença entre os exemplos está na biblioteca usada para ler o BMP280.


A montagem é simples, tanto o display como o sensor são ligados a +3,3V, GND, SDA e SCK:

Para rodar os exemplos, você precisa instalar o interpretador e copiar para a placa as bibliotecas que serão usadas. Uma explicação da parte de controle do display pode ser vista no meu post no Maker Hero: https://www.filipeflop.com/blog/display-oled-i2c-raspberry-pi-pico/.

A primeira biblioteca que vou usar com o MicroPython é de David Stenwall e pode ser baixada de https://github.com/dafvid/micropython-bmp280. É uma biblioteca bastante completa no que diz respeito à configuração do sensor, inclusive implementando os "casos de uso" descritos no datasheet.

O programa de teste foi este aqui:

from machine import Pin,I2C
from bmp280 import *
from time import sleep
import framebuf
import ssd1306
 
# Configura I2C
i2c = I2C(0, scl=Pin(17), sda=Pin(16))
 
# Inicia o display
display = ssd1306.SSD1306_I2C(128, 64, i2c)
display.fill(0)
display.show()

# Inicia sensor
bmp = BMP280(i2c)
bmp.use_case(BMP280_CASE_INDOOR)

# Fica em loop mostrando temperatura e pressão
while True:
    display.fill(0)
    display.text( "   Temp: "+str(bmp.temperature), 0, 0)
    display.text( "Pressao: "+str(bmp.pressure), 0, 20)
    display.show()
    sleep(1)

A segunda biblioteca para uso com o MicroPython é da "MicroPython Chinese Community" e está em https://github.com/micropython-Chinese-Community/mpy-lib/tree/master/sensor/bmp280. É uma biblioteca mais simples, mas que inclui o cálculo da altitude a partir da pressão.

O programa com esta biblioteca ficou assim:

from machine import Pin,I2C
from bmp280c import *
from time import sleep
import framebuf
import ssd1306
 
# Configura I2C
i2c = I2C(0, scl=Pin(17), sda=Pin(16))
 
# Inicia o display
display = ssd1306.SSD1306_I2C(128, 64, i2c)
display.fill(0)
display.show()

# Inicia sensor
bmp = BMP280(i2c)

# Fica em loop mostrando temperatura e pressão
while True:
    display.fill(0)
    temperature, pressure = bmp.get()
    display.text( "   Temp: "+str(temperature), 0, 0)
    display.text( "Pressao: "+str(pressure), 0, 20)
    display.show()
    sleep(1)

Notar que neste caso estamos usando as configurações padrão da biblioteca. Não temos métodos específicos para mudar isso, teríamos que usar o método setReg() para acessar diretamente os registradores.

Nenhum comentário: