Page 1 of 1

Unable to read data from GPS using UART

Posted: Thu Jan 25, 2018 10:31 am
by nikhiledutech
Hello,
I am currently using micro python on STM32Fdisc board, attempting to interface with GPS module. I have tried your code and also tested my code but i am unable to read data from GPS.
Do you have any idea about this problem, why it happen ?

Here is the code:
import pyb
import pyb,micropython
from pyb import LED, Pin, UART


rx = bytearray(250)
i = None
uart = UART(2,115200)


data = bytearray(255)
j = 0
#Capture Data in the Rx buffer
for i in range(255):
uart.readinto(rx)
print(rx)
# x = uart.readchar()
# print(x)
if i == 255:
break
I printed the buffer and the value is 0. So do you have any idea what can be the reason ? I have checked the GPS module its working using C/C++ and also the UART is working fine.

Re: Unable to read data from GPS using UART

Posted: Fri Sep 06, 2019 12:08 pm
by Iyassou
Replying to this old thread in case you didn't find the answer or any likely problems.

You initialise the rx buffer with size 250, and then call pyb.UART.readinto on that buffer 255 times.

The documentation for the readinto states that if you specify a buffer only (and not a buffer and integer), it will read len(buffer) bytes into it. So calling the readinto method on rx with no integer results in 255 overwrites of rx with whatever is on the UART bus.

There is also no delay between the reads. You've initialised the UART bus with an id of 2 and a baudrate of 115200, so that means the timeout is at the default value of 0.

Because of this, the UART times out when there's no immediately available data on the bus: this is why rx ends up being empty. Adding a timeout value similar to the wait time between new GPS sentences should fix this.

Amending your code to the following should yield better results:

Code: Select all

from pyb import UART

rx = bytearray(250)
uart = UART(2, baudrate=115200, timeout=1000) # timeout in ms
uart.readinto(rx)
print(rx)