Verbinden Sie mehrere DS18B20 drahtlos in einem Haus

Ich plane, Temperaturdaten in meinem ganzen Haus mit mehreren DS18B20 zu lesen und alle Daten an einen Himbeer-Pi zu senden. Ich habe es bereits geschafft, Daten von einem Sensor zu interpretieren, der direkt mit dem Pi verbunden ist, aber ich habe Probleme, einen Weg zu finden, mehrere von ihnen drahtlos zu verbinden.

Ich habe mir Produkte wie dieses RX-Tx-Paar angesehen , aber ich glaube nicht, dass es auf zwei Arten kommunizieren kann, und ich glaube, dass der DS18B20s sowohl senden als auch empfangen muss. Ich habe mir auch diesen Transceiver angesehen , aber es sieht so aus, als ob er viel mehr Ports verwendet, als ich möchte, und ich bin mir nicht sicher, ob er die einzelne Datenleitung übertragen kann, die ich ohne alle anderen Drähte / Ports benötigen . Ich suche im Grunde (glaube ich) nach einem Transceiver, der nur die eine Leitung kommuniziert, die ich brauche, ohne all die Extras (falls dies überhaupt existiert / möglich ist). Ich habe das Gefühl, dass ich etwas vermisse, das sehr offensichtlich ist, aber ich kann nicht herausfinden, was. Hier ist das DS18B20-Datenblatt, wenn es hilft. Vielen Dank im Voraus.

Sie müssen die Hardwarekosten mit der Softwareentwicklungszeit abwägen. Ein Bluetooth-4-MCU im Wert von 1,00 US-Dollar beispielsweise erledigt dies auf Kosten von Hunderten von Stunden Programmieren, Lernen und Layouten einer Platine. Ich würde auf die Seite lehnen, 5 Pi Zero W zu kaufen ... $ 10 pro Stück und Sie wissen bereits, wie man sie programmiert. Arduino und ESP32 liegen irgendwo dazwischen.
In Anbetracht der Tatsache, dass die Luftrückführung die Lufttemperatur misst und einen einfachen Zugang zum Telefonkabel ermöglicht, warum nicht den einfacheren Weg zu einem adressierbaren Bus machen. Lassen Sie dann einen drahtlosen Knoten alle zu teilenden Daten sammeln.

Antworten (5)

Während das DS18B20-Signalisierungsprotokoll eine Übertragung erfordert, um es abzufragen, möchten Sie dies nicht über eine Funkverbindung weitergeben. Stattdessen würde eine lokale MCU im Knoten den Sensor abfragen und dann das Ergebnis unidirektional übertragen.

An dieser Stelle sei darauf hingewiesen, dass es bereits serienreife drahtlose Temperatursensoren gibt. Zum Beispiel sowohl Geräte mit eigenem LCD-Display, die auch ein OOK-Signal auf 433 MHz senden, als auch displaylose Außenfühler für Indoor-/Outdoor-Systeme. Oft ist die On-Air-Codierung undokumentiert und proprietär, aber oft ist es einfach, sie zurückzuentwickeln, und es wurden mehrere Codebasen für die Decodierung veröffentlicht. Die größte Sorge könnte bestehen, wenn die Knoten eindeutige Seriennummern haben (wahrscheinlich, aber vielleicht nicht alle Modelle). Kollisionen sind dort nicht wirklich ein Problem, solange genügend störungsfreie Pakete vorhanden sind, um eine vernünftige Aktualisierungsrate zu erhalten. Schließlich ist, wie bei benutzerdefinierten Projekten, eine gute Akkulaufzeit etwas, das variieren kann, je nachdem, wie viel Aufwand hineingesteckt wurde.

Wenn Sie sich entscheiden, etwas kundenspezifisches zu machen, suchen Sie nach einer kostengünstigen Lösung für MCU und Funksender. SAW-Resonator-basierte 300-433-MHz-Sender, wie Sie sie verlinkt haben, sind eine Option, und mit einem Pin für den Sensor und einem für das Radio können Sie einige der kleinsten 6- oder 8-Pin-MCUs verwenden. Wenn Sie sich jedoch für diesen Weg entscheiden, sollten Sie die Verwendung eines anspruchsvolleren Empfängers am pi in Betracht ziehen - TI und SiLabs haben beide Angebote, die "echte" abstimmbare Superheterodyn-Datenfunkgeräte sind, die den billigen regenerativen Empfängern weit überlegen sind.

Weit ausgefeiltere 2,4-GHz-Datenfunkgeräte können ebenfalls billig sein, erfordern jedoch normalerweise einen vollständigen SPI-Bus zur Steuerung, was mehr MCU-Pins bedeutet. Einige der BTLE MCU/Radio-Kombinationen können auch in einfacheren proprietären Modi betrieben werden, die manchmal mit den Legacy-Luftprotokollen wie dem des nRF24 kompatibel sind, aber tendenziell mehr kosten als ein billiges Radio und MCU. Auf der positiven Seite können Sie sie bereits in einem Submodul zusammengefügt bekommen. Es gibt auch einige sehr günstige MCU + Funkkombinationen aus China, die in Dingen wie Spielzeugdrohnen zu finden sind, die anwendbar sein könnten - wenn Sie die notwendige Dokumentation erhalten, um mit ihnen zu arbeiten.

ESP8266 und ESP32 werden im Allgemeinen als WiFi-Geräte betrachtet, bieten jedoch einige proprietäre Modi, die nur die Luftsignalisierung auf niedrigerer Ebene ohne die höheren Protokollschichten verwenden, wodurch die Zeit- und Energiekosten für die Verbindung mit einem Netzwerk vermieden werden, nur um einen Messwert zu melden und sofort zu gehen wieder einschlafen.

Obwohl das proprietäre LoRa-Modulationsschema jetzt viel Aufmerksamkeit für Sensorberichte mit größerer Reichweite erhält, ist es erwähnenswert, dass mit zunehmender Popularität die Verfügbarkeit kostengünstiger programmierbarer Hardware-Kits zunimmt, sodass die Semtech-Funkgeräte bis zu einem gewissen Grad in einfacheren OOK oder betrieben werden können FSK-Modi und sprechen Sie mit anderen Geräten, die diese implementieren. Diese liegen jedoch immer noch in der Klasse über 20 US-Dollar pro Knoten, und es scheint, dass es zumindest in der Empfangsrolle möglicherweise nicht möglich ist, eine einfache RSSI-Squelch allein zu aktivieren, sondern vielmehr erforderlich ist, um den Paketpräambeldetektor zu befriedigen oder es vorzutäuschen Festlegen einer Mindestlänge und einer maximalen Fehlertoleranz.

Sie haben Recht, Ihr Thermometer-IC „spricht“ den bidirektionalen Single-Wire-Bus, und das ist nichts, was Sie einfach in diese ultra-vereinfachten (und fragwürdig legalen) Sender einspeisen könnten. Sie müssen nach Daten "gefragt" werden, und das tun Sie in keiner Weise.

Außerdem führen diese Sender nur eine Amplitudenumtastung (ASK) eines kontinuierlich laufenden Oszillators mit fester Frequenz durch. Das bedeutet, dass Sie nicht zwei davon gleichzeitig senden können, da es keine Möglichkeit gibt, die beiden Signale voneinander zu unterscheiden.

Darüber hinaus sind alle Ihre Sensoren identisch. Selbst wenn Sie das auf magische Weise zum Laufen gebracht haben und solche Kollisionen durch reines Glück vermeiden würden, könnten Sie immer noch nicht sagen, welcher Ihrer Sensoren gemeldet hat.

Egal, was Sie tun, Sie benötigen also einen Mikrocontroller , der auf der einen Seite mit Ihrem Sensor und auf der anderen Seite mit einer Art HF-Hardware kommuniziert. Im Idealfall sollte diese HF-Hardware viel besser sein als diese 433-MHz-Abscheulichkeiten.

Diese Transceiver auf Basis von nRF24L01, die Sie gepostet haben, sind viel besser – obwohl sie auf einem Chip basieren, den der IC-Hersteller bereits als „nicht empfohlen für neue Systeme“ gekennzeichnet hat, können sie tatsächlich viel mehr.

Sie könnten einen billigen Mikrocontroller (z. B. ein Arduino oder einen Klon) erhalten, der 1-Draht mit Ihrem Sensor und SPI mit der HF-Platine kommuniziert. Dann verteilen Sie diese herum. Ihr zentraler Arduino-Knoten fragt dann regelmäßig jeden Ihrer Sensorknoten nach Daten, und Ihr Mikrocontroller am Sensorstandort antwortet dann.

"Dann konnten Sie immer noch nicht sagen, welcher Ihrer Sensoren gemeldet hat" Das ist falsch, die DS18B20 haben IDs.
Ja, aber wenn sie keiner danach fragt, können sie es auch nicht melden. Ich würde das alles unter "kann nicht ohne eine lokale MCU arbeiten, um mit ihnen zu sprechen" zusammenfassen.

Der 1-Draht-Bus benötigt eine MCU, um mit angeschlossenen Geräten zu kommunizieren: -

Geben Sie hier die Bildbeschreibung ein

Ich habe Probleme, eine Möglichkeit zu finden, mehrere von ihnen drahtlos zu verbinden

Jeder 1-Wire-Sensor benötigt eine MCU, und wenn Sie mehrere Sensoren drahtlos verbinden möchten, kann jede MCU auch verwendet werden, um beispielsweise einen lokalen 433-MHz-Sender anzusteuern, den ein einzelner Funkempfänger empfangen kann. Dieser einzelne Empfänger ist allen Sendern gemeinsam.

Ich habe mir Produkte wie dieses RX-Tx-Paar angesehen, aber ich glaube nicht, dass es auf zwei Arten kommunizieren kann, und ich glaube, dass der DS18B20s sowohl senden als auch empfangen muss.

Die lokale MCU kann mit dem DS18B20 kommunizieren und diese lokale MCU kann einen lokalen Funksender steuern. Mit anderen Worten, versuchen Sie nicht, einen 1-Draht-Funksender herzustellen - halten Sie das 1-Draht-System lokal an jeder MCU und verwenden Sie die Reserveleistung der MCU, um den Sender so zu steuern, wie er gesteuert werden muss. Versuchen Sie nicht, diese Protokolle zu mischen, oder Sie werden nach Ärger fragen und es wahrscheinlich nie zum Laufen bringen.

Ich sehe es so; Sie haben mehrere Temperatursensoren in Ihrem Haus und jeder sendet etwa alle zehn Minuten einen Temperaturwert an einen gemeinsamen Empfänger. Dieser gemeinsame Empfänger spricht mit Ihrem RaPi.

Es kommt zu Kollisionen, aber da eine einzelne Übertragung in 100 ms abgeschlossen sein kann, beträgt die Belegung des gemeinsamen Kanals 1 Sekunde in 10 Minuten für 10 Sensoren. Sie können dem Zeitpunkt der Übertragung ein wenig Zufälligkeit hinzufügen, sodass bei Datenkollisionen aufgrund gleichzeitiger Übertragung die Wahrscheinlichkeit gering ist, dass dies erneut auftritt.

Ich habe ein System wie dieses entwickelt, das etwa hundert Gefrierschränke in einem Lagerhaus überwacht. Jeder Sender sendete blind mit etwas Zufälligkeit im Timing. Zwischen den Übertragungen gingen die MCU und der Sender in den Ruhezustand und Sie konnten mit einer kleinen 9-Volt-Batterie etwa 1 Jahr Batterielebensdauer erreichen. Das System suchte nach einer frühzeitigen Erkennung eines defekten Gefrierschranks. Ich habe HF-Material von dieser Firma verwendet , weil sie seriös sind.

Hübsch! Eine gut geschriebene Antwort eines Experten für solche Systeme rechtfertigt meine positive Bewertung. In Bezug auf die drahtlose Verbindung: Vielleicht möchte OP sich für die zahlreichen IEEE802.15.4-Optionen entscheiden, die heute verfügbar sind und HF und Mikrocontroller integrieren. Die EM34x- und EFR32G-Serien von Silabs scheinen interessant zu sein, ebenso ATSAMR21 sowie die TI-Konkurrenz
@MarcusMüller danke Marcus. Ich habe das Gefühl, dass das OP, wenn es darüber nachdenkt, erkennen wird, dass sich ein blindes Sendesystem für Batteriestrom eignet (etwas, das er in der Frage nie erwähnt hat). Persönlich würde ich mehrere dumme FM-Sender und einen dummen FM-Empfänger kaufen und die MCU verwenden, um die Daten in ein Paket zu formatieren, das Präambel, Adresse, Nutzlast und Prüfsumme enthält. FM-Zeug ist normalerweise besser entworfen und hergestellt.
Nun, für Netzwerke mit geringer Dichte sind Aloha und spontanes Wake-up-and-Do-Zeug sicherlich in Ordnung, aber ich bin mir nicht sicher, ob OP danach strebt. Abgesehen davon, ja, aus Komplexitätssicht ist einfaches FSK-Zeug schwer zu schlagen. Andererseits würde ich selbst alles übertreiben, wahrscheinlich den ganzen zentralen Knoten in softwaredefiniertem Radio machen, aber das ist einfach, wer ich (und mein Institut ) bin.
@MarcusMüller Ich bin mir nicht sicher, was das Institut ist, aber da ich tatsächlich davon gehört habe, muss es wichtig sein. Besitzen Sie es?

Ihr DS18B20-Sensor benötigt eine lokale MCU, um Temperaturwerte über das 1-Wire-Protokoll zu senden/empfangen.

Anstatt das System durch die Verwendung seltsamer und sehr teurer Funktransceiver zu verkomplizieren, sollten Sie die Verwendung von so etwas wie einem ESP8266 in Betracht ziehen, das sich direkt mit einem lokalen WLAN verbindet, was auch vom Raspberry Pi trivial einfach zu handhaben ist. Sie haben wahrscheinlich bereits WLAN (2,4-GHz-fähig) in Ihrem Haus, daher ist es ein Kinderspiel, den Raspberry Pi und Ihre Remote-Sensoren daran anzuschließen.

Folgen Sie einem Springball-Projekt wie diesem , das auf den Großteil des erforderlichen Codes verweist und einfach in der Arduino-Entwicklungsumgebung implementiert werden kann. Es gibt viele GitHub-Projekte, nach denen Sie auch suchen können.

Wenn Sie keine eigenen PCBs entwerfen möchten, können Sie Arduino-kompatible Boards wie dieses kaufen, die nur ein paar Dollar kosten.
Geben Sie hier die Bildbeschreibung einSie werden mehrere Varianten finden, von denen einige als die anderen von Wemos-D1 ohne jegliche Markierungen gekennzeichnet sind.

Die benötigte Leistung ist recht überschaubar:
Geben Sie hier die Bildbeschreibung ein

Sie können in etwa einer Sekunde ohne Probleme einschalten, zuordnen, anmelden, Daten senden und ausschalten.
Sie können Projektfälle erhalten, die dem Arduino-Formfaktor für entweder Netzspannung (hauptsächlich USB-Stromversorgung oder batteriebetriebene Optionen) entsprechen.
Es lohnt sich sicherlich nicht, dies auf irgendeine Weise zu tun, da Sie vorhandene Bibliotheken nicht verwenden können, um das Projekt voranzutreiben ... Ihre Entwicklung wird einfach ein Albtraum sein.

Die NRF24L01+-Module sind einfach zu bedienen und billig, aber Sie benötigen immer noch eine lokale MCU, um sie zu steuern. Sie werden am Ende mehr Geld und Zeit damit verbringen, sie zu verwenden (und ich habe viele davon verwendet), als eine ESP8266-Lösung zu verwenden. Nichts ist einfacher.

Dadurch wird Ihr Projekt zu einem einfachen Webservice auf dem Raspberry Pi und Ihre Remote-Sensoren werden eingeschaltet, verbunden und Zeit-/Temperaturwerte hinterlegt. Was könnte einfacher sein.

Hinweis Wenn Sie dazu neigen, im Wesentlichen sofort einsatzbereite Lösungen zu kaufen, können Sie die Verwendung der TI Simplelink-Sensoren (ARM-basiert) in Betracht ziehen. Diese sind bei mehreren Varianten ($ 30-40) recht günstig, die sich mit Netzwerken wie BLE über WiFi verbinden. Die WiFi-Version beansprucht 3 Monate mit 2 * AAA-Batterien bei einer Aktualisierungsrate von 1 Minute, sollte also bei 5-minütigen Aktualisierungen etwa ein Jahr dauern. Ich habe sie nicht ausprobiert, aber es scheint keinen Grund zu der Annahme zu geben, dass sie nicht zuverlässig sind.

Wenn Sie einen ESP8266 im WiFi-Modus verwenden, wird sich wahrscheinlich herausstellen, dass für jeden Knoten Netzstrom benötigt wird. Bei Batterien ist die Verwendung im niedrigeren Nicht-WiFi-Signalisierungsmodus wahrscheinlich sinnvoller, um die Zeitkosten für die tatsächliche Verbindung mit einem Netzwerk zu vermeiden. Sie können dann einen anderen ESP8266 als zentralen, netzbetriebenen Empfänger verwenden, der seriell mit dem Pi kommuniziert, und die Daten auf Wunsch dann mit herkömmlichen Netzwerkclients teilen.
@ChrisStratton, wenn Sie AA- oder sogar AAA-Batterien verwenden, gibt es kein wirkliches Problem mit der Batterieleistung. Sie können die Batterien monatelang halten lassen.
Das ist eine Menge sperriger Akku für einen Temperatursensor, und Ihre Lebensdauerberechnungen sind zweifelhaft, es sei denn, Sie aktualisieren sehr selten. Die Zeit, die erforderlich ist, um sich mit einem WiFi-Netzwerk zu verbinden und IP-Protokolle darüber zu sprechen, bedeutet mehrere Größenordnungen mehr Stromverbrauch als tatsächlich benötigt wird, um eine einfache Identität und einen Temperaturmesswert zu übertragen, selbst wenn dies mit einer direkten Bestätigung auf niedriger Ebene geschieht.
@ChrisStratton, ich bin mir nicht sicher, warum Sie denken, dass es lange dauert, eine IP-Adresse zuzuordnen und zu erhalten. Sie können die benötigte Zeit sicherlich verkürzen, indem Sie eine versteckte SSID (keine Sonden senden) und einen festen Kanal annehmen, und dann können Sie DHCP (was meiner Meinung nach die längste Verzögerung ist) eliminieren, indem Sie eine IP-Adresse zuweisen. Sie können auch SOAP-Webservices über UDP ausführen und die TCP-Verbindungszeit eliminieren (so klein sie auch ist).
@ChrisStratton, beim Scannen des Internets sehe ich, dass einige Leute unter langen Verbindungszeiten leiden (etwa 2 Sekunden), aber dies kann mit der richtigen Einrichtung vermieden werden. Dieser Typ hatte eine anständige Beschreibung der Probleme, die er erlebte: bakke.online/index.php/2017/06/24/… ... und ich mag seinen Trick, die erforderlichen Informationen in die RTC zu schreiben .... ich hart programmierte Mine rein.
Es ist einfach unbestreitbar, dass die Verbindung mit einem AP und das Senden von IP-Verkehr um Größenordnungen mehr Funkaktivität bedeutet, als tatsächlich benötigt wird, um eine Identität und einen Temperaturmesswert zu übertragen. Wenn Sie das minimieren können, großartig - aber es wird immer noch viel teurer als nötig sein. Unabhängig davon, welche Akkulaufzeit Sie Ihrer Meinung nach erreichen können, stellen Sie fest, dass Sie viel mehr aus derselben Hardware herausholen können, wenn Sie keine WLAN-Protokolle verwenden.
@ChrisStratton, teuer in welchem ​​Sinne? Die billigste Lösung (Zeit/Aufwand, $$) scheint WiFi zu sein. Wen interessiert die Einschaltzeit des Funkgeräts, wenn die Lösung die erforderliche Batterielebensdauer bietet? Ich stimme Ihnen also zu, es ist unbestreitbar wahr, dass die WiFi-Lösung potenziell um Größenordnungen höher ist als beispielsweise ein NRF24L01 + ... aber wen interessiert es, ob die Lösung eine angemessene Akkulaufzeit bietet? Wenn die Lösung Knopfbatterien BENÖTIGT, dann ist WiFi nicht der richtige Weg ... aber wenn die Lösung in ein Projektgehäuse passt, das 2-4 * AA oder AAA enthält, dann ist WiFi perfekt geeignet.
Kostenintensiv, da die Batterien viel häufiger ausgetauscht werden als tatsächlich erforderlich. Verwenden Sie Ihre gleiche ESP8266-Hardware - aber indem Sie nur ein rohes Funkpaket ohne all das unnötige höhere Fett senden, können Sie es viel klüger verwenden. Das Ersetzen von Batterien ist nicht nur eine Anschaffungsausgabe, sondern auch Arbeitsaufwand, Entsorgung und mögliche Ausfallzeiten, die alle wirtschaftliche Kosten für jemanden verursachen , auch wenn sie für Sie persönlich nicht sofort sichtbar sind.
@ChrisStratton, ich stimme dir vollkommen zu. Sie könnten den ESP8266 sicherlich ohne WiFi-Protokoll-Overhead verwenden. Jetzt müsste das OP jedoch Software entwickeln (oder beschaffen, und ich sehe keine), um in diesem Modus zu arbeiten. Das ist also weniger leicht zu bewerkstelligen. Natürlich könnten Sie einen ESP8266 als Master (Gateway) zu den anderen Sensorfunkgeräten ohne den Protokoll-Overhead betreiben, obwohl ich vorschlagen würde, dass dies ein anspruchsvolleres Projekt wäre. In diesem Fall ist es besser, zu NRF24L01+ zu wechseln, aber das ist ein ganz anderes Projekt.

Wenn Sie nicht alles von Grund auf neu machen möchten, können Sie Fibaro Z-Wave-Knoten verwenden. Ich verwende ein paar DS18B20 zusammen mit einem Raspberry in meinem Heimautomatisierungsnetzwerk.

Was du brauchst:

Razberry-Transceiver-Board

Fibaro Universalsensor (er dient zum Anschluss des DS18B20)

Und eine 5-V-Versorgung für jeden Knoten. Dann können Sie Domoticz oder eine ähnliche Z-Wave-Hausautomatisierungsanwendung für den Raspberry herunterladen.

Am Ende erhalten Sie eine schöne browserfreundliche Oberfläche, um die Sensoren zu beobachten:Geben Sie hier die Bildbeschreibung ein

Ich habe keinen Feuchtigkeitssensor, daher ist die grüne Linie in der Grafik etwas fehlerhaft.