使用 Python 通过串口与 Raspberry Pi 通信

Using Python to communicate to Raspberry Pi via serial

你好 Whosebug 社区,我一直在做一个个人项目,我需要一些帮助。我有一个 RaspberryPi,用于通过 USB 转串口连接存储来自 PC 的消息。目前,我可以使用 Putty 通过 COM 端口 3 连接到 RPi(请求用户 id/password)并给我一个 shell (ttyAMA0)。我的最终目标是在 python 中编写一段代码来监听来自 PC 的通信(也在 Python 中),这样当我输入一条消息时(即 "hello world"),它会将它发送到 COM3 上的 RPi,RPi 将接收它并将其保存到文件。

我的方法可能是错误的(显然因为它不起作用)但这是我目前所拥有的:

此 Python 脚本在 RPi 上 运行(我通过网络连接 (SSH) 登录)并且它正在通过 ttyAMA0 侦听来自 PC 的消息

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=115200, timeout = 3.0)

while True:
        rcv = readlineCR(port)
        print 'message received: ' + repr(rcv)    

此 Python 脚本在 PC 上 运行

import serial

ser = 0

def init_serial():
     COMNUM = 3          
     global see          
     ser = serial.Serial()
     ser.baudrate = 115200
     ser.port = COMNUM - 1   #this makes it COM3
     ser.timeout = 10
     ser.open()          

     if ser.isOpen():
          print 'Open: ' + ser.portstr

init_serial()
ser.write(‘root’ + '\n')
ser.write(‘<PASWORD HERE>’ + '\n')

while True:
    msg = raw_input(“message: \r\n“)
    ser.write(msg)
    print ‘sent: ‘+ msg +’\r\n’ 

如有任何建议,我们将不胜感激!

init_serial()
ser.write('root')
ser.write('<PASSWORD HERE>')

如果我没记错的话(不能在这里测试),你不会在 root 的末尾发送 \n 和密码(ser.write() 不会将它们添加为 print() 会),所以您没有正确登录。

顺便说一句,让脚本等待每个提示不会有什么坏处 - 如果您在 RPi 之前启动程序,登录将会丢失。

编辑:如果这不起作用,请尝试 运行ning a serial line sniffer 或 运行 Wireshark 并检查 USB 协议(更难)这样你就可以监控到底是什么正在发生。

我不得不在 cmdline.txt 文件中注释掉任何对 ttyAMA0 的引用,这样我就不会被提示输入串行控制台。无需尝试传递凭据。

参考: http://elinux.org/Serial_port_programming

是的,您必须注释掉告诉 raspi 使用 ttyAMA0 的行。 看,默认情况下终端绑定到 ttyAMA0,因此您不能将它用于任何其他用途。我的意思是,即使您以编程方式对它执行 'talk',您也将 'speaking' 与 OS,而不是您的 Python 过程。 在“/etc/inittab”底部的某处,您会看到有问题的行。 当您将其注释掉并重新启动时,您将能够将其用作带有 pyserial 的普通 COM 端口(从两端)。虽然我会在你的地方小心,因为正常的 RS232 按规格给出 10V 而 raspi 上的输出引脚为 3.5V 如果我没有严重错误的话。它可能工作正常,或者在您打开它一段时间后可能会造成灾难,或者它根本无法使用更长的电缆。 您需要一些 IC,例如 maxcom 或其他东西来为您调节电压。或者,只需使用两个 USB2Serial 转换器,一个在 PC 上,另一个在 raspi 上,你不需要做任何特别的事情就可以正常工作。