[英]Serial communication with Raspberry pi
我们如何使用带有python脚本的raspberry pi进行串行通信,以便将数据发送/接收到我的笔记本电脑? 如果是,我们可以使用RS232电缆直接连接到树莓派上的TX / RX端口吗? 如果是,必须从RS232电缆使用哪些引脚? 如果有人可以发布示例python脚本,那将是完全有用的吗?
由于我的第一个目标是向/从树莓派发送/接收数据到笔记本电脑,我在两端使用RS232到USB线连接到笔记本电脑以及树莓派。
适用于RS-232
1)下载Putty 。
2)购买串行端口RS232到TTL转换器模块和用于PC的RS-232串行电缆。
3)按照此链接上与微控制器或其他外设连接的步骤进行操作。 实际上阅读整个事情是为了更好地理解。
4)用3.3V(引脚1)或5.0V(引脚2)为转换器模块供电,将模块的Rxd引脚连接到Rpi上的Rxd(引脚8),将Txd引脚连接到Rpi上的Txd(引脚10)。
5)将RS-232(从PC)电缆连接到转换器模块
现在您已准备好在Python中进行一些编码。 但在此之前,请确保您拥有名为serial for python的库来创建通信。 您可以通过键入sudo apt-get install python-serial轻松地通过终端获取它。 此外,您将看到代码中的波特率为7200.根据同步情况,它可能会更少或更多。 还要确保putty和COM1中的波特率相同,这是RS-232连接到PC的端口。 您可以在Windows中从设备管理器进行检查和设置。 顺便说一下, 超时是您收到的每条消息之间的时间间隔。
如果您无法从空闲运行代码(某些库发生这种情况),请在终端中执行。 为此,转到保存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转TTL转换器并使用GPIO与Rpi进行串行通信。 这个代码与上面的代码完全相同。 连接这很容易。
模块 - Rpi
Txd - > Txd
Rxd - > Rxd
Gnd ---> Gnd
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()返回缓冲区中当前的字节数。
您是否尝试向Raspberry Pi发出命令? (就像一个控制台?)我建议使用简单的3.3V FTDI电缆。 你可以从Digikey或Sparkfun获得它们。 注意:Raspberry Pi运行在3.3V,因此您必须确保连接到它的任何东西都运行3.3V或具有电平转换器。 在此处查看有关电平移位器的更多信息。 (进入逻辑电压电平部分)
首先,您需要确保Raspbian已经发布了串行控制台。 您可以使用此处的脚本执行此操作 。
如果您对与其他设备通信更感兴趣,那么以下内容可能适合您:
你有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);
}
}
并使用下图连接它:
注意 :确保不要将USB电缆连接到Arduino。 它将由Raspberry Pi提供动力。
然后,您可以安装并运行screen
。 屏幕是连接到串行端口的简单方法。
apt-get install screen
然后运行以下命令:
screen /dev/ttyAMA0 115200
屏幕将显示空白。 但是,当你开始输入时,你会注意到你正在写的字符被循环回到你的终端。
注意 :如果屏幕仍然是空白,则应仔细检查连接(Arduino上的电源检查是一件好事)。
如果有疑问,你可以在这里看到我的整个例子。
你应该为串行驱动程序安装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
Raspberry pi中的串行通信。
串行通信有很多选择
并循环回txd和rxd引脚并检查是否收到发送消息。
如果你熟悉java安装pi4j并在示例文件夹中有一个示例程序,使用终端编译和运行。 并检查输出。
如果您使用RS232和Max232进行连接,请注意使用3.3伏而不是5或12伏。 ,它可能会燃烧你的电路板。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.