CCS811 & BME680 with Raspberry Pi 0 W

Pomiar jakości powietrza, zawartości niebezpiecznych gazów: Bosch BME680 oraz AMS CCS811 – IAQ, TVOC, eCO2

BME680 on Raspberry Pi 3

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ą):

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:

Podłączenie

BME680 - back
Zaczynamy od modyfikacji czujnika – jeśli zakupiliśmy w Nettigo – zmiany domyślnego adresu poprzez zwarcie odpowiednio oznaczonych pól lutowniczych.

BME680 - modyfikacja adresu szyny I2C
BME680 – modyfikacja adresu szyny I²C

Upewniamy się, że nasze RPi z raspbianem ma włączoną szynę I²C:

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:

Następnie przechodzimy do katalogu examples i uruchamiamy przykłady:

Po około 5 minutach powinniśmy dostać informację o jakości powietrza w % – odsyłam do definicji IAQ (jęz. angielski)

BME680 output
BME680 output

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
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:

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
CCS811 - wiring
CCS811 – wiring

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:

Na końcu pliku dodajemy linię:

Uruchmiamy ponownie RPi, po ponownym uruchomieniu należy sprawdzić czy pod adresem 5a widzimy nasz czujnik:

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:

Po zainstalowaniu odpowiednich bibliotek oraz obsługi GPIO dla Pythona, pobieramy i instalujemy – bibliotekę dla czujnika CSS811:

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:

W odpowiedzi powinniśmy otrzymać:

CCS811 - output
CCS811 – output

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

CCS 811 - returning to normal
CCS 811 – returning to normal

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:

e-paper weather station
e-paper weather station

To wszystko!



12 thoughts on “Pomiar jakości powietrza, zawartości niebezpiecznych gazów: Bosch BME680 oraz AMS CCS811 – IAQ, TVOC, eCO2”

  1. Witam
    Kiedy można spodziewać się opisu do Bosch BME680 ?

    1. Testuję, testuję – muszę połączyć i uprościć oraz podłączyć do wykresów. W tym roku!

      1. Ok czekam z niecierpliwością

        Dnia 10 grudnia 2017 14:19:51 CET, Disqus napisał(a):

          1. 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 ?

          2. To może być odwrotnie podłączone I2C lub brak zasilania sensora. I2C włączone w RPi ?

          3. Tak włączone jutro sprawdzę czy nie odwrotnie nie podłączone a jest może możliwość podłączenia wyników do Domoticza ?

          4. Tak, podobnie jak w przykładzie na końcu

  2. A jak by to może lepiej do influxa wysyłać zamiast domoticza? Masz jakieś rozwiązanie na to?

    1. 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

  3. Do ciągłej pracy z CCS811 – zewnętrzne zasilanie, dla samego BME680 – można z +3,3V RPi

  4. 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

Comments are closed.