Làm thế nào để tôi có được dữ liệu từ cổng nối tiếp?


12

Tôi có mô-đun radio Ciseco XRF và bảng mở rộng Slice of Pi .

Sử dụng chương trình 'màn hình' hoạt động tốt; Tôi có thể thấy dữ liệu được truyền đến mô-đun XRF.

Làm cách nào để lấy dữ liệu từ cổng nối tiếp, vì vậy tôi có thể thực hiện một số xử lý trên nó? Tôi đã thử perl nhưng nó không đọc được gì.


2
Xin chào Gerard, chào mừng bạn đến với Raspberry Pi.SE. Bạn có thể kiểm tra tôi đã thêm các liên kết chính xác?
Alex Chamberlain

Đúng. Chỉ cần công việc
user518

Bạn đã có mã nào chưa? Vấn đề cụ thể là gì. Bạn không thể đọc dữ liệu từ serial ở tất cả hoặc trong python?
Piotr Kula

@ppumkin Anh ấy muốn biết cách lấy dữ liệu từ cổng nối tiếp.

Câu trả lời:


5

Tôi chưa thử điều này trên Pi, nhưng tôi sử dụng python để truy cập vào cổng nối tiếp trên Beagle Bone. Python nối tiếp có thể được cài đặt bằng cách sử dụngsudo apt-get install python-serial

Sau đó, bạn có thể sử dụng đoạn mã sau:

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

Rõ ràng thay thế "/ dev / ttyS0" bằng tên của cổng nối tiếp và 9600 bằng tốc độ truyền bạn cần. hồi đáp sẽ là một mảng chứa các dòng được trả về bởi cổng nối tiếp.

Thông tin chi tiết về API python có thể được tìm thấy tại http://pyserial.sourceforge.net/


3

Tên của cổng nối tiếp trên số pi là: ttyAMA0(*)

vì vậy mã của tôi là:

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 

(*) Kiểm tra đầu ra của dmesgđể tìm ra tên thiết bị khi nó được gắn vào pi. Nó có thể là ttyUSB0nếu bạn gắn USB vào bộ chuyển đổi nối tiếp.


4
Ý của bạn là đây có phải là một nhận xét về bài viết của Phil không? Tôi có thể chuyển đổi nó nếu vậy.
ramblinjan

0

Một ví dụ để sử dụng với C # và chạy với 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
}

đây là một mã rất đơn giản để lấy dữ liệu

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


Tôi đã thêm rằng đây chỉ là C #. không bash C / C ++. Thành thật mà nói, mã rất mơ hồ và sử dụng các thực hành mã hóa xấu ... nhưng nó sẽ hoạt động tốt. Chưa xứng đáng được +1 vì nó dành cho Win Forms và không phải Console.
Piotr Kula

0

Trên một số Pi, cổng nối tiếp là / dev / ttyS0, trên các cổng khác là / dev / ttyAMA0, nếu bạn đang sử dụng bộ chuyển đổi USB, nó sẽ trở thành / dev / ttyUSB0, đây không phải là danh sách đầy đủ.

Tại dấu nhắc BaSH, bạn có thể nhập

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

Trong C bạn có thể

#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
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.