Como obtenho os dados da porta serial?

12

Eu tenho um módulo de rádio Ciseco XRF e uma placa de expansão Slice of Pi .

Usar o programa 'screen' funciona bem; Eu posso ver os dados sendo transmitidos para o módulo XRF.

Como obtenho os dados da porta serial, para que eu possa fazer algum processamento nela? Eu tentei perl, mas ele não leu nada.

user518
fonte
2
Olá Gerard, bem-vindo ao Raspberry Pi.SE. Você pode verificar se eu adicionei os links corretos?
Alex Chamberlain
Sim. Apenas o trabalho
user518
Você já tem algum código? Qual é o problema específico. Você não pode ler dados do Serial ou em python?
Piotr Kula
@ppumkin Ele quer saber como obter dados da porta serial.

Respostas:

5

Eu não tentei isso em um Pi, mas uso o python para acessar uma porta serial em um Beagle Bone. O Python serial pode ser instalado usandosudo apt-get install python-serial

Em seguida, você pode usar o seguinte snippet 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, substitua "/ dev / ttyS0" pelo nome da porta serial e 9600 pela taxa de transmissão necessária. A resposta será uma matriz contendo as linhas retornadas pela porta serial.

Mais detalhes da API python podem ser encontrados em http://pyserial.sourceforge.net/

Phil
fonte
3

O nome da porta serial em um pi é: ttyAMA0(*)

então meu código é:

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 a saída de dmesgpara descobrir o nome do dispositivo depois de anexado ao pi. Pode ser ttyUSB0se você conectar um USB ao conversor serial.

Daryl
fonte
4
Você queria que este fosse um comentário no post de Phil? Eu posso convertê-lo se sim.
Ramblinjan
0

Um exemplo para usar com C # e executar com 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 é um código muito simples para obter dados

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

user2341823
fonte
Eu adicionei que isso é apenas para C #. não bash C / C ++. Francamente, o código é muito vago e usa más práticas de codificação ... mas deve funcionar bem. Ainda não merece um +1 porque é para Win Forms e não para Console.
Piotr Kula
0

Em alguns Pi, a porta serial é / dev / ttyS0; em outros, é / dev / ttyAMA0; se você estiver usando um adaptador USB, torna-se / dev / ttyUSB0, essa não é uma lista exaustiva.

No prompt do BaSH, você pode digitar

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

Em C você pode

#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
Chip azul
fonte