¿Cómo obtengo los datos del puerto serie?

12

Tengo un módulo de radio Ciseco XRF y una placa de expansión Slice of Pi .

Usar el programa 'pantalla' funciona bien; Puedo ver los datos que se transmiten al módulo XRF.

¿Cómo obtengo los datos del puerto serie para poder procesarlos? Intenté con Perl pero no leyó nada.

usuario518
fuente
2
Hola Gerard, bienvenido a Raspberry Pi.SE. ¿Pueden verificar que he agregado los enlaces correctos?
Alex Chamberlain
Si. Just the job
user518
¿Tienes algún código ya? ¿Cuál es el problema específico? ¿No puede leer datos de Serial en absoluto o en python?
Piotr Kula
@ppumkin Quiere saber cómo obtener datos del puerto serie.

Respuestas:

5

No he probado esto en un Pi, pero uso Python para acceder a un puerto serie en un Beagle Bone. Python serial se puede instalar usandosudo apt-get install python-serial

Luego puede usar el siguiente fragmento de código:

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

Obviamente, reemplazar "/ dev / ttyS0" con el nombre del puerto serie y 9600 con la velocidad en baudios que necesita. La respuesta será una matriz que contiene las líneas que devuelve el puerto serie.

Se pueden encontrar más detalles de la API de Python en http://pyserial.sourceforge.net/

Phil
fuente
3

El nombre del puerto serie en un pi es: ttyAMA0(*)

entonces mi código es:

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 

(*) Verifique la salida de dmesgpara averiguar el nombre del dispositivo una vez que está conectado al pi. Podría ser ttyUSB0si conecta un convertidor USB a serie.

Daryl
fuente
44
¿Querías que esto fuera un comentario en la publicación de Phil? Puedo convertirlo si es así.
ramblinjan
0

Un ejemplo para usar con C # y ejecutar 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
}

este es un código muy simple para obtener datos

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

usuario2341823
fuente
Agregué que esto es solo para C #. no bash C / C ++. Francamente, el código es muy vago y utiliza malas prácticas de codificación ... pero debería funcionar bien. Todavía no merece un +1 porque es para Win Forms y no Console.
Piotr Kula
0

En algunos Pi, el puerto serie es / dev / ttyS0, en otros es / dev / ttyAMA0, si está utilizando un adaptador USB se convierte en / dev / ttyUSB0, esta no es una lista exhaustiva.

En el indicador de BaSH puede escribir

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

En C puedes

#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
BlueChip
fuente