与Raspberry pi的串行通信

时间:2013-07-09 03:00:23

标签: raspberry-pi serial-communication

我们如何使用带有python脚本的raspberry pi进行串行通信,以便将数据发送/接收到我的笔记本电脑?如果是,我们可以使用RS232电缆直接连接到树莓派上的TX / RX端口吗?如果是,必须从RS232电缆使用哪些引脚?如果有人可以发布一个示例python脚本,那将是完全有用的吗?

由于我的第一个目标是向/从树莓派发送/接收数据到笔记本电脑,我在两端使用RS232到USB线连接到笔记本电脑以及树莓派。

5 个答案:

答案 0 :(得分:5)

RS-232 / RS-485到PC和USB到PC

对于RS-232

1)下载Putty

2)为PC购买Serial Port RS232 to TTL Converter Module和RS-232串行电缆。

3)按照连接微控制器或其他外围设备中的步骤进行操作 link。实际上阅读整个事情是为了更好地理解。

4)用3.3V(引脚1)或5.0V(引脚2)为转换器模块供电,将模块的Rxd引脚连接到Rpi上的Rxd(引脚8),将Txd引脚连接到Rpi上的Txd(引脚10)

5)将RS-232(从PC)电缆连接到转换器模块

现在您已准备好在Python中进行一些编码。但在此之前,请确保您拥有名为 serial 的库,以便创建通信。您可以通过键入 sudo apt-get install python-serial 来轻松通过终端获取它。此外,您将看到代码中的波特率为7200.根据同步情况,它可能会更少或更多。还要确保putty和COM1中的波特率相同,这是RS-232连接到PC的端口。您可以在Windows中从设备管理器进行检查和设置。顺便说一句, timeout 是您收到的每条消息之间的时间间隔。

如果您无法从空闲运行代码(某些库发生这种情况),请在终端中执行。为此,请转到保存python代码的文件夹,然后键入 python name.py

    import serial
    import time


    def readlineCR(port):
        rv = ""
        while True:
        ch = port.read()
        rv += ch
        if ch == '\r' or ch == '':
             return rv


    port = serial.Serial("/dev/ttyAMA0", baudrate = 7200, timeout = 2)

    while True: 
         rcv = readlıneCR(port)
         port.write("I typed: " + repr(rcv))
         print(rcv)

适用于USB串口转PC

您有两个选择

首先,您可以为RS-232 / RS-485购买USB加密狗,这样就不会使用GPIO引脚。但最好是为所有鼠标,键盘和加密狗设置USB集线器。

第二个也更容易,您可以购买FTDI USB to TTL converter并使用GPIO与Rpi进行串行通信。这个代码与上面的代码完全相同。连接这很容易。

模块 - Rpi

Txd - > TXD

Rxd - > RXD

Gnd ---> GND

答案 1 :(得分:1)

Raspberry Pi的串口使用3.3v逻辑; RS232使用12v,因此需要使用电平转换器才能使用这些引脚,因此无法直接使用RS232。

使用PySerial模块(http://pyserial.sourceforge.net)在Python中进行串行接口,发送和接收数据非常简单。文档中有一些示例,但主要是发送数据:

import serial
port = serial.Serial(portname, baudrate, timeout)
port.write("message to send")
port.close()

这取决于您对数据的处理以及您收到的用于确定接收数据的最佳方式的数据类型,但这是一个非常简单的示例:

import serial
port = serial.Serial(portname, baudrate, timeout)
data = port.read(numberofbytes)
print data

这只是等待直到检索到指定的字节数或达到超时值。

您可以使用port.inWaiting()返回缓冲区中当前的字节数。

答案 2 :(得分:1)

您是否尝试向Raspberry Pi发出命令? (就像一个控制台?)我建议使用简单的3.3V FTDI电缆。您可以从DigikeySparkfun获取这些内容。注意:Raspberry Pi运行在3.3V,因此您必须确保连接到它的任何东西都运行3.3V或具有电平转换器。查看有关电平移位器here的更多信息。 (转到逻辑电压电平部分)

首先,您需要确保Raspbian已发布串行控制台。您可以使用位于here的脚本执行此操作。

如果您对与其他设备通信更感兴趣,那么以下内容可能适合您:

你有Arduino吗?您可以通过将此草图放在Arduino上来运行简单的测试:

#define SERIAL_BAUD 115200

void setup() {

  //Init serial connection
  Serial.begin(SERIAL_BAUD);
  Serial.setTimeout(1);

}

void loop() {

  if ( Serial.available() ) {
    byte type = Serial.read();
    Serial.write(type);
  }

}

使用下图将其连线:

Wiring Arduino to Raspberry Pi

注意:确保将USB线缆连接到Arduino。它将由Raspberry Pi提供支持。

然后,您可以安装并运行screen。屏幕是一种连接串口的简单方法。

apt-get install screen

然后运行以下命令:

screen /dev/ttyAMA0 115200

屏幕将显示空白。但是,当你开始输入时,你会注意到你正在写的字符被循环回到你的终端。

注意:如果屏幕仍然是空白,则应仔细检查连接(Arduino上的电源检查是一件好事)。

如果有疑问,你可以看到我的整个例子here

答案 3 :(得分:0)

你应该为串行驱动程序安装python库。你不能直接使用rs232,而是可以在rx(gpio15)tx(gpio 14)引脚和你的usb到串行转换器之间使用max232芯片。或者您可以使用usb来连接adafruit的串行电缆。这是设置链接:http://learn.adafruit.com/adafruits-raspberry-pi-lesson-5-using-a-console-cable/overview

答案 4 :(得分:0)

Raspberry pi。中的串行通信。

串行通信有很多选择

  1. 在visual studio中使用Visual GDB插件并在raspberry pi中远程部署代码
  2. 并循环回txd和rxd引脚并检查是否收到了发送消息。

    1. 如果您熟悉java安装pi4j,并在示例文件夹中有一个示例程序,使用终端编译和运行。并检查输出。

    2. 如果您使用RS232和Max232进行连接,请注意使用3.3伏而不是5或12伏。 ,它可能会燃烧你的电路板。