Вопрос:
Я могу 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
на сервере я теперь получаю данные, выглядя хорошо. (я нажимаю на сокет вместо печати в ответ).
$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?
Лучший ответ:
вы можете прочитать данные из порта usb/последовательного порта в python, используя pyserial library
import serial ser = serial.Serial(‘/dev/ttyUSB0’, 9600) while True: data = ser.readline() if data: print(data)
вам не нужно перенаправлять последовательный ввод на скрипт python через канал.