Domanda:
Invio di letture di dati in tempo reale da Raspberry Pi a laptop
Aaron H
2014-03-17 02:09:34 UTC
view on stackexchange narkive permalink

Ho un semplice codice Python che prende le letture da un sensore di temperatura. Desidero inviare queste letture (ogni volta che una viene registrata nel ciclo while del codice) al mio laptop in modo che i valori possano essere utilizzati in tempo reale in un'applicazione che ho creato sul mio laptop utilizzando Visual C #.

Pertanto, vorrei essere in grado di aggiungere codice nel mio codice Python esistente che invece di stampare semplicemente le letture del sensore sul Pi, invia i valori al mio laptop in un modo che può essere letto da un App C #.

Non ho internet wireless sul Pi, quindi ho intenzione di inviare i dati tramite un cavo come un cavo Ethernet.

Qualsiasi consiglio su come ottenere questo risultato sarebbe molto apprezzato, grazie.

Quattro risposte:
#1
+3
Fred
2014-03-18 19:00:25 UTC
view on stackexchange narkive permalink

Puoi usare UDP abbastanza facilmente in entrambe le lingue. Qualcosa di simile sul Pi imposta l'invio di pacchetti:

  import socketsock = socket.socket (socket.AF_INET, socket.SOCK_DGRAM) message = "dati che vuoi inviare" sock.sendto (messaggio , ("dns.or.ip.of.server", pick_a_port_number))  

Sul lato C # è un po 'più complesso, ma c'è un esempio qui, che riprodurrò modificato di seguito:

  utilizzando System; utilizzando System.Net; utilizzando System.Net.Sockets; utilizzando System.Text; public class UdpSrvrSample {public static void Main () {byte [] dati = nuovo byte [1024]; IPEndPoint ipep = nuovo IPEndPoint (IPAddress.Any, pick_a_port_number); UdpClient newsock = nuovo UdpClient (ipep); Console.WriteLine ("Waiting for a client ..."); Mittente IPEndPoint = nuovo IPEndPoint (IPAddress.Any, 0); data = newsock.Receive (ref mittente); Console.WriteLine ("Messaggio ricevuto da {0}:", sender.ToString ()); Console.WriteLine (Encoding.ASCII.GetString (data, 0, data.Length)); // questi saranno i "dati che vuoi inviare"}}  

Questa pagina potrebbe anche essere utile.

#2
+1
goldilocks
2014-03-17 02:54:54 UTC
view on stackexchange narkive permalink

Vorrei essere in grado di aggiungere codice nel mio codice Python esistente che invece di stampare semplicemente le letture del sensore sul Pi, invia i valori al mio laptop in un modo che può essere letto da un'app C #.

Si desidera utilizzare un modello client / server TCP. Entrambe le estremità possono essere il server, l'altra è il client; il client si connette al server e stabilisce una connessione, quindi le informazioni possono essere inviate avanti e indietro. Il codice scheletro per un client o un server di base è probabilmente solo una dozzina di righe in Python. Inizia sviluppando un echo server , qualcosa che semplicemente rispedisce lo stesso messaggio che è stato inviato, e poi lavora da lì.

Otterrai un aiuto migliore con questo su un forum dedicato in Python o C # - nulla riguardo all'attività è specifico per il pi. Dovresti prima guardarti intorno per i tutorial sulla rete TCP che coinvolgono entrambi i linguaggi e lavorarci sopra. In questo modo puoi risparmiare un po 'di tempo presentandoti al tavolo con domande specifiche e codice che dimostri cosa hai provato / quali problemi stai riscontrando.

Grazie per il vostro consiglio. Ho seguito un tutorial su server / client TCP per python, che utilizza l'host locale (127.0.0.1). Se eseguo sia il server che il client sul Pi, funziona, tuttavia se eseguo il codice client sul mio laptop che è connesso al Pi tramite un cavo Ethernet, il codice client fallisce con l'errore: [Errno 10061] Nessuna connessione potrebbe essere fatto perché il computer di destinazione lo ha rifiutato attivamente. Hai idea del motivo per cui il Pi rifiuta il mio laptop? Grazie ancora.
127.0.0.1 è localhost su ogni macchina, incluso il tuo laptop. Quindi, se stai provando a connetterti usando quell'indirizzo, il laptop sta cercando di connettersi a se stesso (e se la porta corrispondente non è aperta, rifiuterà). Devi usare l'indirizzo di rete del pi greco.
Grazie, ho cambiato il codice client ora ho l'indirizzo corretto del Pi, tuttavia ora attende un po 'e poi genera un errore che dice "[Errno 10060] Un tentativo di connessione non è riuscito perché la parte connessa non ha risposto correttamente dopo un periodo di tempo o connessione stabilita non riuscita perché l'host connesso non è riuscito a rispondere. " Ciò potrebbe essere dovuto al fatto che la porta sul Pi non consente al laptop di comunicare?
Potrebbe farlo se hai un firewall (`iptables`) configurato. Tuttavia, questo non è attivato di default su raspbian. Come si dispone di questa configurazione (il cavo ethernet diretto)? È un po 'insolito.
Grazie, controllerò se è abilitato, ma non l'ho abilitato in precedenza da solo. Ho semplicemente collegato il cavo Ethernet dal Pi al mio laptop, quindi ho provato a eseguire il codice client del server. Ci sono cose che riguardano l'Ethernet che devo impostare manualmente?
Sarebbe più normale metterli entrambi sulla stessa rete e comunicare tramite un router. Scommetto che otterrai lo stesso [Errno] se scolleghi il cavo. Se non hai una rete da usare (cioè sei totalmente offline da qualche parte, il che è strano visto che hai postato qui ...), è possibile collegare i due con un [cavo incrociato] (http: //en.wikipedia.org/wiki/Cross-over_cable). Le specifiche di questa sono tutta un'altra domanda (potresti chiedere su [U&L] (http://unix.stackexchange.com/questions), potrebbero esserci anche altri metodi).
Quel collegamento è troppo generale spiacente. Questo è migliore: [cavo crossover] (http://en.wikipedia.org/wiki/Ethernet_crossover_cable). Ma se hai una (W) LAN che stai utilizzando, collegali entrambi ad essa: sei sulla stessa rete insieme in quel modo.
#3
+1
Diego
2014-03-17 16:38:51 UTC
view on stackexchange narkive permalink

Usando un server Samba sul tuo Raspberry Pi potresti condividere una directory sulla rete. Mettendo i tuoi file in quella directory avrai accesso ad essi dal tuo laptop. In questo modo non devi modificare alcun codice, più che cambiare la directory in cui dovrebbe scrivere il programma Python.

Qui puoi leggere di più su come configurare un server Samba e condividere cartelle.

#4
  0
PaulProgrammer
2014-03-17 12:40:23 UTC
view on stackexchange narkive permalink

In alternativa, pubblica le tue letture su un servizio web, in modo che non sia necessario che il tuo laptop sia acceso per raccogliere le informazioni. Puoi recuperare le letture su richiesta dal tuo laptop o da qualsiasi altra macchina collegata. Oppure

Come per la risposta di @goldilocks, questo non è specifico per pi quanto è una domanda generale di informatica / programmazione.



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