Etape 2: Logiciel a expliqué
Le code de l’Arduino est assez simple. En utilisant un couple de bibliothèques, le GPS et GPRS bouclier devient simple d’utiliser des objets. Cela permet d’économiser beaucoup de temps à analyser des chaînes GPS et de composer de longues chaînes de commande AT + pour le modem. Voici le code sans aucune peluches. Lire la suite par la suite pour une ventilation de ce que tout cela.
#include <TinyGPS++.h> #include <GPRS_Shield_Arduino.h> #include <Wire.h> #include <SoftwareSerial.h> TinyGPSPlus gps; GPRS gsm(7,8,9600); int messageIndex = 0; char message[160]; char phone[16]; char datetime[24]; char latitude[12]; char longitude[12]; void setup() { Serial.begin(9600); pinMode(9, OUTPUT); digitalWrite(9,LOW); delay(100); digitalWrite(9,HIGH); delay(500); digitalWrite(9,LOW); delay(100); pinMode(13, OUTPUT); digitalWrite(13,LOW);} void loop() { while (Serial.available() > 0) { gps.encode(Serial.read());} messageIndex = gsm.isSMSunread(); if (messageIndex > 0) { gsm.readSMS(messageIndex, message, 160, phone, datetime); gsm.deleteSMS(messageIndex); if (String(message) == "xyzzy") { if (gps.location.isValid()) { strcpy(message, "http://www.bing.com/maps?"); strcat(message, "lvl=17&style=r&sp=point."); dtostrf(gps.location.lat(), 1, 6, latitude); strcat(message,latitude); strcat(message,"_"); dtostrf(gps.location.lng(), 1, 6, longitude); strcat(message,longitude); strcat(message,"_Golf+Cart_"); strcat(message,datetime);} else { strcpy(message, "I'm sorry, Dave, I'm afraid I can't do that.");} gsm.sendSMS(phone,message);}}}
Si vous ne savez pas comment faire pour ajouter une bibliothèque pour votre outil de programmation Arduino, la meilleure documentation peut être trouvée sur le site d’Arduino à http://www.arduino.cc/en/guide/libraries#toc4
La bibliothèque TinyGPS ++ peut être trouvée à http://arduiniana.org/libraries/tinygpsplus/.
La bibliothèque GPRS bouclier peut être trouvée à https://github.com/Seeed-Studio/GPRS_SIM900.
Vous devez vous assurer que les câbles de données GPS sont supprimés de l’Arduino avant de télécharger votre croquis. Une fois le programme est téléchargé, mettez hors tension et remplacer les fils de données GPS.
Pour économiser la mémoire, je n’a pas déclaré chaque goupille comme une variable avec un nom de fantaisie, mais mettez les valeurs directement dans le code. Si vous souhaitez utiliser des broches différentes pour votre appareil GPRS, par exemple, vous modifieriez les broches à l’endroit du code où l’objet GPRS est créé. Voici le jeu.
Tout d’abord, nous déclarons nos bibliothèques et variables globales :
#include <TinyGPS++.h>#include <APRS_Shield_Arduino.h>#include <Wire.h>#include <SoftwareSerial.h>
Ensuite, créez une instance de tinygps ++ appelé « gps ».
TinyGPSPlus gps;
Ensuite, créez un objet GPRS, appelé « gsm » sur le port série de logiciel sur les broches 7 et 8 à 9 600 bps
GPRS gsm(7,8,9600);
Enfin, de déclarer tous les indices et les chaînes
int messageIndex = 0; char message[160]; char phone[16]; char datetime[24]; char latitude[12]; char longitude[12];
La boucle de programme d’installation est assez clairsemée, principalement lors de l’initialisation du port série du matériel pour le GPS et puis tournant sur le bouclier GSM par impulsions momentanément broche 9. J’espère que vous vous êtes souvenu de souder le pad de cavalier. Enfin, j’ai désactiver la LED embarquée sur la broche 13 pour enregistrer jus et éventuellement utiliser pour indiquer une erreur à un moment donné dans l’avenir.
void setup() { Serial.begin(9600); pinMode(9, OUTPUT); digitalWrite(9,LOW); delay(100); digitalWrite(9,HIGH); delay(500); digitalWrite(9,LOW); delay(100); pinMode(13, OUTPUT); digitalWrite(13,LOW);}
Ainsi, le loop() est assez directe. À l’aide de la bibliothèque TinyGPS ++ enregistre une cargaison de codage, gère toutes les données GPS l’analyse avec seulement deux lignes de code.
void loop() { while (Serial.available() > 0) { gps.encode(Serial.read());}
Après cela, nous demandons à la bibliothèque de GPRS_SIM9000 de retirer tous les travaux à vérifier les messages non lus en lecture et en supprimant le premier nous trouver avec seulement quatre lignes de code. La fonction readSMS() charge également nos variables globales pour une utilisation ultérieure. Si il n’y a plus d’un message en attente, chacun va obtenir analysé sur les itérations subséquentes de la loop().
messageIndex = gsm.isSMSunread(); if (messageIndex > 0) { gsm.readSMS(messageIndex, message, 160, phone, datetime); gsm.deleteSMS(messageIndex);
Avec le message analysé et globals chargé, les textos entrants est ensuite comparé avec une chaîne spécifique, poursuit uniquement sur une correspondance exacte de notre mot magique. Sans match, nous revenons vers le haut de la boucle et démarrer le chargement de l’objet GPS avec de nouvelles données à nouveau. Modifier le texte à l’intérieur des guillemets si vous souhaitez utiliser un autre mot magique.
if (String(message) == "xyzzy") {
S’il existe une correspondance, nous faisons une autre ligne simple appel à notre objet GPS afin de déterminer si nous avons un bon fix sur notre position.
if (gps.location.isValid()) {
Si donc, nous répondrons avec une URL à Bing maps. Je préfère utiliser Google, mais je n’ai pas déterminé comment placer une épingle sur la carte avec juste un URL. En tout cas, créer l’URL est probablement le plus laid code dans la boucle. Il faut faire certains transtypage pour obtenir le nombre double précision retournées par l’objet GPS dans une chaîne, donc la fonction dtostrf() . Puis c’est la force brute juste concaténation de chaînes.
La fonction strcpy() définie la variable message au début de l’URL, puis la strcat() continue à ajouter des morceaux à la même variable message jusqu'à ce que nous avons fini. C’est le bloc à modifier si vous souhaitez utiliser un service de cartographie différente ou formater votre réponse de manière différente.
strcpy(message, "http://www.bing.com/maps?"); strcat(message, "lvl=17&style=r&sp=point."); dtostrf(gps.location.lat(), 1, 6, latitude); strcat(message,latitude); strcat(message,"_"); dtostrf(gps.location.lng(), 1, 6, longitude); strcat(message,longitude);
Le texte entre guillemets est le label qui apparaîtra sur votre objet de la carte. Il doit avoir le caractère de soulignement environnante et utiliser le caractère « + » en lieu et place des espaces. La ligne suivante ajoute l’horodatage de la demande initiale.
strcat(message,"_Golf+Cart_"); strcat(message,datetime);}
Si nous n’avons pas une difficulté, nous définir le contenu de la variable message à autre chose et envoyez-le le long avec le même nombre qui fait la demande et ferme tous les accolades.
else { strcpy(message, "I'm sorry, Dave, I'm afraid I can't do that.");} gsm.sendSMS(phone,message);}}}
C’est tout. Revenir en haut de la loop() et tout recommencer.
J’espère que c’est ce qui explique le code bien assez que quelqu'un de nouveau à la Arduinosphere peut comprendre et modifiez-le à leurs besoins. Ensuite, installation...