-
-
Couldn't load subscription status.
- Fork 73
Description
Firstly I want to thank you for the effort you put into creating this library - it's AWESOME and you are GREAT! :D
My config:
u-blox C099-F9P // FWVER = HPG 1.13 // PROTVER = 27.12
navigation frequency: 10Hz
connection via USB cable (UART1)
windows 10 x64
python 3.7.9
pyubx2 ver. 1.0.2
My problem:
I want to start GNSS (via CFG-RST message), then read UBX messages for some time (in my case these are MON-RF, NAV-DOP, NAV-EELL, NAV-HPPOSLLH, NAV-PVT, NAV-SIG, NAV-STATUS) and stop GNSS (again via CFG-RST). The reason why I want to stop and start GNSS is that I want to save battery while keeping GNSS parameters in memory (so then I may perform hotstart).
How my code below works:
#receiver is stopped
-Starting GNSS is succesfull
-Reading several first message is also succesful, but then it hangs up and wait for message from serial (but the receiver is still working, and the serial send messages)
-I terminate the script
#start again (now the receiver keeps working - we are not stopped it)
-"Starting" GNSS is succesful - it just sends the message, but of course receiver is already wroking
-Reading all messages is succesfull
-Stopping GNSS is succesful
#again receiver is stopped
-Starting GNSS is succesfull
-Reading several first message is also succesful, but then it hangs up...
...
I tried to set validate flag to True - it raise
UBXStreamError(f"Unknown data header {byte1}. {nmeawarn}")
pyubx2.exceptions.UBXStreamError: Unknown data header
What I noticed - after several OK readings it starts to divide binary message to single bytes and this is why this error occurs.
To prevent this I need to close port after writing, sleep for 1 second (shorter values don't help), open serial port again and flush it. This way everything works OK. But the problem is that in the future I would like to configure receiver on the run and then 1 second break looks ugly :/
Code:
import time
import serial
from pyubx2 import UBXReader, UBXMessage, SET
print("hello")
ser = serial.Serial(port="COM9", baudrate=921600, timeout=1)
print("Port is open? -> ", ser.is_open)
if ser.is_open:
# START GNSS
msg = UBXMessage(6, 4, SET, resetMode=9)
print(msg)
ser.write(msg.serialize())
print("STARTED!")
"""
# CLOSE, SLEEP and OPEN AGAIN
ser.close()
time.sleep(1)
ser = serial.Serial(port="COM9", baudrate=921600, timeout=1)
# PORT FLUSH
print("dummy read", ser.read())
ser.flush()
ser.flushInput()
ser.flushOutput()
"""
# READING UBX
i = 0
while i < 300:
print("reading ", i, ":")
ubr = UBXReader(ser)
(raw_data, parsed_data) = ubr.read()
print(raw_data)
print(parsed_data)
if parsed_data.identity == 'NAV-HPPOSLLH':
print("LON = ", (parsed_data.lon + parsed_data.lonHp/100)*10**(-7))
print("\n")
i += 1
# STOP GNSS
msg1 = UBXMessage(6, 4, SET, resetMode=8)
print(msg1)
msg1 = msg1.serialize()
ser.write(msg1)
print("STOPPED!")
ser.close()
else:
print("Problem with serial port")