首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Raspberry pi的串口通信

Raspberry pi的串口通信
EN

Stack Overflow用户
提问于 2013-07-09 11:00:23
回答 5查看 33K关注 0票数 3

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

由于我的第一个目标是向笔记本电脑发送数据,或者从树莓pi接收数据,因此我在两端都使用了RS232转USB电缆来连接笔记本电脑和树莓pi。

EN

回答 5

Stack Overflow用户

发布于 2014-07-07 20:51:08

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进行一些编码了。但在此之前,请确保您拥有用于python的名为serial的库来创建通信。您可以很容易地通过终端输入sudo apt-get install python-serial来获取它。你也会看到代码中的波特率是7200。它可能更少或更多,这取决于同步。还要确保putty和COM1中的波特率相同,这是RS-232连接到PC的端口。您可以在Windows的设备管理器中检查和设置它。顺便说一下,超时是您收到的每条消息之间的时间间隔。

如果你不能在空闲状态下运行代码(某些库会发生这种情况),可以在终端中运行。为此,请转到保存python代码的文件夹,然后输入python name.py。

代码语言:javascript
复制
    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

票数 5
EN

Stack Overflow用户

发布于 2013-07-09 22:09:05

树莓派的串行端口使用3.3v逻辑;RS232使用12v,因此需要电平移位器来使用这些引脚,因此您不能直接使用RS232。

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

代码语言:javascript
复制
import serial
port = serial.Serial(portname, baudrate, timeout)
port.write("message to send")
port.close()

这取决于你对数据做了什么以及你接收的是什么类型的数据来决定接收数据的最佳方式,但这是一个非常简单的例子:

代码语言:javascript
复制
import serial
port = serial.Serial(portname, baudrate, timeout)
data = port.read(numberofbytes)
print data

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

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

票数 1
EN

Stack Overflow用户

发布于 2014-03-10 11:32:30

您是否正在尝试向Raspberry Pi发出命令?(就像控制台一样?)我建议使用简式3.3V FTDI电缆。您可以从DigikeySparkfun获取它们。注意:树莓派运行在3.3V,所以你必须确保你连接到它的任何东西都运行3.3V或有一个电平移位器。请参阅有关level shifters here的更多信息。(转到逻辑电压电平部分)

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

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

你们有Arduino吗?你可以通过把这个草图放在你的Arduino上来运行一个简单的测试:

代码语言:javascript
复制
#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);
  }

}

并使用下图将其连接起来:

注意:请务必不要将USB线连接到Arduino。它将由树莓派提供动力。

然后,您可以安装并运行screen。Screen是连接串行端口的一种非常简单的方式。

代码语言:javascript
复制
apt-get install screen

然后运行以下命令:

代码语言:javascript
复制
screen /dev/ttyAMA0 115200

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

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

如果您有疑问,可以查看我的整个示例here

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17539185

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档