Domanda:
Comunicazione diretta a due vie tra un'applicazione per PC e un'applicazione Pi
heltonbiker
2016-08-17 01:38:32 UTC
view on stackexchange narkive permalink

Lavoro per un'azienda medica e produciamo sistemi che tipicamente sono composti da un dispositivo di acquisizione dati collegato tramite USB a un PC su cui gira qualche applicazione desktop in modo che possa controllare l'hardware e visualizzare i dati connessi in tempo reale. La nostra piattaforma software desktop è C # /. Net / WPF.

Stiamo valutando la possibilità di costruire un prototipo in cui un Pi controllerebbe una manciata di dispositivi di rilevamento, preelaborerebbe i dati e invierebbe questi dati al PC o laptop. Il Pi risponderebbe anche ai comandi e alle richieste inviate dall'applicazione per PC.

Mi sono guardato intorno, ma a quanto pare il modo preferito per noi - la connessione USB diretta - non è disponibile, poiché il Pi USB è un " master ".

Mi sono confuso, perché ho avuto l'impressione che dovesse essere facile collegare PC e Pi tramite cavo fisico in modo che potessero" parlare "tra loro, quindi le domande sono:

Esiste un modo per collegare fisicamente Pi e PC in modo che le applicazioni possano parlare tra loro tramite questa connessione?

Se la connessione fisica non è fattibile, qual è il modo più diretto collegare un PC e un Pi per lo scopo descritto?

Con "diretto" intendo meno dipendente dall'infrastruttura esterna (modem, router, ecc.) che potrebbe essere inesistente sul posto .

Sei risposte:
#1
+6
goldilocks
2016-08-17 02:03:27 UTC
view on stackexchange narkive permalink

Due metodi comuni e abbastanza flessibili sarebbero:

  • Connessione ethernet diretta. Ciò richiede che tu abbia una presa ethernet sul PC che non è altrimenti in uso. Lo colleghi al Pi e puoi creare una sottorete con due nodi. Una volta questo richiedeva un cavo ethernet "cross-over", ma generalmente i jack contemporanei, compresi quelli su pi, non lo fanno. Ciò fornisce una larghezza di banda relativamente elevata (100 Mbps) rispetto alla seconda opzione e consente di utilizzare protocolli di rete e applicazioni familiari. Poiché si tratta di una connessione a livello di rete, significa anche che puoi avere varie forme di comunicazione indipendente che avvengono simultaneamente senza implementare nulla di speciale. Ad esempio, puoi avere qualsiasi cosa client-server necessaria per il tuo scopo generale e accedere al pi allo stesso tempo.

  • UART. È possibile utilizzare un cavo seriale USB per collegare il PC ai pin della porta seriale sul pi. Questa opzione è molto più lenta (< 1 Mbps) di ethernet e, a meno che tu non scriva qualche software elaborato, è scomoda da usare per più di uno scopo alla volta.

Per la connessione ethernet diretta sarebbe necessario cambiare il PC in un indirizzo IP statico ogni volta o c'è un modo per aggirarlo?
@bakalolo Non esattamente. Se connesso anche ad internet tramite WLAN, il PC avrebbe due indirizzi IP, uno associato all'adattatore wifi fornito dal router WLAN, e uno con il jack ethernet per la * sottorete privata * da esso utilizzata e il Pi, che potrebbe anche essere statico dato che puoi usare quello che vuoi all'interno della normale [rete privata] (https://en.wikipedia.org/wiki/Reserved_IP_addresses) - ma ** non ** sovrapporli con quelli usati sul WLAN. A proposito, puoi anche instradare il Pi attraverso il PC per collegarlo a Internet in questo modo.
#2
+5
bk79
2016-08-17 02:01:14 UTC
view on stackexchange narkive permalink

Puoi eseguirlo come un dispositivo USB seriale (cavo basato su FTDI) ai pin GPIO

http://elinux.org/RPi_Serial_Connection

oppure puoi usare il raspberry pi in modalità OTG per eseguire il PI come periferica USB. Il raspberrypi zero si adatta molto bene a questo fattore di forma e penso che l'intento progettuale fosse quello di far sì che le persone usassero lo zero come periferica USB.

https://learn.adafruit.com/turning-your -raspberry-pi-zero-into-a-usb-gadget / panoramica

La soluzione OTG è molto più elegante e secondo me stupirà di più i tuoi amici

in un'altra nota (essendo io stesso un ingegnere di dispositivi medici) per quanto riguarda la convalida di software e sistemi informatici, ti preghiamo di comprendere che se il tuo "prototipo" verrà utilizzato per raccogliere qualsiasi tipo di dati di qualità (progettazione, monitoraggio del processo, ecc.) sottoporsi a una sorta di valutazione basata sul CFR 21 parte 11 per quanto riguarda la convalida del software.

In realtà ho utilizzato un raspberry pi per il monitoraggio remoto e la verifica di un'apparecchiatura fuori sede (presso un sito di produzione). È al di fuori dello scopo di questo sito, ma messaggio me e sarei felice di indicarti la giusta direzione per quanto riguarda il mantenimento della conformità FDA con il tuo sistema
Si noti che il percorso del gadget OTG è l'equivalente di un collegamento ethernet o seriale, quindi in realtà non offre nulla che altri modelli di pi facciano oltre al fatto che è possibile utilizzare un cavo USB -> microUSB per esso.
OTG è disponibile anche sul Compute Module, che potrebbe essere più adatto per essere integrato nei dispositivi.
@goldilocks grazie per questo suggerimento: non sapevo che potessi eseguire solo seriale su USB OTG. Grazie per averlo chiarito per me. Devo immaginare che nel prossimo futuro qualcuno avrà capito HID e MSD - non sono solo configurazioni software? Ma per OP, questo potrebbe essere troppo tardi nello sviluppo del tuo progetto.
Alla fine di quel tutorial adafruit ci sono le altre modalità del dispositivo elencate con la dichiarazione di non responsabilità che questo è tutto sperimentalehttps: //learn.adafruit.com/turning-your-raspberry-pi-zero-into-a-usb-gadget/other -moduli Mi manca qualcosa qui? Questi sarebbero tutti in modalità gadget USB (cioè non host) corretto? e non solo seriale / ethernet? Personalmente, ho usato solo le modalità seriale ed ethernet per lo zero, ne proverò altri forse questo fine settimana.Un ulteriore processo di riflessione sui dettagli che vanno nel tutorial sembra essere qui: https://github.com/raspberrypi/ linux / issues / 1212
Dovrei qualificarlo - non è strettamente ethernet o seriale e sono abbastanza certo che ci siano, ad esempio, modi per farlo funzionare come dispositivo HID ... ma non sembra molto applicabile a questo caso d'uso, quindi immagino che quello che volevo dire fosse che non offre nulla di utile in questo contesto che non potresti comunque fare con un normale pi (l'utilità WRT lo zero è che non ha un jack eth per iniziare).
Il "gadget ethernet "èdavvero al 100% identico a una connessione ethernet diretta (anche se potrebbe essere potenzialmente più veloce, non l'ho messo alla prova!), E per le connessioni peer-to-peer, la rete IP è probabilmente il tuttofare la migliore opzione comunque. Una cosa sono abbastanza sicuro che attualmente * non puoi * fare è far sì che imiti un dispositivo di archiviazione di massa e, più in generale, se sei abituato alle funzionalità che potresti ottenere collegando uno smartphone, ecc., Non lo è sarà così. Presumo che un modello multi-core (2/3) con più memoria potrebbe essere un'idea migliore di uno zero qui, BTW.
Oops, beh, una rapida ricerca su Internet sembra indicare che puoi farlo funzionare come dispositivo di archiviazione di massa. Farò un'altra ipotesi, però, che non puoi farlo funzionare come più di un tipo di dispositivo USB alla volta ... anche se potrei sbagliarmi anche lì.
#3
+5
Mark
2016-08-17 11:42:56 UTC
view on stackexchange narkive permalink

Preferisco Ethernet, punto a punto o tramite il router. Perché?

  1. Gestisce errori di trasmissione, correzione ecc. "Fuori dagli schemi" - Immagino sia importante per scopi medici (la tua frequenza cardiaca è ora raddoppiata perché è cambiata di un po '- whoops)
  2. Può essere lungo (fino a 100 m - e può essere esteso)
  3. È economico e comunemente disponibile
  4. Puoi ottenere cavo schermato di buona qualità che (aiuterebbe) a eliminare il rumore (alcuni dispositivi come una vecchia TV o un ferro da stiro sono problemi reali)
  5. Se scrivi una sorta di API REST per il tuo prodotto, puoi connettiti facilmente con C # e anche con altri linguaggi!
  6. Se cambi idea e non vuoi più RPi, puoi migrare facilmente, semplicemente implementando la stessa interfaccia (se è REST - è ancora più semplice, ma puoi usare anche le prese)
  7. Se hai bisogno del wireless, collega un adattatore USB e sei pronto per iniziare.
  8. Molte cose esistenti funzionano già con esso - non devi ricominciare da capo - di immibis
8 (o 5b). Molte cose esistenti funzionano già con esso: non è necessario ricominciare da capo.
Per quanto riguarda l'opzione 7, che sembra la più universale (poiché un dato PC casuale potrebbe o non potrebbe avere una porta ethernet di riserva, ma molto probabilmente avrà una porta USB), hai qualche collegamento di esempio? Ad esempio, per un adattatore disponibile in commercio o un tutorial su come utilizzare tale adattatore ...? Grazie!
Adattatori compatibili con @heltonbiker RPi (funzionano anche con i PC): http://elinux.org/RPi_USB_Wi-Fi_Adapters, la maggior parte di essi dovrebbe funzionare plug-and-play. Le istruzioni di installazione sono disponibili anche lì.
#4
+2
joan
2016-08-17 02:02:47 UTC
view on stackexchange narkive permalink

La connessione più semplice, veloce e probabilmente più affidabile sarebbe un cavo Ethernet punto a punto.

In alternativa un dongle da seriale a USB. L'estremità seriale potrebbe essere sul Pi dall'UART (pin 8/10) o sull'estremità del PC con un adattatore RS232 adatto.

#5
-1
Amiley k. Selonim
2017-02-27 19:39:41 UTC
view on stackexchange narkive permalink

Puoi raspberry pi con il cellulare solo usando un adattatore che può funzionare come comunicazione a due vie. Non vi è alcuna struttura incorporata in Raspberry Pi per posizionare il modem di comunicazione a due vie. GPIO e la porta seriale non sono abilitati per questa funzione.

#6
-3
Jyrone Parker
2016-08-17 05:31:48 UTC
view on stackexchange narkive permalink

Se vuoi un approccio wireless scrivi un'app socket nodejs

Benvenuto in Raspberry Pi! Sebbene questo possa teoricamente rispondere alla domanda, sarebbe preferibile includere qui qualche spiegazione per renderlo una risposta più utile.


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...