GNSS bluetooth module with u-blox NEO8N

Here I build a external GNSS module for mobile devices without or unsatisfactory navigation GNSS option.

Similar projects worth following
I made a external GNSS bluetooth receiver for mobile devices which either have no positon service functionality or "only" GPS and no Glonass, Galileo or Baidou support for heigher accuracy. The module sends NMEA sentences to a device via bluetooth and an app mocks the location on the device which then can be used by maps etc. Alternatively a USB interface makes it possible to use it on a computer.

Key features

- GPS, Glonass, Galileo, Baidou support

- 2.5 m accuracy according to datasheet

- Connects old Android devices to a position service

- Low energy consumption

- Over 27.5 h continous run time with one 18650 (tested while hiking)

- USB-port for u-center programming and as USB-GPS device

- GPS, Glonass and Galileo configured

gpx - 282.98 kB - 09/07/2020 at 16:37


gpx - 463.83 kB - 09/07/2020 at 16:37


gpx - 224.50 kB - 09/07/2020 at 16:37


gpx - 87.90 kB - 09/07/2020 at 16:37


KiCAD footprint and part for LP3981

x-zip-compressed - 6.49 kB - 08/04/2020 at 19:56


View all 8 files

  • 1 × u-blox NEO M8N GNSS module
  • 1 × HC06 Bluetooth module
  • 1 × 18650 Li-Batteries
  • 1 × Battery clip for CR1220
  • 1 × Molex 206640 GPS Antenna

View all 6 components

  • A look inside after 2 years

    dechemist08/11/2021 at 17:13 0 comments

    The module served me very good during my hikes in the last two years but now it is time to build a new one (GNSS module 2.0 - GNSS via Bluetooth). Opening the case after the last, quite rainy holiday reviled a corroded but still functional PCB.

    I will salvage parts apart from the blue tooth and GPS chip from this version. For the u-blox chip I am properly have to use a hot air station. I am afraid of ripping off some pads. 

    If you are still interested in this kind of project please visit the project page of the new version: GNSS module 2.0 - GNSS via Bluetooth

  • Good news everyone... Bluetooth GNSS App for Android 10

    dechemist10/23/2020 at 16:25 0 comments

    Just a short post to spotlight a great Android app to mock the location service and insert the postion from a GNSS bluetooth mouse / modules. 

    The app has the catchy name 'Bluetooth GNSS - GPS, Galileo, GLONASS and BaiDou' and is available in the Google Playstore (link here) for free. It works flawlessly on my Xiaomi Mi Mix 2 with LineageOS 17 (Android 10) and has support for RTK/NTRIP data streams for u-blox F-series or similar RTK GPS chips.  Here a quote from the app discripton "This app supports showing 'Accuracy' estimates from the U-Blox 'PUBX' accuracy messages, instead of the commonly used 'HDOP x CEP' method. This PUBX accuracy reading exactly matches as is the same source of the 'Accuracy' as shown in U-Center PC tool when connected directly to the M8030 (EcoDroidGPS) or ZED-F9P (EcoDroidGPS + ArduSimple) devices via USB."

    If you consider using this app give this guy a 5-star review if you like it :)

  • I have learned something - things to consider for the PCB design

    dechemist09/27/2020 at 10:04 0 comments

    A couple of days ago I watched a video from Phil’s Lab on YouTube and learned something. In the video he goes into detail about impedance matching for RF-traces in KiCAD. As an example he discusses the design of the GPS part of his flight controller. He explains that not only the wires you are using for the antenna have to be impedance matched (usually 50 Ohms), but also the traces from the GPS chip to the antenna socket.

    The trace width, dielectric constant of the base material and distance of the trace to ground are important factors that I have not considerd in my design. Although my module works just fine, I can not estimate how big impact is for not considering.

    For an optimal implementation he uses a 4-layer board with 0.3 mm trace width for the trace from he u-blox chip to the socket. The calculation is done with the KiCAD calculator and material properties from the manufacturers homepage. A 4-layer board is definitifly not in the reach for home manufactoring, so if one wants to do a proper design of my module or something similar the PCB has to be manufactured by one of the many affordable services.

  • More testing was done - highway and city in denmark

    dechemist09/07/2020 at 16:24 0 comments

    In my recent holyday in Denmark I had the opportunity to test the GPS module in a car. The last short test in a car produced a interesting behavior when we drove > 100 km/h. The module lost the fix and did not recover until vcar < 100 km/h. I assumed that this was because I chose the navigation setting 'pedestrian' because back then it was mainly used for hicking.

    So with the setting changed to 'automotive' I gave it another test... and it worked flawlessly. The module never lost the fix for sppeds up to vcar = 130 km/h (Thats the speed limit on Danish highways). I even squeezed another 2 h of run time out of the same 18650 battery I used during my first tests. The total runtime now adds up to about 29.5 h!

    To compare the position accuracy I recorded the track on the one hand with my trusty HTC One paired via bluetooth to the module and with my Xiaomi Mi Mix 2 (GNSS). The module as well as the mobile phone where positioned under the front window on the co-drivers side.

    Comparing the tracks on the highway one sees virtually no difference (Xiaomi Mi Mix 2 in blue, GPS module in lime green). Both tracks almost superimpose along the ~54 km I recored.

    In the city on the differences are a bit more clear. Whereas the generell position from the mobile phone in the city is good, the module is better :) The track from the module seems to be following the street on the right side of the road more often, the mobile phone drifts all over the street (but still on the street though!)

    In challenging situations where the GPS signal was weak or reflections disturb the correct positioning the module seems to drift less and recover faster. I assume this is because of the substantially larger antenna, so not a very fair comparison.

    I put the GPX tracks of the highway and city test for both devices in the download section for everyone to compare.

    All in all I am still very pleased with the device I build. The u-blox NEO M8N preformces awesome and this is without complex implementations and shilding.

  • Version 1.1 is here !

    dechemist08/04/2020 at 19:46 0 comments


    - Over 27.5 h continous run time with one 18650 (tested while hiking)
    - USB-port for u-center programming and as USB-GPS device
    - GPS, Glonass and Galileo configured
    - relative small form factor
    - Typical error between the tracks of the way to a destination and back 2-3 m (hills / mountains, forrest)
    - On/Off switch !
    - Dimensions: 8.8 x 8.8 x 5.4 cm
    - Propper 7 x 7 cm groundplate as recommanded by the antenna manufacturer (MOLEX)

    Changes from v1.0 to 1.1
    - Mini USB-port for programming via u-center (also works in linux with wine without further configuration)
    - Only one 18650 battery is needed (LP3981 LDO voltage regulator for battery applications)
    - No debug serial connections anymore
    - Better (but still wooden) case
    - Added an charging option for rechargeable coin cells
    - PCB groundplate

    I mainly used the module for tracking my hikes. So I ased my girlfriend to sew me a holding strap to put it on the backpack (Thanks !).

    The GNSS-module also works fine while driving in a car for < 100 km/h. Above that it looses the GPS signal. I assume this is because I set the navigation setting to 'pedestrian' and not 'automotive'. Unfortunally right now I have no chance to test it with the automotive setting.

    All in all I am very pleased with the project. The u-blox M8N chip preformes extraordinary well in my opinion.

    Here are some pictures from the new module. The case is again lasercut from 4. 5 mm plywood. On one side we have a on/off switch and a power and GPS-fix LED.

    The antenna is held on the groundplate (PCB with copperlayer) with double sided tape and is exactly centered. The USB interface for know is only accessible by opening the case. I may change that in a upcomming version. Except for that, nothing has changed mutch from the first version 1.0. The PCB has the same dimentions and fits nicely on top of the groundplate. To hold the PCBs in place I used typical standoffs for PCBs so that the case can be opend with only three screws.

    In over 27 h I only had one malfunction where my mobile phone lost the bluetooth signal while hiking and therefore could not record my position. I am not sure whether it was the phone's fault or the HC-06 module's. Nevertheless I am very pleased with this statistic for a hobbiest project (Not to mention that is also could happen with a commercial device). I was a steap learning curve for me, and shurely a lot of fun testing and playing around with my module.

  • First test with version 1.0

    dechemist07/07/2020 at 19:32 0 comments

    Last weekend I tested the PCB v 1.0. I cut a very simple case out of birch plywood on a laser cutter for transportation and tripod usage. The good news first, it works :)

    The GPs module got a satelite lock within a acceptable time frame and tranmitted the data (NMEA sentences) via bluetooth to my old HTC m7! On the smart phone I used the Bluetooth GPS app ( to mock the GPS service. To do so, one has to enable this option in the develper settings (no root required). After that Osmand was able to use the data to show my current location and record a track. For comparison I also started a recording on my current phone (Xiaomi Mi Mix 2) with GPS, Glonass support.

    As you can see, both phones have their deviations from the actual path. Sometimes the GPS module showed the more accurate position, sometimes the Xiaomi phone. I noticed that the phone always used > 12 satelites where as the module only used 6-8 although both GPS receivers saw around 20 satelites. Maybe the antenna placement of my module was not optimal or the configuration of the u-blox module has to be changed.

    Magenta (Xiaomi Mi Mix 2), Red (GPS Module)

    If one analyses the tracks in more detail it appears to me that the GPS module does less jumps back and forth than the mobile phone and it reports the position always a little more on the right hand side of the acuall track.

    For a first test I am quite happy that it works !

    I will redesign the PCB and case and try out the new version as soon as possible.

View all 6 project logs

  • 1
    Selection of a bluetooth module

    Fist I planned to use a HC-10 clone, the AT10 with bluetooth 4.0 LE for low energy consumption. Unfortunally Bluetooth 4 LE is not suppported by the Bluetooth to GPS app. Furthermore I learned that Android can not connect to 4.0 devices via the usual dialog in the system settings! If understand it correctly one can only connect to low energy devices via a program that is specially made for the 4.0 protocol (like the Bluetooth-Serial-Apps in the Google Play Store).
    I then selected the  readily available and cheap HC-06 module, with bluetooth 2.0 and slave only. It uses more power then the BLE module but at least it works.
    It was easy to import the part and footprint into KiCAD, since it was all available on A minimalistic 5 pins are used in my design: Vcc, GND (2x), TX and RX. Additionally a 1 µF capacitor was added to smooth the power surge while paring.

  • 2
    PCB design and manufacture v1.0

    To make it clear from the beginning I am no electronic engeneer so the PCB design is made as best as I could following the hardware integration advice from the u-blox module documentation and common electronics knowledge. The same applies to the via placement. I have a basic understanding of their function when it comes to connecting the ground planes to avoid noise in signal lines but would not garantee that the placement is the best. The PCB was made at home (see my other projects for a detailed how to). Since I had the troubleshoot a short circuit in my first design, the PCB looks like a 5 year old tried soldering for the first time :)

    To the description of the circuit: I tries to use 0805 parts only because I like that the parts are quite small but sill good to solder by hand. One 18650 battery (protected) is the power source for the module. The u-blox module as well as the HC06 and the TX/RX signal lines work with 3.3V. A LP3981 LDO (200 mA) voltage regulator with a couple of capacitors generates the 3.3V for the circuit.  Here comes the first dirty fix. Id had to use a MCP1703 in TO92 instead of the SOT23 part because I ordered the 5V and not the 3.3V version :/ The datasheet of the M8N module suggests to insert ferrite beats or resistors > 10 Ohm in the TX/RX signal lines, if the traces are longer then 10 mm since they could act as antennas. I choose the 1k ferrite beats which were suggested. In the first design the TX/RX signal lines are also broken out to solder pads for development, the final version will not have these.

    A battery (battery clip for a CR1216, CR1220 or CR1226 battery) supplys the 3V backup power for the GNSS module (real time clock etc.). With this the satelite fix is significally faster than a cold start (see datasheet, 1 sec. with a battery compared to a cold start 26 sec. for GPS/Glonass). The part where I was very uncertain was the antenna circuit and via placement in this region of the PCB. I followed the suggested circiut from the u-blox hardware integration manual for active antennas. My patch antenna (Molex 206640) has a build in LNA so it needs to be powered from V_ANT. Part placement was done so that the signal lines were quite close to the RF_IN pin of the GNSS module. Vias were placed around all parts to garantee a good grounding and hopefully little noice pickup.

  • 3
    u-center software

    The software makes it possible not only to get position information on the computer but also to configure the module and all its functions. The default way to configure a M8-module is per serial 9600 baut 8N1. Once connected the software displays all available satelites, used satelites, position on a map, coordinates, velocity etc. The best way for me to get around with it was to play around with it, but of course there is a very detailed manual for it (It is quite lenghly though).

    Installation on Windows

    Installing on Windows is as easy as clicking the installer and you are done.

    Installation on Linux

    It is also possible to run it under Linux (Ubuntu in my case). First install wine via sudo apt install wine. Then run the u-center_install.exe and follow the dialogs. Once installed check wheather there is a soft-link to your current USBtoSerial device (usually ttyUSB0) in the folder ~/.wine/dosdevices.
    If there is no comX link to your device simply create one like so: ln -s /dev/ttyUSB0 ~/.wine/dosdevices/com3
    To start the u-center.exe start it via wine: sudo wine start /unix ~/.wine/drive_c/Program\ Files\ \(x86\)/u-blox/u-center_v20.01/u-center.exe
    Assuming you installed it in a windows like fashion under c:\Programm Files (x86)\u-blox\. To avoid the sudo command add your user to the dailout group.
    I have tested the software for a while and had no problems with it under Linux.

    Disclaimer: I got the tips for installing under Linux from

View all 4 instructions

Enjoy this project?



Similar Projects

Does this project spark your interest?

Become a member to follow this project and never miss any updates