树莓派:如何使用以太网发送串口命令?

4

我有一个Python脚本,当在终端中运行时,将启动CherryPy Web服务器。在脚本中,我通过导入serial使用pyserial,然后打开端口/dev/ttyAMA0,我可以发送任何串行命令。

 @cherrypy.expose
 def login (self, **data):
    passcode = data.get("passcode", None)
    print "logging in using passcode %s"%passcode ,type(passcode)

    import serial
    import time
    #open connection
    serialport=serial.Serial ("/dev/ttyAMA0", 9600, timeout=0.5)
    #write in user sign in code
    serialport.write("\x03LI%s\x0D"%passcode)
    #get reply 
    reply=serialport.readlines(1)
    print reply, type(reply)

然而,由于有以太网端口并且我可以使用Netcat向类似的设备发送串行命令,那么我该如何让此脚本通过以太网端口发送命令而不是串行端口?我需要更改什么?

很抱歉,但我真的不知道该怎么做。我已经在Google上搜索过了,但找不到答案。:(


1
socat是你的好朋友 ;) - hek2mgl
谢谢!它几乎和Netcat一样。但是如何使用它们中的任何一个?:s - yvonnezoe
1
虽然它们有关联,但它与 netcat 不是完全相同的工具。你可以使用 Python 连接到一个本地 TCP socket,但需要通过 socat 将字节流重定向到串口设备上。Python甚至无法识别此操作。当然,也会有真正的Python解决方案。请注意,我不是Python专家,但我们在工作中曾经使用过“socat方式”完成此操作 :) 这就是为什么我留下了这个评论。 - hek2mgl
顺便提一下:有一个专门的树莓派堆栈交换平台:http://raspberrypi.stackexchange.com/ - Clay
2个回答

2
使用socat命令怎么样?使用以下命令行,您可以使/dev/ttyAMA0通过eth 127.0.0.1:5555访问:
socat PTY,link=/dev/ttyAMA0 TCP:127.0.0.1:5555

真的吗?????我太高兴了!谢谢你!我会立刻尝试并再次告诉你 :) - yvonnezoe
没错! scoat 很棒!!! :) 注意我会离开一段时间,但稍后会回来这里。 - hek2mgl
哦耶!:D 好的,注意到了!再次感谢!!但我可以问一下为什么是5555吗?它是一个固定数字吗?:O - yvonnezoe
不,只需要一个端口。您可以选择另一个端口。此外,如果想通过网络访问字节流,可以使用“外部”IP,例如192.168.0.10 - hek2mgl
抱歉时间不太多,需要赶快。稍后会进行一些测试。在我回来之前尝试谷歌一下。也许语法有点小问题,但我确定 socat 可以做到。 - hek2mgl
显示剩余3条评论

1

针对这个问题,基于Python的方法是使用pyserial内置的网络端口功能(该功能基于RFC2217标准)。

在您的服务器上(串行设备连接的地方),您可以运行一个网络串行服务器 - 您可以使用串口桥接示例,例如:

% python /usr/share/doc/python-serial/examples/rfc2217_server.py -p 7000 /dev/ttyAMA0

在您的客户端 Python 代码中,您可以使用较新的 serial_for_url(如 howto 中所述)以 rfc2217 样式的 URL 连接到它,例如:

serial.serial_for_url('rfc2217://yourservername:7000')

注意:pyserial的新版本现在支持许多其他网络传输选项,请参见各种URL处理程序

FYI,如何链接似乎已经损坏。 - 12435432nm
1
谢谢 - 我刚刚更新了链接并添加了有关URL处理程序的信息。 - Pierz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接