OSError: [Errno 5] Input/output error on Raspberry PI GPS shield Python
OSError: [Errno 5] Input/output error on Raspberry PI GPS shield Python
我有一个 Raspberry PI 3 和一个 GSM/GPRS/GNSS HAT。
我想从 Python 的设备读取 GPS 数据。
我使用了文档中的 example code,并稍微重写了它。
它完美地工作了几个小时,但是有一次当我重新启动 Raspberry(我之前已经重新启动它并且它工作正常)它在几次成功读取后开始抛出这个:
Traceback (most recent call last):
File "/home/ubuntu/gps.py", line 90, in listenForGpsInfo
while ser.inWaiting() > 0:
File "/usr/lib/python3/dist-packages/serial/serialutil.py", line 594, in inWaiting
return self.in_waiting
File "/usr/lib/python3/dist-packages/serial/serialposix.py", line 531, in in_waiting
s = fcntl.ioctl(self.fd, TIOCINQ, TIOCM_zero_str)
OSError: [Errno 5] Input/output error
这是我的代码:
def listenForGpsInfo(callback):
ser = serial.Serial("/dev/ttyS0",baudrate=115200)
W_buff = [b"AT+CGNSPWR=1\r\n", b"AT+CGNSSEQ=\"RMC\"\r\n", b"AT+CGNSINF\r\n", b"AT+CGNSURC=2\r\n", b"AT+CGNSTST=1\r\n"]
ser.write(W_buff[0])
ser.flushInput()
data = ""
num = 0
while True:
time.sleep(utils.GPS_INTERVAL_IN_SECONDS)
try:
while ser.inWaiting() > 0:
data += ser.read(ser.inWaiting()).decode()
print(data)
if data != "":
if num < len(W_buff)-1:
print(num)
ser.write(W_buff[num+1])
num =num +1
else:
ser.write(W_buff[2])
if "+CGNSINF" in data:
data = str(data)
gpsInfo = parseGpsData(findInfoLine(data))
if(gpsInfo is not None):
callback(gpsInfo)
data = ""
except Exception as e:
if ser != None:
ser.close()
traceback.print_exc()
listenForGpsInfo(callback)
return
这是串行命令的文档:https://www.waveshare.com/w/upload/3/3d/SIM868_GNSS_Application_Note_V1.00.pdf
我试了很多东西,都解决不了。
我试过的几件事:
- 正在重启设备
- 拆卸和安装防护罩
- 仅发送
AT+CGNSPWR=1\r\n
和 AT+CGNSINF\r\n
命令
chmod 666 /dev/ttyS0
我在 raspberry 上安装了 ubuntu,当我安装 raspberry os 时,错误消失了。
我有一个 Raspberry PI 3 和一个 GSM/GPRS/GNSS HAT。
我想从 Python 的设备读取 GPS 数据。 我使用了文档中的 example code,并稍微重写了它。 它完美地工作了几个小时,但是有一次当我重新启动 Raspberry(我之前已经重新启动它并且它工作正常)它在几次成功读取后开始抛出这个:
Traceback (most recent call last):
File "/home/ubuntu/gps.py", line 90, in listenForGpsInfo
while ser.inWaiting() > 0:
File "/usr/lib/python3/dist-packages/serial/serialutil.py", line 594, in inWaiting
return self.in_waiting
File "/usr/lib/python3/dist-packages/serial/serialposix.py", line 531, in in_waiting
s = fcntl.ioctl(self.fd, TIOCINQ, TIOCM_zero_str)
OSError: [Errno 5] Input/output error
这是我的代码:
def listenForGpsInfo(callback):
ser = serial.Serial("/dev/ttyS0",baudrate=115200)
W_buff = [b"AT+CGNSPWR=1\r\n", b"AT+CGNSSEQ=\"RMC\"\r\n", b"AT+CGNSINF\r\n", b"AT+CGNSURC=2\r\n", b"AT+CGNSTST=1\r\n"]
ser.write(W_buff[0])
ser.flushInput()
data = ""
num = 0
while True:
time.sleep(utils.GPS_INTERVAL_IN_SECONDS)
try:
while ser.inWaiting() > 0:
data += ser.read(ser.inWaiting()).decode()
print(data)
if data != "":
if num < len(W_buff)-1:
print(num)
ser.write(W_buff[num+1])
num =num +1
else:
ser.write(W_buff[2])
if "+CGNSINF" in data:
data = str(data)
gpsInfo = parseGpsData(findInfoLine(data))
if(gpsInfo is not None):
callback(gpsInfo)
data = ""
except Exception as e:
if ser != None:
ser.close()
traceback.print_exc()
listenForGpsInfo(callback)
return
这是串行命令的文档:https://www.waveshare.com/w/upload/3/3d/SIM868_GNSS_Application_Note_V1.00.pdf
我试了很多东西,都解决不了。 我试过的几件事:
- 正在重启设备
- 拆卸和安装防护罩
- 仅发送
AT+CGNSPWR=1\r\n
和AT+CGNSINF\r\n
命令 chmod 666 /dev/ttyS0
我在 raspberry 上安装了 ubuntu,当我安装 raspberry os 时,错误消失了。