Mierzenie podstawowych danych środowiskowych w naszym mieszkaniu – temperatury oraz wilgotności to jedno z najpopularniejszych zastosowań powszechnie dostępnych czujników dla Raspberry Pi (RPi), Orange Pi (OPi) czy ESP8266.
Kolejnym krokiem było dodanie pomiarów SMOGu, dziś zajmiemy się dwoma nowymi i bardzo ciekawymi czujnikami jakości powietrza.
UWAGA: Pamiętajmy o podstawach bezpieczeństwa pracy z substancjami niebezpiecznymi – są nie tylko trujące w odpowiednich stężeniach, ale także łatwopalne!
Czujnik Bosh BME680
Czujnik gazów – lotnych związków organicznych „volatile organic compounds” czyli na przykład (za Wikipedią):
- aceton – farby, pokrycia ochronne, zmywacze, materiały wykończeniowe etc.
- węglowodory alifatyczne (dekan, oktan, heksan) – farby, kleje, procesy spalania, składniki uszczelniaczy, fotokopiarki, benzyna, dywany, linoleum
- węglowodory aromatyczne (toluen, ksylen, benzen) – procesy spalania, kleje, farby, benzyna, linoleum, tynki, masy gipsowe
- związki zawierające chlor (dichlorometan, chlorek metylu, trichloroetan) – tapicerowanie, środki do czyszczenia dywanów, lakiery, zmywacze, rozpuszczalniki
- octan n-butylu – pokrycia dźwiękochłonne, linoleum, uszczelnienia
- dichlorobenzen – środki przeciw molom, odświeżacze powietrza, dywany
- 4-fenylocykloheksen (4-PC) – farby, dywany
- terpeny – nabłyszczacze, środki czystości, dezodoranty, zmiękczacze, papierosy
Mimo, że czujnik nie jest nowy – w chwili pisania artykułu – oprócz Adafriut czy Nettigo – nie ma zbyt wielu implementacji dla entuzjastów DIY.
Wersję Nettigo, którą testuję, jest jednocześnie zgodnym z wyprowadzeniami popularanej wersji opartej na ESP8266 – Wemos D1 mini oraz pro. Jednocześnie jak zauważa Nettigo – instalowanie czujnika bezpośrednio nad ESP8266 może fałszować wyniki dczytu temperatury -ponieważ BME680 zawiera w sobie znane z BME280 czujniki temperatury, wilgotności i ciśnienia.
Czego będziemy potrzebować dla BME680?
Hardware:
- czujnik BME680 (np: Nettigo)
- Raspberry Pi (dowolne, ze sprawną szyną I²C
Software:
- Biblioteka: https://github.com/pimoroni/bme680
Podłączenie
Zaczynamy od modyfikacji czujnika – jeśli zakupiliśmy w Nettigo – zmiany domyślnego adresu poprzez zwarcie odpowiednio oznaczonych pól lutowniczych.

Upewniamy się, że nasze RPi z raspbianem ma włączoną szynę I²C:
1 |
sudo raspi-config |
W sekcji Advanced, włączamy I²C i uruchamiamy ponownie RPi.
Następnie podłączamy według bardzo prostego schematu:
- D1 BME680 do SCL RPi
- D2 BME680 do SDA RPi
- GND BME620 do GND RPi
- 3,3V BME620 do 3,3V RPi
Instalujemy bibliotekę z: https://github.com/pimoroni/bme680:
1 2 3 |
mkdir -p BME680 cd BME680 curl https://get.pimoroni.com/bme680 | bash |
Następnie przechodzimy do katalogu examples i uruchamiamy przykłady:
1 2 |
cd examples python indoor-air-quality.py |
Po około 5 minutach powinniśmy dostać informację o jakości powietrza w % – odsyłam do definicji IAQ (jęz. angielski)

W celu sprawdzenia można zbliżyć chusteczkę nasyconą alkoholem izopropylowym, marek (np: permanent) – który zawiera lotne związki przypominające tolouen czy też aceton i zaobserwować szybkość wykrycia oraz powrotu do stanu poprzedniego czujnika.
Odczyt możemy przerwać poprz CTRL+C, a następnie wypróbować pozostałe przykłady: read-all.py oraz temp-press-hum.py.
Pracuję obecnie nad wyświetlaczem podstawowych danych jakości powietrza w domu.
Czujnik AMS CCS811

CCS811 podobnie jak Bosch BME680 posiada możliwość pomiaru VOC (całkowitej liczby VOC – TVOC) oraz równowartość obliczoną dwutlenku węgla (eCO2). Jest więc bardzo dobrym uzupełnieniem poprzedniejgo czujnika i pozwala na weryfiowanie wykrywania VOC. Pracuje na tej samej magistrali I²C i można go podłaczyć równolegle z poprzednim czujnikiem do RPi, jednak ze względu na jego zużycie około 60mW – należy wtedy doprowadzić zewnętrzne zasilanie 3,3V z odpowiednią wydajnością prądową.
Czego będziemy potrzebować dla CCS811 ?
Hardware:
- czujnik CCS811
- Raspberry Pi (dowolne, ze sprawną szyną I²C)
Software:
- Biblioteka: https://learn.adafruit.com/adafruit-ccs811-air-quality-sensor/raspberry-pi-wiring-and-test
Podłączenie
- SCA CSS811 do SCA RPi
- SCL CSS811 do SCL RPi
- GND CSS811 do GND RPi
- WAKE CSS811 do GND RPi
- 3,3V CSS811 do 3,3V RPi

Następnie musimy dokonać zmiany – bardzo spowolnić szynę I²C tak aby RPi poprawnie pracowało z czujnikiem. Oznacza to, że równolegle podłączone urządzenie mogą mieć problem z działaniem:
1 |
sudo nano /boot/config.txt |
Na końcu pliku dodajemy linię:
1 |
dtparam=i2c_baudrate=10000 |
Uruchmiamy ponownie RPi, po ponownym uruchomieniu należy sprawdzić czy pod adresem 5a widzimy nasz czujnik:
1 |
sudo i2cdetect -y 1 |
Jeśli czujnik nie został wykryty – musimy sprawdzić czy na pewno podaliśmy odpowiedni baudrate dla szyny I2C i uruchomiliśmy ponownie RPi.
Gdy już zobaczymy „5a”, możemy przystąpić do instalacji:
1 2 3 4 5 |
sudo apt update sudo apt install git build-essential python-pip python-dev python-smbus git clone https://github.com/adafruit/Adafruit_Python_GPIO.git cd Adafruit_Python_GPIO sudo python setup.py install |
Po zainstalowaniu odpowiednich bibliotek oraz obsługi GPIO dla Pythona, pobieramy i instalujemy – bibliotekę dla czujnika CSS811:
1 |
sudo pip install Adafruit_CCS811 |
Pozostaje zainstalować program demonstracyjny, który odczyta dane z czujnika. Zalecane jest uruchmienie go na co najmniej 24 godziny aby dosłownie dotarł (wypalił) się, ponieważ na początku będzie pokazywał zawyżone wartości. Możemy go oczywiście delikatnie traktować gazami, przy czym nie polecam tryskania bezpośrednio w czujnik alkoholem izopropylowym – lepszy będzie wacik. Instalujemy:
1 2 3 4 |
cd ~/ git clone https://github.com/adafruit/Adafruit_CCS811_python.git cd Adafruit_CCS811_python/examples sudo python CCS811_example.py |
W odpowiedzi powinniśmy otrzymać:

W przypadku markera wynik wygląda następująco:

Przykłady w pythonie są bardzo przyjazne i bez większego problemu możemy przekazać wyniki z czujników do np: domoticza czy InfluxDB – tak jak w poprzednim przykładzie.
A już niedługo:

To wszystko!
Witam
Kiedy można spodziewać się opisu do Bosch BME680 ?
Testuję, testuję – muszę połączyć i uprościć oraz podłączyć do wykresów. W tym roku!
Ok czekam z niecierpliwością
Dnia 10 grudnia 2017 14:19:51 CET, Disqus napisał(a):
Gotowe!
Wszystko podłączone i zrobione według opisu ale gdy wydam polecenie python indoor-air-quality.py zamiast odczytu z czujnika dostaję odpowiedz:
Estimate indoor air quality
Runs the sensor for a burn-in period, then uses a
combination of relative humidity and gas resistance
to estimate indoor air quality as a percentage.
Press Ctrl+C to exit
Traceback (most recent call last):
File „indoor-air-quality.py”, line 16, in
sensor = bme680.BME680()
File „/usr/local/lib/python2.7/dist-packages/bme680/__init__.py”, line 25, in __init__
self.chip_id = self._get_regs(CHIP_ID_ADDR, 1)
File „/usr/local/lib/python2.7/dist-packages/bme680/__init__.py”, line 285, in _get_regs
return self._i2c.read_byte_data(self.i2c_addr, register)
IOError: [Errno 5] Input/output error
Co może być nie tak ?
To może być odwrotnie podłączone I2C lub brak zasilania sensora. I2C włączone w RPi ?
Tak włączone jutro sprawdzę czy nie odwrotnie nie podłączone a jest może możliwość podłączenia wyników do Domoticza ?
Tak, podobnie jak w przykładzie na końcu
A jak by to może lepiej do influxa wysyłać zamiast domoticza? Masz jakieś rozwiązanie na to?
Jeśli do domoticza, to i do InfluxDB – ten sam mechanizm. Ale najpierw niech one się trochę wygrzeją, bo nie tyle kwestia wyrzucenia danych – ile samego przetestowania ich możliwości
Do ciągłej pracy z CCS811 – zewnętrzne zasilanie, dla samego BME680 – można z +3,3V RPi
Panie Łukaszu czy można się jakoś z Panem telefonicznie telefonicznie skontaktować? Bardzo mi zależy, jak Pan może to proszę o sms na mój numer 507106190 to oddzwonię do Pana, Pozdrawiam, Piotr