samedi 23 mai 2020

Module GPS NEO 6MV2

Aujourd'hui, je vous invite à explorer avec moi le module GPS NEO 6MV2, qui permet, grâce au géo-positionnement par satellite, de connaître sa position n'importe où sur la planète.

Ce petit module est accompagné d'une antenne amovible (vous pourriez, au besoin, la remplacer par une antenne plus performante). Vous devrez probablement souder vous-même les quatre connecteurs (VCC, GND, RX et TX).


Puisqu'il comporte un régulateur de tension, on peut l'alimenter aussi bien avec 5 V qu'avec 3,3 V. Cependant, il est conçu pour fonctionner à un niveau logique de 3,3 V (soumettre sa broche RX à un signal de 5 V n'est pas recommandé).

J'ai été surpris de l'autonomie de ce dispositif: dès qu'il est alimenté, il se met à capter les signaux émis par les satellites GPS et émet des informations par communication série (UART) sans même qu'on ait à le lui demander.

Une LED bleue se met à clignoter une fois la position déterminée avec certitude (ce qui peut parfois nécessiter environ une minute, lorsque le module GPS vient tout juste d'être branché).

Test avec un convertisseur USB/TTL

Cette autonomie fait en sorte qu'on peut tester son fonctionnement du module GPS sans le moindre microcontrôleur, en le branchant directement à un simple convertisseur USB/TTL fonctionnant à un niveau logique de 3,3 V.



Les connexions sont les suivantes:

  • VCC du module GPS - broche 3V3 de du convertisseur USB/TTL
  • RX du module GPS - broche TXD du convertisseur USB/TTL
  • TX du module GPS - broche RXD du convertisseur USB/TTL
  • GND du module GPS - broche GND du convertisseur USB/TTL


Il s'agit ensuite d'utiliser un logiciel de communication série (comme, par exemple, le moniteur série de l'IDE Arduino) et d'ajuster sa vitesse de transmission à 9600 bauds (qui est généralement la vitesse par défaut du module GPS lors de l'achat).


Si tout va bien, de nombreuses lignes de données, commençant toutes par le symbole "$" devraient s'afficher à l'écran. Cette information respecte la norme NMEA 0183 de la National Marine Electronics Association.

Installation de la bibliothèque TinyGPS++

Là où un microcontrôleur devient utile, c'est pour le traitement et l'affichage de ces données, de préférence sous une forme plus facile à interpréter par le commun des mortels. Il existe un certain nombre de bibliothèques Arduino spécialement conçues pour cette tâche. J'ai choisi d'installer une des plus connues: TinyGPS++ par Mikal Hart. Comme vous le constaterez dans la suite de cet article, je l'ai testée sans problèmes avec tous mes microcontrôleurs préférés:  Arduino Uno, STM32F103C8 "Blue Pill" ,  ESP8266 et ESP32.

Tests avec un Arduino Uno


L'inconvénient de l'Arduino Uno, c'est que son niveau logique de 5 V n'est pas idéal pour le module GPS, qui est conçu pour communiquer à un niveau de 3,3 V.

Pour éviter de réduire la durée de vie de votre module GPS, il est conseillé d'abaisser à 3,3 V le signal que vous acheminez à son entrée "RX". Puisque la communication n'est pas très rapide, un simple diviseur de tension devrait faire l'affaire.

Personnellement, je ne me suis même pas donné cette peine: pour une utilisation de base, il n'est aucunement utile d'envoyer des informations vers le GPS. Je me suis simplement abstenu de brancher sa broche "RX" à l'Arduino.

Les connexions sont donc:
  • VCC du module GPS - sortie 5 V de l'Arduino
  • RX du module GPS - pas branché
  • TX du module GPS - broche 4 de l'Arduino
  • GND du module GPS - broche GND de l'Arduino


Puisque l'Arduino Uno ne comporte qu'un seul canal de communication série UART (déjà utilisé pour la communication avec l'ordinateur), on utilise la bibliothèque "software serial" pour communiquer en UART avec une broche conventionnelle.  Puisque la vitesse de transmission du module GPS est réglée par défaut à 9600 bauds, il ne s'agit pas d'un inconvénient très sérieux.

Le sketch ci-dessous permet d'afficher dans le moniteur série les données brutes émises par le GPS (il faut cette fois régler la vitesse de transmission du moniteur série à 115200).

-
-

Pour obtenir des données un peu plus facilement interprétables, vous pouvez exécuter l'exemple "DeviceExample" fourni avec la bibliothèque TinyGPS++. La seule modification que vous aurez à faire, c'est régler la constante "GPSBaud" à 9600.


Cette fois, la longitude, la latitude et le temps universel sont clairement affichés. Vous pouvez vérifier que les coordonnées sont correctes en utilisant, par exemple, Google Maps.


Tests avec ESP8266

Tout comme l'Arduino Uno, l'ESP8266 n'a qu'un seul canal de communication UART, déjà utilisé pour la communication avec l'ordinateur. Toutefois, son niveau logique de 3,3 V étant parfaitement adapté à celui du module GPS,  j'ai branché sans craintes la broche RX.



J'ai branché le module GPS à l'ESP8266 de cette façon:
  • VCC du module GPS - broche 3V3 de l'ESP8266
  • RX du module GPS - broche GPIO 5 de l'ESP8266
  • TX du module GPS - broche GPIO 4 de l'ESP8266
  • GND du module GPS - broche GND de l'ESP8266



Le sketch montré plus haut pour l'Arduino fonctionnera avec l'ESP8266 à la condition de remplacer par  5 la valeur de la constante "BrocheTX". La même modification devront être apportés aux exemples accompagnant la bibliothèque TinyGPS++.


Tests du module GPS avec un ESP32


Avec l'ESP32, c'est possible d'utiliser un deuxième canal de communication UART. Nul besoin, donc, de la bibliothèque "software serial".



  • VCC du module GPS - broche 3V3 de l'ESP32
  • RX du module GPS - broche TX2 de l'ESP32
  • TX du module GPS - broche RX2 de l'ESP32
  • GND du module GPS - broche GND de l'ESP32



Voici un sketch qui affiche dans le moniteur série les données brutes reçue du GPS. Avec quelques modifications mineures, les exemples qui accompagnent la bibliothèque TinyGPS++ fonctionnent très bien également.

-
-

Tests de module GPS avec un STM32F103C8  (blue pill)

J'ai finalement fait l'esssai du module GPS avec un module STM32 Blue Pill programmé au moyen d'un convertisseur USB/TTL. Tout comme pour l'ESP32, j'ai pu profiter de la présence d'un deuxième canal UART distinct.


J'ai utilisé ces connexions:


  • GND du convertisseur USB/TTL - G de la Blue Pill
  • RXD du  convertisseur USB/TTL - broche A9 de la Blue Pill
  • TXD du  convertisseur USB/TTL - broche A10 de la Blue Pill
  • 3V3  du  convertisseur USB/TTL - broche 3.3 de la Blue Pil


  • VCC du module GPS - broche 3.3 du la Blue Pill
  • RX du module GPS - broche A2 de la Blue Pill
  • TX du module GPS - broche A3 de la Blue Pill
  • GND du module GPS - broche G de la Blue Pill



Voici le sketch que j'ai utilisé pour reproduire dans le moniteur série les données brutes générées par le module GPS. De la même façon, on peut facilement faire fonctionner la bibliothèque TinyGPS++ avec une carte STM32.

-
-

Lire aussi

Enregistreur GPS basé sur ce module: les paramètres enregistrés sur une carte SD peuvent ensuite être chargés dans Google Maps.

Le module GPS NEO 6MV2 utilisé dans ce projet a été fourni gratuitement par DigitSpace.

Yves Pelletier (TwitterFacebook)

1 commentaire:

  1. encore merci pour cette publication
    pour passer de 5 volts vers 3.3 volts la solution est :
    Resistive divider 560 Ohm with 1000 Ohm to ground
    560 ohm en serie et 1K a la masse
    merci et on attend la suite (mais faut penser a dormir un peu !)

    RépondreSupprimer