Domanda:
Bus sensore per USB
Andi Giga
2016-09-06 13:01:22 UTC
view on stackexchange narkive permalink

Voglio costruire una presa & per giocare a serra simile a http://www.raspiviv.com/

Ho pensato a un sistema bus, ma non ho esperienze con i sistemi bus attualmente. Finora mi sono imbattuto in bus I2C, Can Bus e 1-Wire.

Requisiti:

  • Vorrei collegare tra 1 e 20 sensori (temperatura, umidità) al raspberry pi 3.
  • Voglio usare le porte USB del Pi, non il Pins EDIT (o avere un buon adattatore &play plug al pin *)
  • Dovrebbe siano disponibili sensori economici per quel bus
  • Possibilità di avere sensori dello stesso tipo e configurarli lato software
  • Distanza del sensore da pi, max 10 m, in media 2-5 m

Domande:

  • Quale sistema va bene per questo scopo, perché e c'è un buon tutorial?
  • Di quali parti ho bisogno per una configurazione di esempio?

*: Devo rendere facile o un utente non esperto di tecnologia collegare le parti insieme.

Ciao. Potresti aggiungere una lunghezza approssimativa del bus / distanza dei nodi del sensore? I2C, ad esempio, dovrebbe collegare i circuiti integrati a livello di bordo anche se funziona anche a una certa distanza.
Dai sensori al controller penso che 10m max. Probabilmente più 2-5 m.
Puoi modificare la domanda per fornire queste informazioni aggiuntive, il che rende più facile per i lettori futuri rispetto ai commenti.
È implicito qui che preferiresti USB perché pensi che sarà in qualche modo più facile da programmare rispetto a I2C o SPI. È molto improbabile che sia così. Il vantaggio dell'USB è che ha una larghezza di banda potenziale molto più elevata - il motivo per cui generalmente non viene utilizzato con i sensori è che non lo richiedono (leggere i dati di temperatura a 20 MB / s sarebbe piuttosto speciale ...), e quindi fare loro USB compatibili, * che comporterebbero hardware e costi aggiuntivi, * sarebbero inutili.
Il punto principale per USB è che vorrei rendere il più semplice possibile per l'utente collegare i sensori. Se esiste una scheda, che è a prova di idiota per un utente non esperto di tecnologia (immagina che tua nonna lo faccia ), per cablare i sensori, andrebbe anche bene. Per raggiungere questo obiettivo, sarei disposto a dedicare un po 'più di impegno al lato dello sviluppo.
Ah. Come suggerimento quindi (penso che sarà difficile ottenere sensori basati su USB e potrebbero costare di più, ma è solo un'intuizione; anche quelli che ho trovato tramite una rapida occhiata online per temp includono funzionalità come la registrazione, che si basano su software proprietario che quasi certamente non funzionerà su pi, e quando inizi il reverse engineering dei dispositivi USB pensa * modo, molto * più tempo di sviluppo), potresti prendere in considerazione la creazione di un semplice jack su un filo (o un set di jack cablati insieme per I2C) che lo renderebbe più facile per l'utente.
One-wire ha la migliore robustezza plug-and-play e puoi ottenere molti sensori per questo, sebbene sia un po 'più costoso dell'I2C grezzo. https://www.maximintegrated.com/en/app-notes/index.mvp/id/1796
Potresti voler dare un'occhiata ai sensori Z-Wave. Z-Wave è uno standard wireless a basso consumo per dispositivi domotici e IOT. Esistono già strumenti software compatibili con Raspberry Pi e ha una portata eccellente, perché supporta una topologia di rete basata su mesh. Recentemente hanno anche aperto le specifiche, il che suggerisce che molti più strumenti per il suo utilizzo saranno disponibili su Linux.
Cinque risposte:
Ghanima
2016-09-06 13:42:00 UTC
view on stackexchange narkive permalink

RS-485 è un altro bus probabilmente adatto a questo compito (anche se forse un po 'eccessivo dal punto di vista tecnico). Si basa su una segnalazione differenziale su un singolo filo intrecciato che lo rende abbastanza robusto e può gestire più nodi e una distanza fino a 4000 piedi. I convertitori USB-RS-485, spesso basati su convertitori USB-seriale FTDI, sono disponibile per ca. $ 10 o giù di lì. Per quanto riguarda i sensori, tuttavia, la fornitura di sensori economici potrebbe essere un po 'limitata. Se intendi creare i nodi del sensore per te stesso, avrai bisogno di almeno un MAX485 (o un ricetrasmettitore equivalente) - pochi dollari ciascuno - e un po 'di intelligenza sul nodo (un piccolo microcontrollore come un ATiny).

Vedi anche:

Per la distanza specificata e 20 nodi I2C potrebbe tuttavia funzionare abbastanza bene con l'impostazione di frequenza / velocità più bassa (come discusso qui). Se non sei disposto a utilizzare i pin I2C dedicati del Pi, sono disponibili USB-to-I2C (sempre basati su convertitori USB-seriale FTDI). Probabilmente è più facile trovare nodi sensore pronti all'uso per I2C rispetto a RS-485.

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

Quale sistema è adatto a questo scopo, perché e c'è un buon tutorial?

Ci sono due approcci fondamentali per lavorare con dispositivi USB su Linux:

  • Tramite un driver del kernel.

  • Tramite l'interfaccia usbfs dello spazio utente.

Il il primo è più normativo e troverai più informazioni al riguardo, ma questo tende a più materiale "da libro" rispetto ai tutorial online, sebbene ci siano numeri di entrambi in giro. USB è complesso , e ovviamente anche i driver Linux in generale sono un piccolo mondo. Greg Kroah-Hartman, uno dei principali sviluppatori del kernel Linux, è stato coautore di Linux Device Drivers , la cui terza edizione (nota anche come "LDD3") è distribuita gratuitamente; ecco il PDF e ecco una versione online. Indipendentemente da quale delle due metodologie si sceglie, il capitolo sull'USB è una discreta introduzione ai fondamenti.

L'interfaccia usbfs è probabilmente meno ben documentata. Tuttavia, penso che sia usato dalla versione Linux di libusb (che è multipiattaforma) - oppure no, ma in entrambi i casi esiste libusb. Attenzione, non sono sicuro di quanto sia veramente completa libusb; inoltre, la documentazione principale sembra essere qui (se il collegamento sulla home page non funziona).

Come notato nella documentazione dei sorgenti del kernel per l'interfaccia usbfs, generalmente non è in / proc come una volta (alcuni documenti potrebbero fare riferimento ad esso in questo modo) e potrebbe non essere montato affatto. Se lo è, è più comunemente in / dev / bus / usb , che è dove lo troverai su Raspbian (credo che / sys / bus / usb sia funzionalmente diverso, BTW).

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

Un'altra opzione potrebbe essere quella di utilizzare Wifi / Http come "bus". Esistono molte versioni dei dispositivi ESP8266 prontamente disponibili (per pochi dollari / punds) con un numero variabile di pin IO.

Anche l'ESP8266-01 di base aveva 2 pin IO, che può essere utilizzato come I2C, che è un'interfaccia comune a sensori economici (temperatura, umidità, pressione, ecc.).

Qualcosa come:

  • Raspberry Pi, configurato come Punto di accesso Wi-Fi
  • Ogni sensore è collegato a un ESP8266 (tramite I2C o IO digitale diretto)
  • Il codice sull'ESP8266 si collega all'AP Wifi, si registra / si annuncia (e afferra config data)
  • Il codice sull'ESP8266 legge i valori del sensore in base a una pianificazione (ogni X secondi) e lo invia al Raspberry Pi.
Il Wi-Fi suona alla grande, ma immagino che una normale connessione via cavo potrebbe essere migliore, perché è necessaria solo una fonte di alimentazione.
Christopher Biggs
2016-09-07 05:21:09 UTC
view on stackexchange narkive permalink

In situazioni simili ho fatto due cose:

  1. Collegare i sensori a un Arduino Nano e collegare il Nano al Pi tramite USB. Ho letto i sensori utilizzando Node-RED e Firmata. https://flic.kr/p/Kf7sLr (Portata, circa 5 m, il limite di progettazione dell'USB. È POSSIBILE ottenere una portata maggiore o provare un potenziatore).

  2. Collega i sensori ai moduli ESP8266 che eseguono NodeMCU e fai in modo che i moduli del sensore pubblichino tramite Wifi sul server Mosquitto MQTT in esecuzione sul Pi: https://flic.kr/p/Kf7u1a (Portata: decine di metri a seconda dell'antenna e degli ostacoli). Il software sul tuo Pi si abbona agli aggiornamenti del sensore tramite il server MQTT.

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

Lavoro molto con I2C e questo è il miglior protocollo per il collegamento a margherita. Se vuoi andare a lunga distanza puoi usare il potenziatore del segnale I2C. Ci sono pochi vantaggi nell'usare i2c.

  1. è molto semplice da usare, non è richiesta molta codifica.
  2. l'hardware è minimo, se non vuoi saldare puoi guardare in questo cappello i2c raspberry pi.
  3. Ci sono centinaia di sensori là fuori forniti con la comunicazione I2C. Quindi trovare l'hardware non sarà così difficile.

dai un'occhiata a questo video di YouTube, che mostra come puoi collegare più di 20 dispositivi con Raspberry Pi. raspberry pi plug and play.

Non è usb ma assomiglia molto a quello che desidero. Sai come potrò differenziare i sensori dello stesso tipo nella catena a margherita? C'è un caso con un'uscita per ic2, non sono riuscito a trovarne uno sul loro sito web.
sì, guarda il video, vedrai che ci sono due porte i2c, una per l'ingresso e l'altra per l'uscita. che rende il relè facile da collegare a margherita. per esempio questo è [sensore di pressione] (https://www.controleverything.com/content/Altimeter?sku=MS8607-02BA01_I2CS) ha due porte. uno si collegherà al raspberry pi e l'altro al sensore successivo.
Questo l'ho visto, ma quando ho ad esempio due sensori di temperatura dello stesso tipo, saprò dai segnali di ricezione, questo è il primo della catena e questo è il secondo?
è abbastanza facile. diciamo che hai due sensori di temperatura (puoi trovare tutti i tipi di codici qui [libreria Raspberry Pi I2C] (https://github.com/ControlEverythingCommunity)). Ogni sensore ha un indirizzo I2C e nel tuo codice specifichi da quale sensore vuoi leggere. Se fossi in te inizierò con 4-5 sensori e poi andrò da lì. Tutti i sensori funzionano allo stesso modo, quindi una volta che ne avrai pochi, sarà semplicissimo aggiungerne sempre di più.
Quindi non ho bisogno di mettere alcun ponticello ecc. Sui sensori per differenziare. Sto chiedendo perché ad es. su quel sensore: https://www.controleverything.com/content/Temperature?sku=HTS221_I2CS la descrizione dice: `0x4F I²C Start Address`, quindi mi chiedevo cosa succede quando due sensori (dello stesso tipo) hanno lo stesso indirizzo.
se si desidera utilizzare 2 sensori dello stesso tipo assicurarsi che supportino più indirizzi. quindi due risolvono questo problema puoi fare due cose 1. usa un indirizzo che non ha lo stesso indirizzo 2. usa un i2c mux [multiplexer I2C] (https://www.controleverything.com/content/MUX?sku=PCA9547_I2CMUX) Vado con la prima opzione, così facendo non è necessario acquistare i2c mux.


Questa domanda e risposta è stata tradotta automaticamente dalla lingua inglese. Il contenuto originale è disponibile su stackexchange, che ringraziamo per la licenza cc by-sa 3.0 con cui è distribuito.
Loading...