如何从串口获取数据?


12

我有一个Ciseco XRF无线电模块和一片Slice Pi扩展板。

使用程序“屏幕”可以正常工作;我可以看到数据正在传输到XRF模块。

如何从串行端口获取数据,以便可以对其进行一些处理?我尝试了perl,但是它什么也没读。


2
嗨,杰拉德,欢迎来到RaspberryPi.SE。您可以检查我是否添加了正确的链接?
亚历克斯·张伯伦

是。只是工作
user518 2012年

你已经有代码了吗?具体问题是什么。您根本无法从Serial或python中读取数据吗?
Piotr Kula 2012年

@ppumkin他想知道如何从串行端口获取数据。

Answers:


5

我没有在Pi上尝试过,但是我使用python访问Beagle Bone上的串行端口。可以使用以下命令安装Python串行sudo apt-get install python-serial

然后,您可以使用以下代码段:

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

显然,将“ / dev / ttyS0”替换为串行端口的名称,并将9600替换为所需的波特率。响应将是一个包含串行端口返回的行的数组。

可以在http://pyserial.sourceforge.net/找到python API的更多详细信息。


3

pi上的串行端口名称为:ttyAMA0(*)

所以我的代码是:

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 

(*)dmesg连接到pi后,检查的输出以查找设备名称。ttyUSB0如果将USB连接到串行转换器,则可能是这样。


4
您是说要对Phil的帖子发表评论吗?如果可以的话,我可以将其转换。
ramblinjan

0

与C#一起使用并与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
}

这是获取数据的非常简单的代码

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


我补充说,这仅适用于C#。不是bash C / C ++。坦率地说,代码非常模糊,并且使用了错误的编码做法...但是应该可以正常工作。暂时不应该使用+1,因为它是针对Win Forms而不是Console。
Piotr Kula 2013年

0

在某些Pi上,串行端口为/ dev / ttyS0,在其他Pi上,串行端口为/ dev / ttyAMA0,如果您使用USB适配器,则其变为/ dev / ttyUSB0,但这不是详尽的清单。

在BaSH提示下,您可以输入

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

在C中,您可以

#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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.