首页 文章

与Raspberry pi的串行通信

提问于
浏览
2

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

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

5 回答

  • 0

    Raspberry pi中的串行通信 .

    串行通信有很多选择

    • 在visual studio中使用Visual GDB插件并在raspberry pi中远程部署代码

    并循环回txd和rxd引脚并检查是否收到发送消息 .

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

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

  • 4

    您是否尝试向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

    Note :确保 don't 将USB电缆连接到Arduino . 它将由Raspberry Pi提供动力 .

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

    apt-get install screen
    

    然后运行以下命令:

    screen /dev/ttyAMA0 115200
    

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

    Note :如果屏幕仍然是空白,你应该仔细检查连接(Arduino上的电源检查是一件好事) .

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

  • 0

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

    For RS-232

    1)下载Putty .

    2)购买Serial Port RS232 to TTL Converter Module和用于PC的RS-232串行电缆 .

    3)按照link中的 Connection to a microcontroller or other peripheral 中的步骤进行操作 . 实际上阅读整个事情是为了更好地理解 .

    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)
    

    For USB serial to PC

    你有两个选择

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

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

    模块 - Rpi

    Txd - > Txd

    Rxd - > Rxd

    Gnd ---> Gnd

  • 0

    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()返回缓冲区中当前的字节数 .

  • 1

    你应该为串行驱动程序安装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

相关问题