Un GPS connecté à l'IoT avec MQTT (Message Queuing Telemetry Transport) est une solution permettant d'obtenir les coordonnées géographiques d'un objet (latitude, longitude, vitesse, etc.) et de transmettre ces données en temps réel via le protocole MQTT à un serveur ou une plateforme IoT.
Ce système est particulièrement utile pour le suivi d'actifs (asset tracking), la gestion de flottes de véhicules, ou des projets de géolocalisation en temps réel.
1- Acquisition des données GPS :
Un module GPS (par exemple, Neo-6M ou Ublox) capte les signaux des satellites et calcule les coordonnées géographiques.
2- Traitement des données :
Les données GPS sont lues par un microcontrôleur (Arduino, ESP32, Raspberry Pi, etc.).
Ces données peuvent être formatées (JSON, CSV) pour être envoyées via MQTT.
3- Transmission via MQTT :
Le microcontrôleur, équipé d'un module de communication (Wi-Fi, GSM, ou LPWAN), publie les données GPS à un broker MQTT (comme Mosquitto ou AWS IoT Core).
MQTT utilise un système de "topics" pour organiser les messages. Par exemple :
Topic : vehicle/tracker/123
Message : { "latitude": 48.8566, "longitude": 2.3522, "speed": 10.5 }
4- Traitement sur la plateforme IoT :
Les données reçues par le broker MQTT sont affichées en temps réel, stockées pour analyse, ou utilisées pour déclencher des actions automatisées.
5- Visualisation et suivi :
Une interface utilisateur (application mobile ou tableau de bord) affiche les données sur une carte ou un graphique.
Suivi de véhicules : Localisation en temps réel des voitures, camions, ou flottes.
Gestion de marchandises : Suivi des conteneurs ou colis pendant le transport.
Surveillance des personnes : Localisation en temps réel pour la sécurité.
Projets personnels : Robots mobiles avec géolocalisation.
Construire un GPS connecté à l'IoT avec un ESP32, un module GPS NEO-6M, et le protocole MQTT est un projet fascinant. Voici un guide complet.
ESP32 :
Microcontrôleur avec connectivité Wi-Fi.
Module GPS NEO-6M :
Pour obtenir les données de localisation. Il eçoit les signaux satellites et calcule la position.
Afficheur SSD1306
Pour afficher les données de localisation localement.
Câbles Dupont :
Pour les connexions entre les composants.
Broker MQTT :
Serveur qui gère les messages (ex. Mosquitto ou un service cloud comme AWS IoT).
1- ESP32 :
Connecté à une source d'alimentation.
Configuré pour envoyer des données GPS au broker MQTT via Wi-Fi.
2- Module GPS NEO-6M vers ESP32 :
VCC → 3.3V ou 5V (selon le module).
GND → GND de l'ESP32.
TX → RX (GPIO17 par exemple).
RX → TX (GPIO6 par exemple).
VCC → 3.3V (ESP32).
GND → GND.
SCL → GPIO22 (I2C Clock).
SDA → GPIO21 (I2C Data).
Voici un exemple de code pour envoyer les données GPS via MQTT :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 |
from machine import UART, Pin, SPI,I2C from micropyGPS import MicropyGPS import utime import ssd1306 import network import nmea from umqtt.robust import MQTTClient ubidotsToken = "***********************" clientID = "RANDOM-ALPHA-NUMERIC-NAME_OR_IMEI DEVICE ID" client = MQTTClient("clientID", "industrial.api.ubidots.com", 1883, user = ubidotsToken, password = ubidotsToken) WiFi_SSID = "************" WiFi_PASS = "************" def do_connect(): wlan = network.WLAN(network.STA_IF) wlan.active(True) if not wlan.isconnected(): print('connecting to network...') wlan.connect(WiFi_SSID, WiFi_PASS) while not wlan.isconnected(): pass print('network config:', wlan.ifconfig()) do_connect() i2c = I2C(-1, scl=Pin(22), sda=Pin(21)) oled_width = 128 oled_height = 64 oled = ssd1306.SSD1306_I2C(oled_width, oled_height, i2c) oled.text('Carte', 0, 0) # Afficher les deux mots '' oled.text('ESP32', 0, 10) oled.show() uart = UART(2, 9600) now = utime.ticks_ms() sentence = '' state = '' my_nmea = nmea.nmea(debug=1) while 1: while uart.any(): b = uart.read() my_nmea.parse(b) if utime.ticks_diff(utime.ticks_ms(), now) > 5000: now = utime.ticks_ms() print('{} {}'.format( my_nmea.latitude, my_nmea.longitude)) client.connect() lat = my_nmea.latitude lng = my_nmea.longitude var = 1.5 msg = b'{"location": {"value":%s, "context":{"lat":%s, "lng":%s}}}' % (var, lat, lng) print(msg) client.publish(b"/v1.6/devices/ESP32", msg)#envoi de la position du GPS vers le cloud Ubidots IoT oled.fill(0) y = 0 dy = 10 oled.text("Lat:{}".format(my_nmea.latitude), 0, y) y += dy oled.text("Lon:{}".format(my_nmea.longitude), 0, y) oled.show() |
La robotique éducative joue un rôle important dans l'éducation des enfants et des jeunes en les aidant à acquérir des compétences en science et technologie.
Dans ce cadre notre site web représente une excellente ressource pour les parents, les enseignants et les enfants qui souhaitent découvrir la robotique.
Zaouiet Kontech-Jemmel-Monastir-Tunisie
+216 92 886 231
medaliprof@gmail.com
Site robotique réalisé par Mohamed Ali-Prof Info