Bagaimana cara saya mendapatkan data dari port serial?

12

Saya memiliki modul radio Ciseco XRF dan papan ekspansi Slice of Pi .

Menggunakan program 'layar' berfungsi dengan baik; Saya dapat melihat data sedang dikirim ke modul XRF.

Bagaimana saya mendapatkan data dari port serial, sehingga saya bisa melakukan beberapa pemrosesan di dalamnya? Saya mencoba perl tetapi tidak membaca apa pun.

pengguna518
sumber
2
Hai Gerard, selamat datang di Raspberry Pi.SE. Bisakah Anda memeriksa saya sudah menambahkan tautan yang benar?
Alex Chamberlain
Iya. Hanya pekerjaan
user518
Sudah punya kode? Apa masalah spesifiknya? Anda tidak dapat membaca data dari Serial sama sekali atau dengan python?
Piotr Kula
@ppumkin Dia ingin tahu cara mendapatkan data dari port serial.

Jawaban:

5

Saya belum mencoba ini pada Pi, tapi saya menggunakan python untuk mengakses port serial pada Beagle Bone. Serial Python dapat diinstal menggunakansudo apt-get install python-serial

Kemudian Anda dapat menggunakan potongan kode berikut:

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

Jelas mengganti "/ dev / ttyS0" dengan nama port serial, dan 9600 dengan baud rate yang Anda butuhkan. response akan berupa array yang berisi baris yang dikembalikan oleh port serial.

Rincian lebih lanjut dari API python dapat ditemukan di http://pyserial.sourceforge.net/

Phil
sumber
3

Nama port serial pada pi adalah: ttyAMA0(*)

jadi kode saya adalah:

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 

(*) Periksa output dmesguntuk mengetahui nama perangkat setelah terpasang ke pi. Bisa jadi ttyUSB0jika Anda memasang konverter USB ke serial.

Daryl
sumber
4
Apakah maksud Anda agar ini menjadi komentar pada posting Phil? Saya dapat mengonversinya jika demikian.
ramblinjan
0

Contoh untuk digunakan dengan C # dan dijalankan dengan 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
}

ini adalah kode yang sangat sederhana untuk mendapatkan data

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

pengguna2341823
sumber
Saya menambahkan bahwa ini hanya untuk C #. bukan bash C / C ++. Terus terang kodenya sangat kabur dan menggunakan praktik pengkodean yang buruk ... tetapi harus berfungsi dengan baik. Tidak berhak mendapatkan +1 dulu karena ini untuk Formulir Win dan bukan Konsol.
Piotr Kula
0

Pada beberapa Pi port serialnya adalah / dev / ttyS0, yang lain port / dev / ttyAMA0, jika Anda menggunakan adaptor USB menjadi / dev / ttyUSB0, ini bukan daftar lengkap.

Pada prompt BaSH Anda bisa mengetik

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

Di C Anda bisa

#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 biru
sumber