如何将数据从/dev/ttyUSB0管道到python脚本



我可以sudo cat /dev/ttyUSB0,数据正在控制台流动。

但我不知道如何在python脚本中做到这一点,以消耗数据。

我试着

sudo python test.py < /dev/ttyUSB0
sudo cat /dev/ttyUSB0 | python test.py

, test.py

import sys
for line in sys.stdin:
    print line

它从不打印任何东西,但如果我执行ls | python test.py,它会返回ls fine?

我需要在test.py中做些什么来读取/dev/ttyusb0

更新注释

所以当我重新启动pi和cat时,除了这里显示的内容之外没有运行任何其他内容:

pi@raspberrypi ~ $ sudo gpsd /dev/ttyUSB0 -F /var/run/gpsd.sock
pi@raspberrypi ~ $ sudo cat /dev/ttyUSB0
$GPGGA,111448.000,5543.1460,N,01229.2541,E,2,08,1.13,19.1,M,41.5,M,0000,0000*5A
$GPGSA,A,3,10,16,18,21,26,20,29,27,,,,,1.42,1.13,0.87*0D
$GPRMC,111448.000,A,5543.1460,N,01229.2541,E,0.37,331.77,270816,,,D*63
$GPVTG,331.77,T,,M,0.37,N,0.68,K,D*33
$GPGGA,111449.000,5543.1462,N,01229.2542,E,2,08,1.13,19.1,M,41.5,M,0000,0000*5A
$GPGSA,A,3,10,16,18,21,26,20,29,27,,,,,1.42,1.13,0.87*0D
$GPRMC,111449.000,A,5543.1462,N,01229.2542,E,0.40,336.35,270816,,,D*62
$GPVTG,336.35,T,,M,0.40,N,0.74,K,D*3F
$GPGGA,111450.000,5543.1463,N,01229.2541,E,2,08,1.13,19.1,M,41.5,M,0000,0000*50
$GPGSA,A,3,10,16,18,21,26,20,29,27,,,,,1.42,1.13,0.87*0D
$GPRMC,111450.000,A,5543.1463,N,01229.2541,E,0.18,42.67,270816,,,D*52
$GPVTG,42.67,T,,M,0.18,N,0.33,K,D*06
$GPGGA,111451.000,5543.1464,N,01229.2542,E,2,08,1.13,19.1,M,41.5,M,0000,0000*55
$GPGSA,A,3,10,16,18,21,26,20,29,27,,,,,1.42,1.13,0.87*0D
$GPGSV,4,1,14,21,66,084,17,16,65,264,18,26,56,199,24,27,41,281,20*74
$GPGSV,4,2,14,20,37,067,14,18,37,138,25,49,26,189,28,10,14,169,21*72
$GPGSV,4,3,14,07,13,335,,29,11,100,16,08,07,282,,13,05,050,*73
$GPGSV,4,4,14,05,04,025,,15,04,080,*72
$GPRMC,111451.000,A,5543.1464,N,01229.2542,E,0.30,7.93,270816,,,D*67
$GPVTG,7.93,T,,M,0.30,N,0.55,K,D*36

一切看起来都很好然后运行python脚本

pi@raspberrypi ~ $ python test.py
Traceback (most recent call last):
  File "test.py", line 96, in <module>
    run_program()
  File "test.py", line 85, in run_program
    with serial.Serial('/dev/ttyUSB0',9600) as ser:
  File "/usr/lib/python2.7/dist-packages/serial/serialutil.py", line 260, in __init__
    self.open()
  File "/usr/lib/python2.7/dist-packages/serial/serialposix.py", line 276, in open
    raise SerialException("could not open port %s: %s" % (self._port, msg))
serial.serialutil.SerialException: could not open port /dev/ttyUSB0: [Errno 16] Device or resource busy: '/dev/ttyUSB0'

通过杀死gpsd修复

pi@raspberrypi ~ $ sudo killall gpsd
pi@raspberrypi ~ $ python test.py
服务器上的

现在我收到了数据,看起来不错。(i push over socket而不是print in answer).

$GPGGA,111838.000,5543.1488,N,01229.2451,E,2,09,0.94,21.8,M,41.5,M,0000,0000*5A
$GPGSA,A,3,29,10,16,18,21,26,20,27,07,,,,1.60,0.94,1.30*09
$GPRMC,111838.000,A,5543.1488,N,01229.2451,E,0.55,102.49,270816,,,D*65
$GPVTG,102.49,T,,M,0.55,N,1.02,K,D*35
$GPGGA,111839.000,5543.1488,N,01229.2454,E,2,09,0.93,21.8,M,41.5,M,0000,0000*59
$GPGSA,A,3,29,10,16,18,21,26,20,27,07,,,,1.22,0.93,0.79*04
$GPRMC,111839.000,A,5543.1488,N,01229.2454,E,0.56,54.80,270816,,,D*55
$GPVTG,54.80,T,,M,0.56,N,1.05,K,D*06
$GPGGA,111840.000,5543.1489,N,01229.2456,E,2,09,0.93,21.8,M,41.5,M,0000,0000*54
$GPGSA,A,3,29,10,16,18,21,26,20,27,07,,,,1.22,0.93,0.79*04
$GPRMC,111840.000,A,5543.1489,N,01229.2456,E,0.43,12.04,270816,,,D*52
$GPVTG,12.04,T,,M,0.43,N,0.80,K,D*00
$GPGGA,111841.000,5543.1490,N,01229.2457,E,2,09,0.94,21.8,M,41.5,M,0000,0000*5B
$GPGSA,A,3,29,10,16,18,21,26,20,27,07,,,,1.60,0.94,1.30*09
$GPGSV,4,1,14,16,65,260,27,21,64,082,17,26,54,198,30,27,43,282,17*7B
$GPGSV,4,2,14,18,39,137,29,20,36,065,18,49,26,189,28,10,15,168,16*74
$GPGSV,4,3,14,07,13,334,16,29,10,101,15,08,08,283,,13,06,049,*73
$GPGSV,4,4,14,15,05,079,,05,02,025,*73
$GPRMC,111841.000,A,5543.1490,N,01229.2457,E,0.24,252.88,270816,,,D*69
$GPVTG,252.88,T,,M,0.24,N,0.44,K,D*3B
$GPGGA,111842.000,5543.1490,N,01229.2456,E,2,09,0.93,21.8,M,41.5,M,0000,0000*5E
$GPGSA,A,3,29,10,16,18,21,26,20,27,07,,,,1.22,0.93,0.79*04

退出python脚本sudo cat /dev/ttyUSB0后,什么都没有发生。这是因为我在python中没有关闭正确的东西吗?

您可以使用pyserial库在python中读取usb端口/串行端口的数据

import serial
ser = serial.Serial('/dev/ttyUSB0', 9600)
while True:
    data = ser.readline()
    if data:
        print(data)

你不需要通过管道将串行输入重定向到python脚本。

最新更新