BME280 1-Wire Sensor

BME280 1-Wire Sensor mit Hilfe des DS28E17 als Bus-Bridge

BME280 1-Wire Sensor

Die Auswahl an guten Feuchtigkeitssensoren auf dem Markt scheint relativ klein. So konnte der DHT22 zum Beispiel nicht wirklich überzeugen. Auf der Suche nach etwas Neuem fiel der BME280 ins Auge. Leider verfügt dieser nur über eine I2C Schnittstelle, die bekanntermaßen nicht für lange Leitungslängen ausgelegt ist. Um den Sensor auf 1-Wire umzubauen, musste also ein Bus-Konverter herhalten. Fündig wird man bei Dallas, dem Erfinder der 1-Wire Lösungen. Mit dem DS28E17 lassen sich ICs mit I2C Schnittstelle einfach per 1-Wire ansprechen. Damit lässt sich jeder I2C Sensor in bestehende 1-Wire Bussysteme integrieren. Wer also schon ein Netzwerk aus DS18B20 Temperatursensoren hat, kann dieses einfach mit zusätzlichen Sensoren bestücken. Leider ist das Löten aufgrund der kleinen Abmessungen und Gehäuseart nicht für Anfänger geeignet.

Update 2021:
Ich habe inzwischen das Layout angepasst, so dass die BME280 und BME680 Versionen die gleiche Größe haben und zum DHT22 Gehäuse passen.
In der Library habe ich Beispiele zum einfacheren Verständnis zum Suchen und Auslesen von mehreren Sensoren hinzugefügt. Wer nur diesen Sensortyp benutzt muss die Sensoren nicht zwingend per ID ansprechen, in diesem Fall können wir den DS28E17 am Family Code 0x19 von anderen Sensoren am Bus unterscheiden. Klar sollte sein, dass der Bus bei der Benutzung eines DS28E17 Übersetzers nicht weiß was für ein Sensor dahinter hängt. Sobald wir also verschiedene Sensoren mit DS28E17 bauen, müssen wir sie immer direkt per ID ansprechen um jeden Sensor individuell auslesen zu können. In einem größeren OneWire Netzwerk würde ich allgemein empfehlen alle Sensoren per ID anzusprechen, um überhaupt den Überblick zu behalten.

Details:
Platinengröße: 19x14mm
Platinenkosten: ca. 15EUR (China)
DS28E17 ~2-3EUR
BME280 ~6,50-7,50EUR

Downloads:
Eagle PCB Dateien: bme280_eagle.zip
Gerber Dateien: bme280_gerber.zip
Arduino Library: BME280_OneWire.zip

19 Antworten auf BME280 1-Wire Sensor

  1. Klara Bauer

    Hi, vielen Dank für diese Idee, ich hab die Schaltung nachgebaut und würde gerne ein Sensor netzwerk auslesen. Kannst du mir deinen Code geben?
    LG Klara

    Antworten
  2. Paul Fay Artikelautor

    Hab den Link ganz unten im Beitrag angehängt. Bin eigentlich gerade dran auf den BME680 aufzurüsten, aber da habe ich selbst noch Probleme mit der Library.

    Antworten
  3. Luboš

    Hello
    I really like your BME280 sensor connection!
    I have big problems with DHT22 home recuperation-unreal values of relative humidity, and I want to replace them with the BME280.
    Is it possible to use 4xBME280 with DS28E17 with one Arduino?
    How to set it up?
    Thanks Luboš

    Antworten
    1. Paul Fay Artikelautor

      hi Luboš,
      I don’t know your knowlege about one wire sensors like a DS18B20 for example. Each Sensor has a unique ID, which makes it possible to put a bulk of sensors on one wire. It’s exactly the same what you can do with a DS28E17 chip. In this case not the sensor but the DS28E17 has the unique ID. So you just have to put all on one line and read it out with your onwire methods. I prefer to read out each ID first to assign each sensor to it’s ID, but you also can use the automatic onewire search functions.
      hope this helps you

      Antworten
      1. Luboš

        Thanks for the reply.
        I am very glad it is possible. I am already using 3x DS18B20. I am happy if the BME280 + DS28E17 connection is also so easy.
        What is your experience with the BME280 accuracy?

        Luboš

        Antworten
        1. Paul Fay Artikelautor

          I also used some DHT22 before and all failed after some month. I’m using my BME280 Module since one year now and it works fine. The first running test is only with one module inside. I hope with heavier conditions outside it works fine as well. I also tried to get the newer BME680 running, but It’s not that easy to change the code to onewire for me. Maybe in the future more luck with it.
          In my BME680 design I changed the board size to 14x19mm, then it’s possible to use the DHT22 housing.

          Antworten
          1. Luboš

            Hi
            Nun, dein engagement funktioniert. Ich habe probleme mit dem code beim anschluss der BME280 1-wire und DS18B20. Jeder sensor brauche ich an einem anderen pin. Bitte zeigen sie code, wie sie richtig vorgehen.
            Danke Luboš

  4. Andreas D.

    Hi,
    Nach deinen Ideen habe ich die Library für den BME680 aufgebaut. Basiert auf der Adafruit 1.0.7 Hast du noch Bedarf?

    VG Andreas

    Antworten
  5. Paul Fay Artikelautor

    Hi Marcel,
    Ich hatte mich noch nicht weiter damit beschäftigt. Hier ist ja schon jemand der das umgesetzt hat. Ich versuche mal den Kollegen zu kontaktieren.

    Antworten
  6. Tobias

    Hallo Paul,
    ich finde das Projekt sehr spannend, traue mir aber nicht zu, eine solche Schaltung selber herzustellen. Besteht die Möglichkeit, die bei dir oder an anderer Stelle zu bestellen?

    Viele Grüße
    Tobias

    Antworten
    1. Paul Fay Artikelautor

      Hallo Tobias,
      fertig bestückte Platinen kann ich leider nicht anbieten. Dafür habe ich selbst nicht die Ausstattung, um das wirtschaftlich produzieren zu können. Die Platine selbst kannst du sehr einfach bestellen. Für das Bestücken des Sensors und Chips braucht man schon etwas Erfahrung bzw. die Ausstattung. Vielleicht kennst du ja jemanden der dir das löten kann.

      Grüße
      Paul

      Antworten
  7. Jan Kandziora

    Du kannst dir das DS28E17-Eval-Kit von Maxim bestellen. Manche Distributoren haben das im Angebot. Auf dem Board sind ein DS28E17, ein DS7505 für Temperaturmessungen sowie zwei 2,54mm-Stift- bzw. Buchsenleisten. Kann man auf ein Prototype-Board stecken oder in eine eigene Bastelschaltung reinlöten.

    Ist aber mit 50€ sehr teuer, als Dreigabe gibt’s noch einen USB-RS232-Onewirer-Hostadapter für den Pezi.

    Antworten
  8. Sebastian

    Hallo, bekomme das ganze auf dem ESP8266 (NodeMCU Board) nicht kompiliert 🙁
    Hat jemand eine Ahnung? Compiler ist AVRDude mkII.

    C:\Users\User\Documents\Arduino\libraries\Adafruit_BME280_1-Wire\Adafruit_BME280_1-Wire.cpp:37:16: error: invalid conversion from ‚const uint8_t* {aka const unsigned char*}‘ to ‚uint8_t* {aka unsigned char*}‘ [-fpermissive]

    deviceAddress = uuid;

    ^

    Antworten
    1. Paul Fay Artikelautor

      Sorry für die späte Antwort. Ich konnte den Fehler beim kompilieren nachstellen. Nach ändern des Datentyps kompiliert es nun. Testen konnte ich es nicht, aber ich denke es sollte nun auch auf ESP8266 und ESP32 funktionieren.

      Antworten

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert