Spis treści:
Temperatura i wilgotność powietrza są głównymi czynnikami mającymi wpływ na warunki pogodowe, z jakimi przychodzi nam się codziennie zmagać. Pomiar tych wartości może znacznie poprawić komfort życia, dając nam okazję na przygotowanie się do warunków zewnętrznych. Jednak z elektronicznego punktu widzenia, również systemy sterowania będą mogły z tego korzystać – wystarczy zastosować odpowiedni czujnik.
Dziś podłączymy czujnik BME680, który pozwoli na pomiar temperatury, ciśnienia, wilgotności i gazu. Poradnik dotyczy modeli 4, 3B+, 3B, 3A+, II, B, Zero W i Zero płytek Raspberry Pi.
Czujnik BME680
Modułem, którym się dziś zajmiemy jest ten wyposażony jest w wysokiej jakości cyfrowy czujnik temperatury, wilgotności, gazu oraz ciśnienia BME680. Do systemów pomiaru warunków pogodowych lub sterowania w oparciu o dane środowiskowe sprawdzi się perfekcyjnie. Może działać w dwóch trybach: uśpienia i w trybie pomiaru wymuszonego. W celu podłączenia wymaga jednak lutowania, a to tego przeznaczone jest 5 pól lutowniczych.
Najważniejsze parametry modułu z czujnikiem BME680:
- Napięcie zasilania: od 3,3 do 5 V
- Zakres pomiaru temperatury: od -40°C do 85°C
- Zakres pomiaru wilgotności: od 0% do 100% RH
- Zakres pomiaru ciśnienia: od 300 do 1100 hPa
- Rozdzielczość pomiaru rezystancji czujnika gazu: od 0,05 do 0,11%
- Tolerancja bVOC: od 10% do 20%
- Certyfikowana dokładność bVOC: od 2% do 5%
- Duże złącza lutownicze: 2,54 mm
Konfiguracja RaspberryPI do pracy z modułem
A. Włącz kanał pierwszy magistrali I2C w Raspberry PI
a. sudo raspi-config menu F5 => wybierz opcję włącz I2C zapisz, wyjdź. sudo reboot now
b. edytuj plik /boot/config.txt i dodaj/włącz następujące dyrektywy:
dtparam=i2c_arm=on
dtparam=i2c_arm_baudrate=10000
zapisz, a następnie uruchom ponownie RPI
B. Sprawdź, czy I2C jest załadowany: ls /dev/*i2c*. To polecenie powinno wyświetlić coś takiego: /dev/i2c-1
C. Sprawdź komunikację I2C czujnika [CCS811 powinien być podłączony, patrz okablowanie w następnym rozdziale]. Uruchom polecenie i2cdetect -y 1. Na wyjściu polecenia powinieneś zobaczyć wylistowany domyślny adres s-Sense CCS811 I2C 0x5A.
D. Zainstaluj wymagane pakiety Pythona
a. wpisz polecenie sudo apt-get install python-setuptools
b. następnie wpisz wget https://files.pythonhosted.org/packages/6a/06/80a6928e5cbfd40c77c08e06ae9975c2a50109586ce66435bd8166ce6bb3/smbus2-0.3.0.tar.gz *
c. Rozpakuj pobrane archiwum. Wpisz tar.gz. tar -xf smbus2-0.3.0.tar.gz
d. chdir smbus2-0.3.0
e. sudo python setup.py install
* pakiet python-smbus2 jest również dostępny tutaj: https://itbrainpower.net/downloadables/smbus2-0.3.0.tar.gz
Podłączenie Raspberry do czujnika BME680
Wszystkie wskazówki dotyczące okablowania są przykładami dla Raspberry Pi 4, 3B+, 3B, 3A+, II, B, Zero i Zero W. Konwencja nazewnictwa GPIO używana w opisie okablowania i w oprogramowaniu to “numer pinu GPIO” – GPIO.setmode(GPIO.BOARD). W skrócie, okablowanie należy wykonać jak poniżej:
Pola lutownicze BME680 | Raspberry Pi: numer pinu GPIO | Funkcja pinu w Raspberry Pi |
---|---|---|
Vin | GPIO 1 | RPi 3.3V * |
Vdd (3V3) | nie podłączać | nie podłączać |
SDA | GPIO 3 | SDA |
SCL | GPIO 5 | SCL |
GND | GPIO 9 | GND |
* zasilanie czujnika –> aby oszczędzić RPi 3V3, przeczytaj jak zasilić czujnik I2C z pinu 5V Rasberry Pi, ale mając referencję I2C na 3.3V!
Nie zasilaj czujnika napięciem 5V, dopóki nie dowiesz się, co dokładnie robisz! Uszkodzisz swoją płytkę Raspberry Pi!
Oprogramowanie Python do czujnika BME680
a. Pobierz bibliotekę BME680 Raspberry Pi Python. Możesz to zrobić TUTAJ.
b. Rozpakuj archiwum tar.gz. Następnie wejdź do nowo utworzonego folderu.
c. Skopiuj poniższy kod, wklej go do nowego pliku i zapisz plik jako “bme680_simple.py” w folderze z biblioteką Pythona. Pobierz stąd (kliknij prawym przyciskiem myszy i użyj opcji zapisz jako): BME680 – Raspberry Pi. Odczyt danych z czujnika – Python
"""
s-Sense BME680 by itbrainpower.net sensors breakout example - v1.0/20200218.
Compatible with:
s-Sense BME680 I2C sensor breakout [PN: SS-BME680#I2C, SKU: ITBP-6003], info https://itbrainpower.net/sensors/BME680-BVOC-TEMPERATURE-HUMIDITY-PRESSURE-I2C-sensor-breakout
all Raspberry PI, using Python 2.7
Reading temperature, pressure, humidity and gas resistance values example (pulling at 2sec) - based on Zanshin_BME680 Arduino library
version 1.0.2 / 2019-01-26 - https://github.com/SV-Zanshin. Thank you Zanshin! Great job!
We've ported Zanshin functions into python, patch them, add some variables, functions and functionalities.
Mandatory wiring [bellow for RPi B/B+/II/3B/3B+/4/Zero/Zero W]:
- sensor Vin <------> RPI pin 1 [3V3 power] *
- sensor I2C SDA <------> RPI pin 3 [i2c-1 SDA]
- sensor I2C SCL <------> RPI pin 5 [i2c-1 SCL]
- sensor GND <------> RPI pin 9 [GND]
Wiring notes:
* to spare 3V3 power - read about RPI I2C sensors 5V powering
WIRING WARNING:
Wrong wiring may damage your RaspberryPI or your sensor! Double check what you've done.
BME680 definitions are placed in bme680_param.py
Bellow, how to set-up i2c on RPi and install requiered python packages and other utilities.
Enable I2C channel 1
a. sudo raspi-config
menu F5 => enable I2C
save, exit and reboot.
b. edit /boot/config.txt and add/enable following directives:
dtparam=i2c_arm=on
dtparam=i2c_arm_baudrate=10000
save and reboot.
Check i2c is loaded:
run: ls /dev/*i2c*
should return: /dev/i2c-1
Add i2c-tools packages:
sudo apt-get install -y i2c-tools
Check sensor I2C connection:
run: i2cdetect -y 1
you should see listed the s-Sense BME680 I2C address [0x76]
Install additional python packages:
a. sudo apt-get install python-setuptools
b. wget https://files.pythonhosted.org/packages/6a/06/80a6928e5cbfd40c77c08e06ae9975c2a50109586ce66435bd8166ce6bb3/smbus2-0.3.0.tar.gz
c. expand archive
d. chdir smbus2-0.3.0
e. sudo python setup.py install
You are legaly entitled to use this SOFTWARE ONLY IN CONJUNCTION WITH s-Sense BME680 I2C sensors DEVICES USAGE. Modifications, derivates and
redistribution of this software must include unmodified this COPYRIGHT NOTICE. You can redistribute this SOFTWARE and/or modify it under the terms
of this COPYRIGHT NOTICE. Any other usage may be permited only after written notice of Dragos Iosub / R&D Software Solutions srl.
This SOFTWARE is distributed is provide "AS IS" in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
or FITNESS FOR A PARTICULAR PURPOSE.
itbrainpower.net invests significant time in design phase of our IoT products and in associated software and support resources.
Support us by purchasing our environmental and air quality sensors from here https://itbrainpower.net/order#s-Sense
Dragos Iosub, Bucharest 2020.
https://itbrainpower.net
"""
from time import sleep
from bme680 import *
#default settings => BMx280_OSR_X1, BMx280_OSR_X1, BMx280_OSR_X1, BMx280_Mode_Forced, BMx280_StandbyTime_1000ms, BMx280_Filter_Off
bme680Begin() #start BMx280 w. default settings
#bme680Begin() #start BME680 w. default settings
#bme680SetSettings(BME680_OSRX4, BME680_OSRX4, BME680_OSRX4, BME680_Filter_2) #set specific settings
bme680SetGas(320, 150) #set gas heater at 320C for 150 miliseconds
while(1):
bme680ReadData()
temperature = bme680GetTemperature()
pressure = bme680GetPressure()
humidity = bme680GetHumidity()
print "Temperature: %.2f C" %temperature
print "Pressure: %.2f Pascals" %pressure
print "Relative Humidity : %.2f %%" %humidity
gas = bme680GetGas()
print "Gas resistence : %.2f mOhm" %gas
sleep(2)
c’. Powyższy kod jest dołączony do pakietu biblioteki BME680 Raspberry Pi Python.
d. Sprawdź parametry BME680 w pliku “bme680_param.py”. Uruchom kod BME680 za pomocą polecenia “python bme680_simple.py“.
Wskazówki:
- jeśli zaktualizujesz kod wewnątrz pliku “bme680_param.py”, przed jego uruchomieniem uruchom narzędzie “./clean”, aby usunąć prekompilowane pliki Pythona.
- Aby przeliczyć jednostki miary, obliczyć wysokość nad poziomem morza i nie tylko, użyj biblioteki pythonowej s-Sense air quality utils.
Artykuł opublikowany za zgodą: itbrainpower.net
Jak oceniasz ten wpis blogowy?
Kliknij gwiazdkę, aby go ocenić!
Średnia ocena: 4.8 / 5. Liczba głosów: 9
Jak dotąd brak głosów! Bądź pierwszą osobą, która oceni ten wpis.