Come ottengo i dati dalla porta seriale?


12

Ho un modulo radio XRF Ciseco e una scheda di espansione Slice of Pi .

Utilizzando il programma 'schermo' funziona benissimo; Vedo i dati trasmessi al modulo XRF.

Come posso ottenere i dati dalla porta seriale, così posso fare qualche elaborazione su di esso? Ho provato perl ma non ha letto nulla.


2
Ciao Gerard, benvenuto su Raspberry Pi.SE. Puoi controllare se ho aggiunto i collegamenti corretti?
Alex Chamberlain,

Sì. Solo il lavoro
user518

Hai già qualche codice? Qual è il problema specifico. Non riesci a leggere i dati da Serial o in Python?
Piotr Kula il

@ppumkin Vuole sapere come ottenere dati dalla porta seriale.

Risposte:


5

Non ho provato questo su un Pi, ma uso Python per accedere a una porta seriale su un Beagle Bone. Python serial può essere installato utilizzandosudo apt-get install python-serial

Quindi puoi utilizzare il seguente frammento di codice:

import serial
serialport = serial.Serial("/dev/ttyS0", 9600, timeout=0.5)
serialport.write("What you want to send")
response = serialport.readlines(None)
print response

Ovviamente sostituendo "/ dev / ttyS0" con il nome della porta seriale e 9600 con il baud rate necessario. la risposta sarà una matrice contenente le linee che vengono restituite dalla porta seriale.

Maggiori dettagli sull'API di Python sono disponibili all'indirizzo http://pyserial.sourceforge.net/


3

Il nome della porta seriale su un pi è: ttyAMA0(*)

quindi il mio codice è:

import serial
serialport = serial.Serial("/dev/ttyAMA0", 9600, timeout=0.5)
serialport.write("My string output to serial port")
response = serialport.readlines(None)
print response 

(*) Controlla l'output di dmesgper scoprire il nome del dispositivo una volta che è collegato al pi. Potrebbe essere ttyUSB0se si collega un convertitore da USB a seriale.


4
Intendevi che questo fosse un commento sul post di Phil? Posso convertirlo in tal caso.
ramblinjan,

0

Un esempio da usare con C # ed eseguire con Mono

private _serialPort = null;

privatevoid Form1_Load(object sender, EventArgs e)
{
  _serialPort = new SerialPort(“COM1″, 9600, Parity.None, 8);
  _serialPort.DataReceived += new        
  SerialDataReceivedEventHandler(_serialPort_DataReceived);
  _serialPort.Open();
}

void _serialPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
  string data = _serialPort.ReadExisting();
  // do something with your data, you will need to invoke a delegate to update the UI
}

questo è un codice molto semplice per ottenere dati

http://susheelonline.com/communication-with-serial-post/


Ho aggiunto che questo è solo per C #. non bash C / C ++. Francamente il codice è molto vago e usa cattive pratiche di codifica ... ma dovrebbe funzionare bene. Non merita ancora un +1 perché è per Win Forms e non Console.
Piotr Kula,

0

Su alcuni Pi la porta seriale è / dev / ttyS0, su altri è / dev / ttyAMA0, se si utilizza un adattatore USB diventa / dev / ttyUSB0, questo non è un elenco esaustivo.

Al prompt BaSH è possibile digitare

echo -en "my text\n" > /dev/ttys0  ## write to serial
cat /dev/ttyS0                     ## read from serial

In C puoi

#include <stdio.h>
char  reply[32];                                // response storage
FILE*  fd = fopen("/dev/ttyS0", "rb");          // open Serial
fprintf(fd, "request\n");                       // write serial
fread(reply, sizeof(char), sizeof(reply), fd);  // read serial
printf("response: %s\n", reply);                // display result
fclose(fd);                                     // close serial
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.