Question:
Bus de capteur pour USB
Andi Giga
2016-09-06 13:01:22 UTC
view on stackexchange narkive permalink

Je veux construire un système de serre de jeu & plug similaire à http://www.raspiviv.com/

J'ai pensé à un système de bus, mais je n'ai pas expériences avec les systèmes de bus actuellement. Je suis tombé si loin sur le bus I2C, le bus Can et 1-Wire.

Exigences:

  • Je voudrais brancher entre 1 et 20 capteurs (température, humidité) au raspberry pi 3.
  • Je veux utiliser les ports USB du Pi, pas les Pins EDIT (ou avoir un bon adaptateur &play sur la broche *)
  • Il devrait être des capteurs bon marché disponibles pour ce bus
  • Possibilité d'avoir des capteurs du même type et de les configurer côté logiciel
  • Distance du capteur à pi, max 10m, en moyenne 2-5m

Questions:

  • Quel système est bon à cet effet, pourquoi et y a-t-il un bon tutoriel?
  • De quelles pièces ai-je besoin pour un exemple de configuration?

*: Je dois faciliter la connexion des pièces à un utilisateur non averti ou non.

Bonjour. Pouvez-vous ajouter une longueur approximative du bus / distance des nœuds de capteur? I2C, par exemple, est censé connecter les circuits intégrés au niveau de la carte, bien que cela fonctionne également à une certaine distance.
Des capteurs au contrôleur, je pense que 10 m max. Probablement plus de 2 à 5 m.
Vous pouvez modifier la question pour fournir ces informations supplémentaires, ce qui facilite la tâche des futurs lecteurs par rapport aux commentaires.
Il est sous-entendu ici que vous préféreriez l'USB parce que vous pensez qu'il sera en quelque sorte plus facile à programmer que I2C ou SPI. Il est très peu probable que ce soit le cas. L'avantage de l'USB est qu'il a une bande passante potentielle beaucoup plus élevée - la raison pour laquelle il n'est généralement pas utilisé avec des capteurs est qu'ils n'en ont pas besoin (lire les données de température à 20 Mo / s serait assez spécial ...), et donc faire compatibles USB, * ce qui impliquerait du matériel et des dépenses supplémentaires, * serait inutile.
Le point principal pour l'usb est que je voudrais rendre le plus facile possible pour l'utilisateur de brancher les capteurs. S'il existe une carte, ce qui est une preuve idiote pour un utilisateur non averti (imaginez votre grand-mère en train de faire cela ), pour câbler les capteurs, ce serait également très bien. Pour y parvenir, je serais prêt à consacrer un peu plus d’efforts au développement.
Ah. Comme suggestion alors (je pense qu'il sera difficile d'obtenir des capteurs USB et ils peuvent coûter plus cher, mais ce n'est qu'une intuition; aussi ceux que j'ai trouvés via un rapide coup d'œil en ligne pour la température incluent des fonctionnalités telles que la journalisation, qui reposent sur logiciel propriétaire qui ne fonctionnera presque certainement pas sur le pi, et lorsque vous commencez à faire de l'ingénierie inverse avec les périphériques USB, pensez * way, way * plus de temps de développement), vous pouvez envisager de créer une simple prise sur un fil (ou un ensemble de prises câblées ensemble pour I2C), ce qui faciliterait la tâche de l'utilisateur.
One-wire a la meilleure robustesse plug-and-play, et vous pouvez obtenir de nombreux capteurs, bien que ce soit un peu plus cher que l'I2C brut. https://www.maximintegrated.com/en/app-notes/index.mvp/id/1796
Vous voudrez peut-être jeter un coup d'œil aux capteurs Z-Wave. Z-Wave est une norme sans fil à faible consommation d'énergie pour la domotique et les appareils IOT. Il existe déjà des outils logiciels compatibles Raspberry Pi, et il a une excellente portée, car il prend en charge une topologie de réseau maillée. Ils ont également récemment ouvert la spécification, ce qui suggère que beaucoup plus d'outils pour l'utiliser seront disponibles sur Linux.
Cinq réponses:
Ghanima
2016-09-06 13:42:00 UTC
view on stackexchange narkive permalink

RS-485 est un autre bus susceptible de convenir à cette tâche (même si peut-être un peu trop technique). Il est basé sur une signalisation différentielle sur un seul fil torsadé, ce qui le rend assez robuste et il peut gérer plusieurs nœuds et une distance allant jusqu'à 4000 pieds.Les convertisseurs USB-RS-485 - souvent basés sur des convertisseurs série USB FTDI - sont disponible pour env. 10 $ environ. Du côté des capteurs cependant, l'offre de capteurs bon marché peut être un peu limitée. Si vous avez l'intention de fabriquer vous-même les nœuds de capteurs, vous aurez besoin d'au moins un MAX485 (ou un émetteur-récepteur équivalent) - quelques dollars chacun - et de l'intelligence sur le nœud (un petit microcontrôleur tel qu'un ATiny).

Voir aussi:

Pour la distance spécifiée et 20 nœuds, I2C pourrait cependant fonctionner assez bien avec le réglage de fréquence / vitesse le plus bas (comme indiqué ici). Si vous ne souhaitez pas utiliser les broches I2C dédiées du Pi, il existe des ports USB vers I2C disponibles (encore une fois basés sur des convertisseurs série USB FTDI). Il est probablement plus facile de trouver des nœuds de capteurs prêts à l'emploi pour I2C que RS-485.

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

Quel système convient à cette fin, pourquoi et existe-t-il un bon tutoriel?

Il existe deux approches fondamentales pour travailler avec des périphériques USB sous Linux:

  • Via un pilote de noyau.

  • Via l'interface usbfs de l'espace utilisateur.

Le Le premier est plus normatif et vous trouverez plus d'informations à ce sujet, mais cela tend vers plus de matériel de "longueur de livre" que de didacticiel en ligne, bien qu'il y ait des nombres des deux autour. L'USB est complexe , et bien sûr les pilotes Linux en général sont aussi un petit monde. Greg Kroah-Hartman, l'un des principaux développeurs du noyau linux, a co-écrit Linux Device Drivers , dont la troisième édition (alias "LDD3") est distribuée gratuitement; voici le PDF et voici une version en ligne. Quelle que soit la méthodologie choisie, le chapitre sur l'USB est une bonne introduction aux principes de base.

L'interface usbfs est probablement moins bien documentée. Cependant, je pense qu'il est utilisé par la version linux de libusb (qui est multiplateforme) - ou pas, mais de toute façon libusb existe. Attention, je ne suis pas certain à quel point libusb est complet; aussi, la documentation principale semble être ici (si le lien sur la page d'accueil ne fonctionne pas).

Comme indiqué dans la documentation des sources du noyau pour l'interface usbfs, il n'est généralement pas dans / proc comme avant (certaines documentations peuvent s'y référer de cette façon) et peuvent ne pas être montés du tout. Si c'est le cas, il est plus communément dans / dev / bus / usb , où vous le trouverez sur Raspbian (je crois que / sys / bus / usb est fonctionnellement différent, BTW).

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

Une autre option pourrait être d'utiliser Wifi / Http comme "bus". Il existe de nombreuses versions des appareils ESP8266 facilement disponibles (pour quelques dollars / punds) avec un nombre variable de broches IO.

Même l'ESP8266-01 de base avait 2 broches IO, qui peut être utilisé comme I2C qui est une interface commune aux capteurs peu coûteux (température, humidité, pression, etc.).

Quelque chose comme:

  • Raspberry Pi, configuré comme Point d'accès Wifi
  • Chaque capteur est connecté à un ESP8266 (via I2C, ou E / S numérique directe)
  • Le code de l'ESP8266 se connecte au point d'accès Wifi, s'enregistre / s'annonce (et saisit config data)
  • Le code de l'ESP8266 lit les valeurs du capteur selon un calendrier (toutes les X secondes) et l'envoie au Raspberry Pi.
Le wifi sonne bien mais je suppose qu'une connexion par câble normale peut être meilleure, car une seule source d'alimentation est nécessaire.
Christopher Biggs
2016-09-07 05:21:09 UTC
view on stackexchange narkive permalink

Dans des situations similaires, j'ai fait deux choses:

  1. Connectez les capteurs à un Arduino Nano et connectez le Nano au Pi via USB. J'ai lu les capteurs en utilisant Node-RED et Firmata. https://flic.kr/p/Kf7sLr (Portée, environ 5 m, la limite de conception de l'USB. Vous POUVEZ obtenir plus de portée ou essayer un booster).

  2. Connectez les capteurs aux modules ESP8266 exécutant NodeMCU et publiez les modules de capteurs via Wifi sur le serveur Mosquitto MQTT fonctionnant sur le Pi: https://flic.kr/p/Kf7u1a (Portée: dizaines de mètres selon l'antenne et les obstacles). Le logiciel de votre Pi s'abonne aux mises à jour des capteurs via le serveur MQTT.

bruce
2016-09-07 22:38:19 UTC
view on stackexchange narkive permalink

Je travaille beaucoup avec I2C et c'est le meilleur protocole pour la connexion en guirlande. Si vous voulez parcourir de longues distances, vous pouvez utiliser le rehausseur de signal I2C. Il y a peu d'avantages à utiliser i2c.

  1. c'est très simple à utiliser, peu de codage requis.
  2. le matériel est très minimal, si vous ne voulez pas souder, vous pouvez regarder dans ce chapeau raspberry pi i2c.
  3. il existe des centaines de capteurs avec la communication I2C. Donc, trouver du matériel ne sera pas si difficile.

regardez cette vidéo youtube, qui montre comment vous pouvez enchaîner plus de 20 appareils avec Raspberry Pi. Raspberry Pi Plug and Play.

Ce n'est pas une clé USB mais ça ressemble tellement à ce que je désire. Savez-vous comment je pourrai différencier les capteurs du même type dans la guirlande? Y a-t-il un cas avec une sortie pour l'ic2, je n'ai pas pu en trouver une sur leur site Web.
oui, regardez la vidéo, vous verrez qu'il y a deux ports i2c, un pour l'entrée et l'autre pour la sortie. ce qui rend le relais facile à monter en guirlande. par exemple c'est [capteur de pression] (https://www.controleverything.com/content/Altimeter?sku=MS8607-02BA01_I2CS) il a deux ports. l'un se connectera au Raspberry Pi et l'autre au capteur suivant.
Cela j'ai vu, mais quand j'ai par exemple deux capteurs de température du même type, est-ce que je saurai à partir des signaux de réception, c'est le premier de la chaîne et c'est le second?
c'est assez facile. disons que vous avez deux capteurs de température (vous pouvez trouver toutes sortes de codes ici [bibliothèque Raspberry Pi I2C] (https://github.com/ControlEverythingCommunity)). Chaque capteur a une adresse I2C et dans votre code, vous spécifierez à partir de quel capteur vous souhaitez lire. Si j'étais vous, je commencerai avec le capteur 4-5, puis je partirai de là. Tous les capteurs fonctionnent de la même manière, donc une fois que vous en aurez peu de travail, il sera très facile d'en ajouter de plus en plus.
Je n'ai donc pas besoin de mettre de cavaliers, etc. sur les capteurs pour différencier. Je demande parce que par exemple sur ce capteur: https://www.controleverything.com/content/Temperature?sku=HTS221_I2CS la description dit: `0x4F I²C Start Address`, donc je me demandais ce qui se passe lorsque deux capteurs (du même type) ont le même adresse.
si vous souhaitez utiliser 2 capteurs du même type, assurez-vous qu'ils prennent en charge plusieurs adresses. donc deux résolvent ce problème, vous pouvez faire deux choses 1. utiliser une adresse qui n'a pas la même adresse 2. utiliser un mux i2c [multiplexeur I2C] (https://www.controleverything.com/content/MUX?sku=PCA9547_I2CMUX) J'irai avec la première option, en faisant cela, vous n'avez pas à acheter i2c mux.


Ce Q&R a été automatiquement traduit de la langue anglaise.Le contenu original est disponible sur stackexchange, que nous remercions pour la licence cc by-sa 3.0 sous laquelle il est distribué.
Loading...