Frage:
Sensorbus für USB
Andi Giga
2016-09-06 13:01:22 UTC
view on stackexchange narkive permalink

Ich möchte ein Plug-&-Spielgewächshaussystem ähnlich http://www.raspiviv.com/

bauen. Ich dachte an ein Bussystem, habe aber kein Erfahrungen mit Bussystemen derzeit. Ich bin bisher über den I2C-Bus, den Can-Bus und den 1-Draht gestolpert.

Anforderungen:

  • Ich möchte zwischen 1 und 20 Sensoren (Temperatur, Luftfeuchtigkeit) anschließen. zum Himbeer-Pi 3.
  • Ich möchte die USB-Anschlüsse des Pi verwenden, nicht die Pins EDIT (oder einen guten &play-Adapter an den Pin * anschließen).
  • Dort sollte Für diesen Bus sind billige Sensoren verfügbar.
  • Fähigkeit, Sensoren der gleichen Art zu haben und sie softwareseitig zu konfigurieren.
  • Sensorabstand zu pi, max. 10 m, durchschnittlich 2-5 m

Fragen:

  • Welches System eignet sich für diesen Zweck, warum und gibt es ein gutes Tutorial?
  • Welche Teile benötige ich für ein Beispiel-Setup?

*: Ich muss es einfach machen oder einem nicht technisch versierten Benutzer, die Teile zusammenzufügen.

Hallo. Könnten Sie eine ungefähre Länge des Busses / Entfernung der Sensorknoten hinzufügen? I2C zum Beispiel soll ICs auf Board-Ebene verbinden, obwohl es auch in einiger Entfernung funktioniert.
Von den Sensoren bis zur Steuerung denke ich maxm 10m. Wahrscheinlich mehr 2-5m.
Sie können die Frage bearbeiten, um diese zusätzlichen Informationen bereitzustellen. Dies erleichtert zukünftigen Lesern das Vergleichen mit Kommentaren.
Hier wird impliziert, dass Sie USB bevorzugen würden, weil Sie denken, dass es irgendwie einfacher zu programmieren ist als I2C oder SPI. Dies ist sehr unwahrscheinlich. Der Vorteil von USB ist, dass es eine viel höhere potenzielle Bandbreite hat - der Grund, warum es im Allgemeinen nicht mit Sensoren verwendet wird, ist, dass sie dies nicht benötigen (das Lesen von Temperaturdaten mit 20 MB / s wäre etwas ganz Besonderes ...) und damit machen Sie USB-kompatibel, * was zusätzliche Hardware und Kosten verursachen würde, * wäre sinnlos.
Der Hauptpunkt für USB ist, dass ich es dem Benutzer so einfach wie möglich machen möchte, die Sensoren anzuschließen. Wenn es eine Platine gibt, die für einen nicht technisch versierten Benutzer idiotensicher ist (stellen Sie sich vor, Ihre Oma tut dies ), um die Sensoren zu verdrahten, wäre es auch in Ordnung. Um dies zu erreichen, wäre ich bereit, etwas mehr Anstrengungen auf der Entwicklungsseite zu unternehmen.
Ah. Als Vorschlag dann (ich denke, es wird schwierig sein, USB-basierte Sensoren zu bekommen, und sie können mehr kosten, aber das ist nur eine Vermutung; auch diejenigen, die ich über einen kurzen Blick online auf Zeit gefunden habe, enthalten Funktionen wie die Protokollierung, die sich darauf stützen proprietäre Software, die mit ziemlicher Sicherheit nicht auf dem Pi funktioniert, und wenn Sie mit dem Reverse Engineering von USB-Geräten beginnen, denken Sie * viel, viel * mehr Entwicklungszeit), könnten Sie in Betracht ziehen, eine einfache Buchse an einem Draht (oder einen Satz von Buchsen, für die wir miteinander verdrahtet sind) zu erstellen I2C), was es dem Benutzer leichter machen würde.
One-Wire bietet die beste Plug-and-Play-Robustheit, und Sie können viele Sensorgeräte dafür erwerben, obwohl es etwas teurer als rohes I2C ist. https://www.maximintegrated.com/de/app-notes/index.mvp/id/1796
Vielleicht möchten Sie einen Blick auf Z-Wave-Sensoren werfen. Z-Wave ist ein drahtloser Standard mit geringem Stromverbrauch für Hausautomations- und IOT-Geräte. Es gibt bereits Raspberry Pi-kompatible Softwaretools und es verfügt über eine hervorragende Reichweite, da es eine netzbasierte Netzwerktopologie unterstützt. Sie haben auch kürzlich die Spezifikation geöffnet, was darauf hindeutet, dass unter Linux viel mehr Tools für die Verwendung verfügbar sein werden.
Fünf antworten:
Ghanima
2016-09-06 13:42:00 UTC
view on stackexchange narkive permalink

RS-485 ist ein weiterer Bus, der wahrscheinlich für diese Aufgabe geeignet ist (wenn auch vielleicht ein wenig technischer Overkill). Es basiert auf einer Differenzsignalisierung auf einem einzelnen verdrillten Draht, was es ziemlich robust macht und mehrere Knoten und eine Entfernung von bis zu 4000 Fuß verarbeiten kann. USB-zu-RS-485-Wandler - oft basierend auf FTDI-USB-Seriell-Wandlern - sind verfügbar für ca. 10 Dollar oder so. Auf der Sensorseite könnte das Angebot an billigen Sensoren jedoch etwas begrenzt sein. Wenn Sie die Sensorknoten für sich selbst herstellen möchten, benötigen Sie mindestens einen MAX485 (oder einen gleichwertigen Transceiver) - jeweils ein paar Dollar - und einige Informationen zum Knoten (einen kleinen Mikrocontroller wie einen ATiny).

Siehe auch:

Für die angegebene Entfernung und 20 Knoten funktioniert I2C jedoch möglicherweise gut genug bei der niedrigsten Frequenz- / Geschwindigkeitseinstellung (wie hier erläutert). Wenn Sie nicht bereit sind, die dedizierten I2C-Pins des Pi zu verwenden, stehen USB-zu-I2C-Pins zur Verfügung (ebenfalls basierend auf FTDI-USB-Seriell-Konvertern). Es ist wahrscheinlich einfacher, gebrauchsfertige Sensorknoten für I2C zu finden als RS-485.

goldilocks
2016-09-06 17:13:38 UTC
view on stackexchange narkive permalink

Welches System eignet sich für diesen Zweck, warum und gibt es ein gutes Tutorial?

Es gibt zwei grundlegende Ansätze für die Arbeit mit USB-Geräten unter Linux:

    • Über einen Kerneltreiber.

    • Über die Benutzerbereich-USBFS-Schnittstelle Das erste ist normativer und Sie werden mehr Informationen darüber finden, aber dies tendiert zu mehr "Buchlänge" -Material als das Online-Tutorial, obwohl es eine Anzahl von beiden gibt. USB ist komplex , und natürlich sind Linux-Treiber im Allgemeinen auch eine kleine Welt. Greg Kroah-Hartman, einer der Hauptentwickler des Linux-Kernels, war Co-Autor von Linux Device Drivers , dessen dritte Ausgabe (auch bekannt als "LDD3") kostenlos vertrieben wird. hier ist das PDF und hier ist eine Online-Version. Unabhängig davon, welche der beiden Methoden Sie wählen, ist das Kapitel über USB eine anständige Einführung in die Grundlagen.

      Die USBFS-Schnittstelle ist wahrscheinlich weniger gut dokumentiert. Ich denke jedoch, dass es von der Linux-Version von libusb (die plattformübergreifend ist) verwendet wird - oder auch nicht, aber so oder so existiert libusb. Achtung, ich bin mir nicht sicher, wie vollständig libusb wirklich ist. Außerdem scheint die primäre Dokumentation hier zu sein (wenn der Link auf der Homepage nicht funktioniert).

      Wie in den Kernel-Quelldokumenten für die USBFS-Schnittstelle angegeben, es befindet sich im Allgemeinen nicht mehr wie früher in / proc (einige Dokumentationen beziehen sich möglicherweise darauf) und ist möglicherweise überhaupt nicht gemountet. Wenn ja, ist es häufiger in / dev / bus / usb , wo Sie es auf Raspbian finden (ich glaube, / sys / bus / usb ist funktional anders, übrigens).

KennetRunner
2016-09-06 18:14:21 UTC
view on stackexchange narkive permalink

Eine andere Möglichkeit könnte sein, Wifi / Http als 'Bus' zu verwenden. Es gibt viele Versionen der ESP8266 -Geräte (für ein paar Dollar / Pfund) mit unterschiedlicher Anzahl von E / A-Pins.

Selbst der grundlegende ESP8266-01 hatte 2 E / A-Pins. Dies kann als I2C verwendet werden, eine gemeinsame Schnittstelle zu kostengünstigen Sensoren (Temperatur, Luftfeuchtigkeit, Druck usw.).

So etwas wie:

  • Raspberry Pi, eingerichtet als Wifi Access Point
  • Jeder Sensor ist mit einem ESP8266 verbunden (über I2C oder direktes digitales E / A).
  • Der Code auf dem ESP8266 stellt eine Verbindung zum Wifi AP her, registriert / meldet sich an (und greift ab) Konfigurationsdaten)
  • Der Code auf dem ESP8266 liest die Sensorwerte nach einem Zeitplan (alle X Sekunden) und sendet sie an den Raspberry Pi.
Wifi klingt großartig, aber ich denke, eine normale Kabelverbindung ist möglicherweise besser, da nur eine Stromquelle erforderlich ist.
Christopher Biggs
2016-09-07 05:21:09 UTC
view on stackexchange narkive permalink

In ähnlichen Situationen habe ich zwei Dinge getan:

  1. Verbinden Sie die Sensoren mit einem Arduino Nano und verbinden Sie den Nano über USB mit dem Pi. Ich habe die Sensoren mit Node-RED und Firmata gelesen. https://flic.kr/p/Kf7sLr (Reichweite ca. 5 m, die Entwurfsgrenze von USB. Möglicherweise erhalten Sie mehr Reichweite oder versuchen einen Booster.)

  2. Verbinden Sie die Sensoren mit ESP8266-Modulen, auf denen NodeMCU ausgeführt wird, und lassen Sie die Sensormodule über WLAN auf dem Mosquitto MQTT-Server veröffentlichen, der auf dem Pi ausgeführt wird: https://flic.kr/p/Kf7u1a (Reichweite: mehrere zehn Meter, abhängig von Antenne und Hindernissen). Die Software auf Ihrem Pi abonniert die Sensoraktualisierungen über den MQTT-Server.

  3. ol>
bruce
2016-09-07 22:38:19 UTC
view on stackexchange narkive permalink

Ich arbeite viel mit I2C und dies ist das beste Protokoll für Daisy Chain. Wenn Sie lange Strecken zurücklegen möchten, können Sie den I2C-Signalverstärker verwenden. Die Verwendung von i2c bietet nur wenige Vorteile.

  1. Es ist sehr einfach zu verwenden, es ist nicht viel Codierung erforderlich.
  2. Hardware ist sehr minimal, wenn Sie nicht löten möchten, können Sie in diesen Himbeer-Pi-i2c-Hut schauen.
  3. Es gibt Hunderte von Sensoren, die mit I2C-Kommunikation ausgestattet sind. Es wird also nicht so schwierig sein, Hardware zu finden.
  4. ol>

    Schauen Sie sich dieses Youtube-Video an, das zeigt, wie Sie mehr als 20 Geräte mit Himbeer-Pi verketten können. Himbeer-Pi-Plug-and-Play.

Es ist kein USB, aber es sieht so aus, wie ich es mir wünsche. Wissen Sie, wie ich Sensoren vom gleichen Typ in der Daisy Chain unterscheiden kann? Gibt es einen Fall mit einem Exit für das ic2, konnte keinen auf ihrer Website finden.
Ja, sehen Sie sich das Video an. Sie werden sehen, dass es zwei i2c-Ports gibt, einen für In und einen für Out. Dies macht das Relais einfach zu verketten. Dies ist beispielsweise [Drucksensor] (https://www.controleverything.com/content/Altimeter?sku=MS8607-02BA01_I2CS) mit zwei Anschlüssen. Einer verbindet sich mit Himbeer-Pi und der andere mit dem nächsten Sensor.
Das habe ich gesehen, aber wenn ich zum Beispiel zwei Temperatursensoren des gleichen Typs habe, weiß ich dann aus den Empfangssignalen, dass dies der erste in der Kette und dies der zweite ist?
es ist sehr leicht. Angenommen, Sie haben zwei Temperatursensoren (alle Arten von Codes finden Sie hier [Raspberry Pi I2C-Bibliothek] (https://github.com/ControlEverythingCommunity)). Jeder Sensor hat eine I2C-Adresse und in Ihrem Code geben Sie an, von welchem ​​Sensor Sie lesen möchten. Wenn ich du wäre, würde ich mit 4-5 Sensor beginnen und dann von dort aus gehen. Alle Sensoren arbeiten auf die gleiche Weise. Wenn Sie also nur wenige arbeiten, können Sie ganz einfach mehr und mehr hinzufügen.
Ich muss also keine Jumper usw. an den Sensoren anbringen, um zu unterscheiden. Ich frage, weil z. Auf diesem Sensor: https://www.controleverything.com/content/Temperature?sku=HTS221_I2CS Die Beschreibung lautet: "0x4F I²C-Startadresse". Ich habe mich also gefragt, was passiert, wenn zwei Sensoren (derselben Art) dieselbe haben Adresse.
Wenn Sie 2 Sensoren derselben Art verwenden möchten, stellen Sie sicher, dass diese mehrere Adressen unterstützen. Damit zwei dieses Problem lösen, können Sie zwei Dinge tun: 1. Verwenden Sie eine Adresse, die nicht dieselbe Adresse hat. 2. Verwenden Sie einen i2c-Mux [I2C-Multiplexer] (https://www.controleverything.com/content/MUX?sku=PCA9547_I2CMUX). Ich werde mit 1. Option gehen, indem Sie tun, dass Sie nicht i2c mux kaufen müssen.


Diese Fragen und Antworten wurden automatisch aus der englischen Sprache übersetzt.Der ursprüngliche Inhalt ist auf stackexchange verfügbar. Wir danken ihm für die cc by-sa 3.0-Lizenz, unter der er vertrieben wird.
Loading...