Projekty z Raspberry Pi: Podłączanie czujnika BME680

Czas czytania: 4 min.

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 BME680Raspberry Pi: numer pinu GPIOFunkcja pinu w Raspberry Pi 
Vin GPIO 1RPi 3.3V *
Vdd (3V3)nie podłączaćnie podłączać
SDA GPIO 3SDA
SCL GPIO 5SCL
GND GPIO 9GND

* 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!

Schemat podłączenia czujnika BME680 z 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.

Podziel się:

Picture of Maciej Figiel

Maciej Figiel

Wszechstronny, chętnie podejmuje się wyzwań, bo uważa, że jest to najszybsza droga ku rozwojowi. Ceni sobie kontakt z naturą i aktywny wypoczynek. Pasjonat motoryzacji i nowych technologii.

Zobacz więcej:

Rafał Bartoszak

Kurs Raspberry Pi Pico – #1 – Zaczynamy

Pierwszy artykuł z cyklu poradników dotyczących programowania dzięki platformie Raspberry Pi Pico W, czyli niewielkiej płytce wyposażonej w całkiem mocny mikrokontroler. Zaczynamy od podstawowych zagadnień i przygotowania odpowiedniego sprzętu, tak aby później na praktycznych przykładach nauczyć się bardziej rozbudowanego programowania.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

Ze względów bezpieczeństwa wymagane jest korzystanie z usługi Google reCAPTCHA, która podlega Polityce Prywatności oraz Warunkom użytkowania.