Directe GPS-tracking voor Arduino MKR GSM 1400 via SMS
Onderdelen en benodigdheden
| Arduino MKR GSM 1400 | 1 |
Over dit project
Let op: Deze tutorial kan verouderd zijn, ga hier voor een actuele versie.
Het doel van dit project is te laten zien hoe je de cellulaire lokalisatie van de Arduino MKR GSM 1400 kunt gebruiken. We implementeerden een simpele applicatie die de breedte- en lengtegraad van de MKR GSM terugstuurt wanneer een SMS met een beveiligingsletter wordt ontvangen. Het afzender-nummer wordt uit de SMS gehaald en er wordt een antwoord gestuurd met een Google Maps-link gevuld met de coördinaten van de locatieservices van de u-blox module.
Wat je nodig hebt
Het project is gebaseerd op een Arduino MKR GSM 1400, een antenne, een LiPo-batterijpakket, een smartphone en een data-SIM-kaart.
- De Arduino MKR GSM 1400 voert de sketch uit en ondersteunt de GSM-connectiviteit voor de benodigde lokalisatiefuncties;
- Antenne en batterijpakket worden respectievelijk gebruikt voor een goede verbinding met het cellulair datanetwerk en om het apparaat te voeden wanneer geen andere voeding beschikbaar is;
- De smartphone is nodig om de SMS naar de MKR GSM 1400 te sturen en om GPRS-lokalisatie aan te vragen;
- De SIM-kaart is vereist voor toegang tot het datanetwerk en netwerkoperaties;
- PIN, APN en toeganggegevens zijn nodig om verbinding te maken met het datanetwerk.
Hardware-opzet
Dit project vereist niets specials. Sluit de antenne aan op het bord, steek de SIM-kaart erin en sluit de LiPo-batterij aan op de JST-connector.
De LiPo-batterij is optioneel, maar helpt om stroompiekken van de GSM-module op te vangen bij slechte dekking.

Hoe het werkt
Dit project gebruikt de MKRGSM-bibliotheek voor SMS-beheer en cel-gebaseerde georeferentie.
Wanneer een SMS wordt ontvangen, wordt de inhoud gecontroleerd op de letter "L". Alleen dan gaat de sketch door met lokalisatie en SMS-versturing. Op deze manier kan elk nummer de locatie opvragen, maar alleen wie het wachtwoord (de "geheime letter") kent, krijgt een antwoord. De regel die de controle doet is if (c != 76) waarbij 76 de ASCII-code is voor "L". Je kunt de waarde wijzigen om een andere letter te herkennen.
De GSM-module heeft geen GPS-ontvanger, maar de fabrikant heeft een database met de locatie van elke cel in het GSM-netwerk en levert coördinaten voor elke cel-ID. Dit systeem is tamelijk nauwkeurig in stedelijke gebieden waar elke cel een klein gebied dekt. In landelijke gebieden is de dekking per cel veel groter en de locatie grover.
Om de Google Maps-link te maken, gebruiken we een standaard-URL waar we de lengte- en breedtegraad achteraan plakken: "https://www.google.com/maps/place/
De sketch
Gedetailleerde beschrijving van de sketch; de eerste codesectie bevat de benodigde bibliotheken.
MKRGSM bevat alle GSM-verbinding, lokalisatie en SMS-functionaliteiten, beschikbaar via de objecten GSMClient, GPRS, GSM en GSMLocation. SMS-beheer is beschikbaar via GSM_SMS. De header ArduinoLowPower importeert API's voor laag-energiebeheer van de module.
Als je de code downloadt vanuit de Web Editor, vind je een arduino_secrets.h bestand met gevoelige data zoals PIN, APN, gebruiker en wachtwoord. In de Web Editor vul je deze in op het tabblad Secrets.
// include the GSM library
#include
#include "ArduinoLowPower.h"
char PINNUMBER [] = SECRET_PINNUMBER;
char GPRS_APN[] = SECRET_GPRS_APN;
char GPRS_LOGIN [] = SECRET_GPRS_LOGIN;
char GPRS_PASSWORD[] = SECRET_GPRS_PASSWORD;
// initialize the library instances
GPRS gprs;
GSM gsmAccess;
GSM_SMS sms;
GSMLocation location;
De functie measureLocation() vraagt de module om coördinaten via het cellulair netwerk. Als nieuwe coördinaten beschikbaar zijn en aan de nauwkeurigheidsvereisten voldoen, worden ze toegewezen aan de globale variabele; anders wordt 45 seconden lang opnieuw gevraagd. Als er geen geschikte metingen zijn, worden de laatste goede teruggegeven.
// globale variabelen voor locatiebeheer
String GSMlatitude = "0.000000";
String GSMlongitude = "0.000000";
// Deze functie gebruikt de locatie-API's om de coördinaten op te halen en de globale variabele bij te werken als alle vereisten zijn voldaan
void measureLocation() {
unsigned long timeout = millis();
while (millis() - timeout < 45000) {
if (location.available() && location.accuracy() < 300 && location.accuracy() != 0) {
GSMlatitude = String(location.latitude(), 6);
GSMlongitude = String(location.longitude(), 6);
break;
}
}
}
De functie connectNetwork() gebruikt gsmAccess.begin en gprs.attachGPRS om het bord met het datanetwerk te verbinden, met de inloggegevens uit arduino_secrets.h.
// De connectNetwork() functie wordt gebruikt voor de dataverbinding van het bord
void connectNetwork() {
bool status = false;
// Stel globale AT-commando timeout in om te herstellen van uart-communicatie bevriezing tussen samd-module en ublox-module.
gprs.setTimeout(100000);
gsmAccess.setTimeout(100000);
// Start GSM-verbinding
while (status == false) {
if ((gsmAccess.begin(PINNUMBER) == GSM_READY) & (gprs.attachGPRS(GPRS_APN, GPRS_LOGIN, GPRS_PASSWORD) == GPRS_READY)) {
status = true;
} else {
delay(1000);
}
}
}
De setup() initialiseert alle objecten, roept connectNetwork() aan en start de lokalisatiestructuur.
// Codesectie voor initialisatie van dataverbinding en lokalisatie-object
void setup() {
connectNetwork();
location.begin();
}
De loop() implementeert SMS-beheer en locatiemeting. Elke keer dat een nieuwe SMS beschikbaar is, antwoordt het bord met een SMS met de coördinaten. Om het verbruik te verlagen, schakelt het de module uit en gaat in diepe slaap voor 60 seconden.
void loop() {
int c;
String response;
String messager = "";
measureLocation();
unsigned long timeout = millis();
while (millis() - timeout < 5000) {
if (sms.available()) {
// check voor beschikbare SMS
char senderNumber[20] = {"0"};
sms.remoteNumber(senderNumber, 20); // Haal afzender-nummer op
int c = sms.read();
if (c != 76) { // 76 = 'L'
sms.flush();
break;
}
// Bouw bericht met Google Maps link
String txtMsg = "https://www.google.com/maps/place/" + GSMlatitude + "," + GSMlongitude;
// Stuur bericht
sms.beginSMS(senderNumber);
sms.print(txtMsg);
sms.endSMS();
break;
}
}
// Zet GSM-module uit voor laagste stroomverbruik tijdens slaap
gsmAccess.shutdown();
LowPower.sleep(60000); // Diepe slaap voor 60 seconden
connectNetwork(); // Zet module aan en herstel dataverbinding
}
Hoe te gebruiken
Stel de hardware in zoals boven beschreven, personaliseer de sketch met je toeganggegevens, laad de sketch op het bord, en wacht tot de verbinding met het GSM-netwerk tot stand is (kan 30 seconden duren).
Zodra de verbinding staat, stuur een SMS naar het SIM-nummer van de MKR GSM met een "L" als tekst: dit start de lokalisatie en het bord antwoordt met een SMS met de Google Maps-link met de aangevraagde positie.
Code
Arduino
Productieproces
- QR-codes in uw CMMS implementeren: een stapsgewijze handleiding
- Waarde maximaliseren: Strategieën voor verkopen of herbestemmen van gebruikte zware apparatuur
- Waarom Een Iets Groter Ontwerp Innovatie Kan Versnellen En Risico Verminderen
- Uw weerstation integreren met CWOP: Een praktische gids
- De PSoC 6 Pioneer Board met IoT Add-On Shield Beheersen: Een Ontwikkelaarsgids
- Snel 3D-geprinte Delen Labelen met Graveer-vuller – Een Bewezen, Eenvoudige Methode
- Ontdek Hoe Techman Robot Productie Automatiseert: Geavanceerde Cobots & Visiesystemen Webinar
- 7 bewaarde strategieën om PCB-productiekosten te verlagen
- Boerderijoperaties Boosten Met Proactief Onderhoud
- Maximaliseer ROI op uw IoT-investeringen: Een praktische gids
- Waarom Koolstofvezel Bagagesets De Ultieme Upgrade Zijn voor Reizigers