External bluetooth GNSS module

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

KiCAD footprint and part for LP3981

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


Version 1.1 of my schematic. You may want to change U5 for something smaller.

x-zip-compressed - 204.11 kB - 08/04/2020 at 19:17


Version 1.0 of my schematic.

x-zip-compressed - 290.83 kB - 07/02/2020 at 18:59


KiCAD footprint and part for HC06

x-zip-compressed - 7.32 kB - 07/02/2020 at 18:59


  • 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

  • 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 2 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