Ich habe viele Beispiele für die Verwendung eines Temperatursensors mit dem Raspberry Pi gesehen. Wie kann ich jedoch 5-6 Temperatursensoren mit einem Raspberry Pi multiplexen? Ich möchte die Temperatur von mehreren Quellen gleichzeitig ablesen.
Kann ich einfach die GPIO-Pins auf dem Raspberry Pi zuweisen, um von jedem Sensor zu lesen, wobei im Wesentlichen die gleiche Konfiguration für einen Sensor repliziert wird, oder benötige ich eine Art Multiplexer, an den alle Sensoren dann wiederum Daten parallel senden würden zum Raspberry Pi?
gpio
sensor
temperature
jc303
quelle
quelle
Antworten:
Vorausgesetzt, Ihr Sensor ist ein DS18B20, und es ist ein 1-Draht-Schaltkreis, und 1-Draht ist ein Protokoll, das mehrere Adressen auf demselben Bus ausführen kann, und das 1-Draht-Temperaturkernmodul kann bis zu 10 Temperatursensoren lesen im selben Bus. (Überprüfen Sie Zeile 49 des Treiberquellcodes ).
Wenn Sie nur 10 Ihrer Sensoren an die gleichen 3 Pins anschließen (3v3, GND und den 1-Draht-E / A-Pin - das ist Pin Nummer 4 auf dem Stecker (dies ist im Treiber fest codiert!) Und Sie werden ihre Ausgänge von / lesen sys / bus / w1 / devices / 28 * / w1_slave, wobei 28 * die individuelle, eindeutige 1-Draht-Adresse ist. Überprüfen Sie das hervorragende Lernprogramm von adafruit . Vergessen Sie nicht, dass der 4K7-Widerstand den Datenstift hochzieht (Nummer 4 - NUR EINE!). Da das interne Hochziehen des Pi ungefähr 50 K ergibt und dies für den Sensor zu viel ist, benötigen Sie diese zusätzliche Komponente.
Sie sollten nur sicherstellen, dass Sie nicht versuchen, parasitäre Energie zu verwenden. Wenn Sie die 3 Pins aller Geräte verbinden, sollte es Ihnen gut gehen.
quelle
You should just make sure you are not trying to use parasitic power.
Was meinen Sie damit? Muss ich ein externes Netzteil anstelle der 3,3 V von Pin1 auf dem GPIO des Pi verwenden? Oder ist parasitärer Strom, wenn ich nur GND + -Daten und nicht den 3V3 verwende? - Es hat sich geweigert, einen Hot-Link zu Ihrem Benutzernamen zu erstellen :-(this is hardcoded in the driver
bedeutet das, dass das Anschließen von Temperatursensoren an einen anderen GPIO-Pin (oder mehrere GPIO-Pins) nicht funktioniert?Als Referenz finden Sie hier einen kurzen Ausschnitt aus Python, um den 1-Draht-GPIO zu bitbangen und den Temperaturmesswert für den ersten Sensor zurückzugeben. Es sollte einfach genug sein, Änderungen vorzunehmen, um die Temps für alle angeschlossenen Sensoren als Liste oder ähnliches zurückzugeben.
quelle
Das Sprechen über einen 1-Draht-Bus kann schmerzhaft sein. Egal, ob Sie mit 1 Sensor oder 100 sprechen, Sie müssen über das Timing nachdenken. Ich habe vor ein paar Jahren einen Code für den DS18B20 geschrieben, aber er befindet sich in der Assembly. Wenn es von Nutzen ist, hier:
quelle
Bei Interesse hier ein Leitfaden zur Verwendung eines DS18B20-Temperatursensors (der wie oben angegeben mit so vielen GPIO-Pins auf dem Pi verkettet werden kann, wie Sie möchten) mit einem Himbeer-Pi und einem Pyhton-Code, der ihn an einen sendet RESTful-Service, der die Temperaturen in Diagrammen und Diagrammen auf einer Website zusammenfasst und anzeigt. Der gesamte Code für das angegebene GitHub-Konto ist öffentlich. http://macgyverdev.blogspot.se/2014/01/weather-station-using-raspberry-pi.html
quelle
Welche Art von Temperatursensor verwenden Sie? Wenn Sie so etwas wie einen DS18B20 haben, können Sie bis zu 18446744073709551615 Sensoren verketten, wenn Sie so viele hatten.
quelle
Antworten:
Es gibt Zusatzmodule, die Sie erhalten können und die über mehrere Busse verfügen, um eine Verbindung zum Pi herzustellen.
In diesem Video werden ihre Geschwindigkeiten verglichen: https://www.youtube.com/watch?v=YbWidNBycls Er verwendet schließlich einen neu kompilierten Kernel, um mehrere GPIOs für die Kommunikation mit mehreren Sensoren zu erhalten. Er hat seine Ergebnisse nicht darüber veröffentlicht, wie er darauf gekommen ist. Es ist jedoch möglich, es zu multiplexen, anstatt nur einen Pin zu verwenden.
Aktualisieren. Er hat jetzt gepostet. Er hat 81 Sensoren an 9 separate GPIO angeschlossen und konnte alle Temperaturen in weniger als 3 Sekunden abrufen : https://www.youtube.com/watch?v=JW9wzbp35w8
quelle
Die ideale Methode zum Auslesen mehrerer Sensoren ist die Verwendung von I2C-Sensoren.
Dies ist die einzige Möglichkeit, mehrere Sensoren miteinander zu verketten oder analoge Sensoren zu verwenden, die jedoch viele analoge Pins belegen, während i2c nur zwei Leitungen verwendet. Nehmen wir an, Sie verwenden Pi2 / 3, dann schlage ich vor, einen Himbeer-Pi-Hut mit I2C-Anschluss zu kaufen, damit Sie alle Ihre i2c-Geräte innerhalb von Sekunden mit Pi verbinden und sicherstellen können, dass Ihre Hardware korrekt ist.
Jetzt musst du den Pi mit einem I2C-Adapter über den Sensorteil bewegen lassen. TI, AD, NXP, Freescale und viele andere Unternehmen stellen Temperatursensoren mit I2C her, aber Sie möchten mehr als einen Sensor anschließen, sodass es zwei Möglichkeiten gibt.
Sie erhalten 6 verschiedene I2C-Sensoren mit unterschiedlichen I2C-Adressen. Wenn Sie zwei Sensoren mit derselben Adresse haben, funktioniert dies nicht.
Sie können Sensoren mit Adresszeile erhalten und einfach die Adresse ändern und Sie können sie mit Pi ohne Adressenkonflikt verbinden. Ich schlage vor, diesen TMP 100-Sensor zu verwenden. Ich bevorzuge diesen, da er 2 Adressleitungen mit Unterstützung für potentialfreie Adressleitungen hat, sodass Sie 6 Sensoren mit einer i2c-Leitung verbinden können.
Es gibt den Vorteil der Verwendung der gleichen Sensoren, dass Sie nicht 6 Datenblatt lesen müssen, um Ihren Code zu schreiben. Sie müssen ein Datenblatt studieren und den Code auf einfache Weise schreiben. Wenn alle Sensoren gleich sind, erhalten Sie bessere Vergleichsergebnisse.
quelle