- Composants requis
- Module GPS
- Broche de STM32F103C8
- Schéma de circuit et connexions
- Programmation STM32F103C8 pour l'interfaçage du module GPS
- Recherche de la latitude et de la longitude avec le GPS et le STM32
GPS signifie Global Positioning System et est utilisé pour détecter la latitude et la longitude de n'importe quel endroit sur la Terre, avec l'heure UTC exacte (temps universel coordonné). Cet appareil reçoit les coordonnées du satellite pour chaque seconde, avec heure et date. Le GPS offre une grande précision et fournit également d'autres données en plus des coordonnées de position.
Nous savons tous que le GPS est un appareil très utile et très couramment utilisé dans les téléphones mobiles et autres appareils portables pour suivre l'emplacement. Il a une très large gamme d'applications dans tous les domaines, de l'appel du taxi à votre domicile au suivi de l'altitude des avions. Voici quelques projets utiles liés au GPS, que nous avons construits précédemment:
- Système de suivi des véhicules
- Horloge GPS
- Système d'alerte de détection d'accident
- Tutoriel d'interfaçage du module GPS Raspberry Pi
- Interfaçage du module GPS avec le microcontrôleur PIC
Ici, dans ce tutoriel, nous allons interfacer un module GPS avec le microcontrôleur STM32F103C8 pour trouver les coordonnées de l'emplacement et les afficher sur un écran LCD 16x2.
Composants requis
- Microcontrôleur STM32F103C8
- Module GPS
- Écran LCD 16x2
- Planche à pain
- Connexion des fils
Module GPS
C'est un module GPS GY-NEO6MV2 XM37-1612. Ce module GPS a quatre broches + 5V, GND, TXD et RXD. Il communique à l'aide des broches série et peut être facilement interfacé avec le port série du STM32F103C8.
Le module GPS envoie les données au format NMEA (voir la capture d'écran ci-dessous). Le format NMEA se compose de plusieurs phrases, dans lesquelles nous n'avons besoin que d'une seule phrase. Cette phrase commence à partir de $ GPGGA et contient les coordonnées, l'heure et d'autres informations utiles. Ce GPGGA est appelé Global Positioning System Fix Data. En savoir plus sur la lecture des données GPS et de ses chaînes ici.
Voici un exemple de chaîne $ GPGGA, avec sa description:
$ GPGGA, 104534.000,7791.0381, N, 06727.4434, E, 1,08,0.9,510,4, M, 43,9, M`` * 47
$ GPGGA, HHMMSS.SSS, latitude, N, longitude, E, FQ, NOS, HDP, altitude, M, hauteur, M, données de somme de contrôle
Mais ici dans ce tutoriel, nous utilisons une bibliothèque GPS TinyGPSPlus qui extrait toutes les informations requises de la phrase NMEA, et il nous suffit d'écrire une simple ligne de code pour obtenir la latitude et la longitude, que nous verrons plus loin dans le tutoriel.
Broche de STM32F103C8
Les ports de communication série USART STM32F103C8 (BLUE PILL) sont indiqués dans l'image de brochage ci-dessous. Ceux-ci sont de couleur bleue ayant (PA9-TX1, PA10-RX1, PA2-TX2, PA3-RX2, PB10-TX3, PB11-RX3). Il dispose de trois de ces canaux de communication.
Schéma de circuit et connexions
Connexions du circuit entre le module GPS et le STM32F103C8
Module GPS |
STM32F103C8 |
RXD |
PA9 (TX1) |
TXD |
PA10 (RX1) |
+ 5V |
+ 5V |
GND |
GND |
Connexions entre LCD 16x2 et STM32F103C8
Broche LCD Non |
Nom de la broche LCD |
Nom de broche STM32 |
1 |
Sol (Gnd) |
Terre (G) |
2 |
VCC |
5V |
3 |
VEE |
Broche du centre du potentiomètre |
4 |
Inscription Sélectionner (RS) |
PB11 |
5 |
Lecture / écriture (RW) |
Terre (G) |
6 |
Activer (EN) |
PB10 |
sept |
Bit de données 0 (DB0) |
Pas de connexion (NC) |
8 |
Bit de données 1 (DB1) |
Pas de connexion (NC) |
9 |
Bit de données 2 (DB2) |
Pas de connexion (NC) |
dix |
Bit de données 3 (DB3) |
Pas de connexion (NC) |
11 |
Bit de données 4 (DB4) |
PB0 |
12 |
Bit de données 5 (DB5) |
PB1 |
13 |
Bit de données 6 (DB6) |
PC13 |
14 |
Bit de données 7 (DB7) |
PC14 |
15 |
LED positive |
5V |
16 |
LED négative |
Terre (G) |
L'ensemble de la configuration ressemblera à ci-dessous:
Programmation STM32F103C8 pour l'interfaçage du module GPS
Un programme complet de localisation à l'aide du module GPS utilisant STM32 est donné à la fin de ce projet. STM32F103C8 peut être programmé en utilisant Arduino IDE en le connectant simplement au PC via le port USB. Assurez-vous de retirer les broches TX et RX lors du téléchargement du code et connectez-le après le téléchargement.
Pour interfacer le GPS avec STM32, nous devons d'abord télécharger une bibliothèque à partir du lien GitHub TinyGPSPlus. Après avoir téléchargé la bibliothèque, elle peut être incluse dans l'IDE Arduino par Sketch -> Inclure la bibliothèque -> Ajouter une bibliothèque.zip. La même bibliothèque peut être utilisée pour interfacer le GPS avec Arduino.
Alors commencez par inclure les fichiers de bibliothèque nécessaires et définissez les broches pour LCD 16x2:
#comprendre
Créez ensuite un objet nommé gps de la classe TinyGPSPlus.
GPS TinyGPSPlus;
Ensuite, dans la configuration d' annulation , commencez la communication série avec le module GPS à l'aide de Serial1.begin (9600). Serial1 est utilisé comme port Série 1 (Pins-PA9, PA10) du STM32F103C8.
Serial1.begin (9600);
Ensuite, affichez le message de bienvenue pendant un certain temps.
lcd.begin (16,2); lcd.print ("Circuit Digest"); lcd.setCursor (0,1); lcd.print ("STM32 avec GPS"); retard (4000); lcd.clear ();
Ensuite, dans la boucle vide (), nous recevons la latitude et la longitude du GPS et vérifions si les données reçues sont valides ou non et affichons les informations sur le moniteur série et l'écran LCD.
Vérifier si les données de localisation disponibles sont valides ou non
loc_valid = gps.location.isValid ();
Reçoit les données de latitude
lat_val = gps.location.lat ();
Reçoit les données de longitude
lng_val = gps.location.lng ();
Si des données non valides sont reçues, il affiche «*****» sur le moniteur série et affiche «en attente» sur l'écran LCD.
if (! loc_valid) { lcd.print ("En attente"); Serial.print ("Latitude:"); Serial.println ("*****"); Serial.print ("Longitude:"); Serial.println ("*****"); retard (4000); lcd.clear (); }
Si des données valides sont reçues, la latitude et la longitude sont affichées sur le moniteur série ainsi que sur l'écran LCD.
lcd.clear (); Serial.println ("LECTURE GPS:"); Serial.print ("Latitude:"); Serial.println (lat_val, 6); lcd.setCursor (0,0); lcd.print ("LAT:"); lcd.print (lat_val, 6); Serial.print ("Longitude:"); Serial.println (lng_val, 6); lcd.setCursor (0,1); lcd.print ("LONG:"); lcd.print (lng_val, 6); retard (4000);
La fonction suivante fournit le délai pour lire les données. Il continue à rechercher les données sur le port série.
static void GPSDelay (ms long non signé) { début long non signé = millis (); do { while (Serial1.available ()) gps.encode (Serial1.read ()); } while (millis () - début <ms); }
Recherche de la latitude et de la longitude avec le GPS et le STM32
Après avoir construit la configuration et téléchargé le code, assurez-vous de placer le module GPS dans une zone ouverte pour recevoir le signal rapidement. Parfois, la réception du signal prend quelques minutes, alors attendez un peu. La LED commencera à clignoter dans le module GPS lorsqu'il commencera à recevoir le signal et les coordonnées de l'emplacement seront affichées sur l'écran LCD.
Vous pouvez vérifier la latitude et la longitude de l'emplacement à l'aide de Google Maps. Accédez simplement à Google Maps avec le GPS activé et cliquez sur le point bleu. Il affichera l'adresse avec la latitude et la longitude comme indiqué dans l'image ci-dessous
Le code complet et la vidéo de démonstration sont donnés ci-dessous.