Sobre o BMP180
O sensor barométrico BMP180 [1] foi desenvolvido pela Bosh para substituir outro sensor criado por eles mesmos, o sensor BPM085.
Este sensor coleta 3 tipos de grandezas, temperatura, pressão e altitude, sendo que a altitude é baseada nos valores obtidos no sensor de pressão. A faixa do sensor de pressão está entre 300-1100 hPa, o que resulta na faixa de altitude de -500 metros a 9 mil metros do nível do mar. A faixa do sensor de temperatura está entre -40 a 85 ° C, com uma precisão de +/- 2°C. Sua alimentação pode ser de 3.3 V ou 5 V seu protocolo de comunicação é o I2C de 7-bit.
A Montagem
Como podemos ver pelo esquema da figura 1, utilizaremos os pinos de alimentação da Pi Pico para alimentar o sensor, e vamos utilizar os pinos 16 e 17 para a comunicação I2C [3]. Vale a pena notar que existem diversos tipos de fabricantes e nem sempre os pinos são iguais entre si, então antes de conectar os pinos, verifique os pinos.
Figura 1 - Esquema elétrico
O Código
Aqui utilizaremos o Micropython e a IDE do Thonny.
Como de costume, para qualquer shield ou componente que utilizamos extra nas montagens com a Raspberry Pi Pico, precisamos da biblioteca deste fornecido pelo fabricante ou de alguém que precisou montar uma biblioteca para um componente que o fabricante não se preocupou com isso.
A biblioteca do BMP180 que utilizaremos é o BMP180.py [2].
O código principal está descrito abaixo o qual deixei as linhas comentadas.
from bmp180 import BMP180 # importa a classe BMP180 da biblioteca bmp180
from machine import I2C, Pin # importa as classes I2C e PIN da biblioteca machine
from time import sleep # importa a classe sleep da biblioteca time
i2c = I2C(0, sda=Pin(16), scl=Pin(17)) #Cria a variável i2c com os parâmetros de conexão
bmp180 = BMP180(i2c) # cria a variável bmp180, conectando o sensor com os parâmetros da classe I2C
bmp180.oversample_sett = 3 # precisão da leitura
# 0- Bem Baixa 1-Baixa
# 2-Intermediaria 3-Alta .
bmp180.baseline = 101325 # pressão nível do Mar em Pa
print ('ID = {}'.format(hex(bmp180.chip_id[0]))) # exibe o ID do BMP180
while True:
temperatura = bmp180.temperature # captura o valor da temperatura
pressao = bmp180.pressure # captura o valor da pressão
altitude = bmp180.altitude # captura o valor da altitude
print('Temperatura {:.1f}C Pressao {:.0f}Pa Altitude {:.2f}m'.format(
temperatura, pressao, altitude)) # exibe no shell os valor
sleep(2) # espera 2 segundos
Nota
No código bmp180.py é preciso informar o ID do I2C do componente, como podemos ter diversos fabricantes, nem sempre é o padrão fornecido pelo datasheet, logo é possível fazer uma varredura pelos dispositivos conectados em busca do endereço correto.
from machine import I2C
sda = machine.Pin(16) #define pino SDA
scl = machine.Pin(17) #define pino SCL
i2c = machine.I2C(0,sda=sda,scl=scl, freq=400000)
#define I2C, pinos e frequência do colck (SCL)
print('I2C address:')
print(i2c.scan(),' (decimal)')
#função de escanear endereços.
Conclusão
Neste exemplo usamos apenas um sensor para puxar as medidas de pressão, altitude e temperatura, onde pode ser utilizados em diversos tipos de aplicações. Se você estiver usando uma Pi Pico 2W, que tem conexão bluetooth e WiFi, você poderá enviar estes dados para as nuvens.
Referências
[1] - Datasheet do BMP180 - https://cdn-shop.adafruit.com/datasheets/BST-BMP180-DS000-09.pdf
[2] - bmp180.py - https://github.com/micropython-IMU/micropython-bmp180
[3] - Usando Sensores com a Raspberry Pi Pico https://clubedeautores.com.br/livro/usando-sensores-com-a-raspberry-pi-pico
[4] - A saga da Pi Pico - https://www.youtube.com/watch?v=BlkrwoXfiJs&list=PLUg1G7GdWdJxOumCzW3H2cqWJY3a1-kVM