Realtid GPS Tracker med integrerad Google Maps (3 / 7 steg)
Steg 3:
PROGRAMVARA
ARDUINO KOD
Detta är koden för ATMega328P mikrokontroller på Arduino styrelsen. Följ anvisningarna på http://www.arduino.cc/ på hur man kompilerar och ladda koden på Arduino styrelsen. Koden använder ytterligare bibliotek. De är:
- NewSoftSerial
- TinyGPS
- PString
Alla 3 bibliotek kan hämtas från http://arduiniana.org/libraries/. Följ instruktionerna för att installera dem.
Följande bör noteras:
Raden: cell.println ("AT+CGDCONT=1,\"IP\",\"isp.cingular\""), upprättar ett PDP (Packet Data Protocol) sammanhang med AT & amp; T's APN (Access Point Name). Om din cellulära leverantör inte AT & amp; T, ersätta strängen "isp.cingular" med lämpliga APN för din cellulära leverantör. I raden: cell.println("AT+SDATACONF=1,\"TCP\",\"your_ip_address\",32000"); Ändra detta till IP-adressen för din TCP Server.
Inkludera NewSoftSerial biblioteket för att skicka seriella kommandon till cellulära modulen.
#include & lt; NewSoftSerial.h & gt;
#include & lt; TinyGPS.h & gt;
#include & lt; PString.h & gt;
#define POWERPIN 4
#define GPSRATE 4800
#define BUFFSIZ 90
char at_buffer [BUFFSIZ];
char buffidx;
int firstTimeInLoop = 1;
int GPRS_registered;
int GPRS_AT_ready;
Kommer att hålla det inkommande tecknet från serieporten.
char incoming_char = 0;
char buffer [60].
PString myString(buffer,sizeof(buffer));
Skapa en "falsk" seriell port. Stift 2 är Rx pin, pin 3 är Tx PIN-koden.
NewSoftSerial cell(2,3);
TinyGPS gps;
int redLedPin = 11;
int blueLedPin = 12;
Funktion att blinka en LED
Parametrar: lPin - Pin av LED
nBlink - nummer av tider till Blink
MS - tid i millisekunder mellan varje blink
void blinkLed (int lPin, int nBlink, int msec) {
om (nBlink) {
för (int jag = 0; & lt; nBlink; i ++) {
digitalWrite (lPin, hög);
Delay(MSEC);
digitalWrite (lPin, låg);
Delay(MSEC);
}
}
}
Funktion för att slå på en LED
Parametrar: lPin - Pin av LED
void onLed (int lPin) {
digitalWrite (lPin, hög);
}
Funktion för att stänga av en LED
Parametrar: lPin - Pin av LED
void offLed (int lPin) {
digitalWrite (lPin, låg);
}
Göra brett systeminitieringen här i denna funktion
void setup()
{
LED stift finns utgångar. Strömbrytare i läge
pinMode (redLedPin, produktionen);
pinMode (blueLedPin, produktionen);
/ * Blinkar Power LED * /
blinkLed(redLedPin,3,500);
Initiera seriella portar för kommunikation.
Serial.BEGIN(4800);
cell.BEGIN(9600);
Låt oss komma igång!
Serial.println ("Start SM5100B meddelande...");
Delay(5000);
/ * För närvarande GPRS är inte registrerad och AT inte är färdiga * /
GPRS_registered = 0;
GPRS_AT_ready = 0;
}
/ * Läser på String från SM5100B GSM/GPRS modul * /
void readATString(void) {
char c;
buffidx = 0; börja på begninning
samtidigt (1) {
IF(cell.available() & gt; 0) {
c=cell.Read();
om (c == -1) {
at_buffer [buffidx] = '\0';
hemkomst.
}
om (c == "\n") {
fortsätta;
}
om ((buffidx == BUFFSIZ - 1) || (c == '\r')) {
at_buffer [buffidx] = '\0';
hemkomst.
}
at_buffer [buffidx ++] = c;
}
}
}
/ * Bearbetar på strängen för att avgöra om GPRS är registrerat och AT är redo * /
void ProcessATString() {
om (strstr (at_buffer, "+ SIND: 8")! = 0) {
GPRS_registered = 0;
Serial.println ("GPRS-nätet finns inte");
}
om (strstr (at_buffer, "+ SIND: 11")! = 0) {
GPRS_registered = 1;
Serial.println ("GPRS registrerade");
blinkLed(redLedPin,5,100);
}
om (strstr (at_buffer, "+ SIND: 4")!= 0 ) {
GPRS_AT_ready = 1;
Serial.println ("GPRS på Ready");
}
}
void loop() {
/ * Om kallas för första gången, loop tills GPRS och AT är redo * /
IF(firstTimeInLoop) {
firstTimeInLoop = 0;
medan (GPRS_registered == 0 || GPRS_AT_ready == 0) {
readATString();
ProcessATString();
}
IF(POWERPIN) {
pinMode (POWERPIN, OUTPUT);
}
pinMode (13, OUTPUT);
Serial.println ("GPS Parser initieras");
digitalWrite (POWERPIN, låg);
Delay(1000);
Serial.println ("ställa in PDP sammanhang");
cell.println("at+CGDCONT=1,\"IP\",\"ISP.cingular\"");
Delay(1000);
Serial.println ("Aktivera PDP sammanhang");
cell.println("at+CGACT=1,1");
Delay(1000);
Serial.println ("Konfigurera TCP-anslutningen till TCP Server");
cell.println("at+SDATACONF=1,\"TCP\",\"\",");
Delay(1000);
Serial.println ("Start TCP Connection\n");
cell.println("at+SDATASTART=1,1");
onLed(redLedPin);
} annat {
While(Serial.available()) {
int c = Serial.read();
om (gps.encode(c)) {
onLed(blueLedPin);
float platt, flon;
osignerade långa fix_age;
GPS.f_get_position (& amp; platt, & amp; flon & amp; fix_age);
IF(fix_age == TinyGPS::GPS_INVALID_AGE)
Serial.println ("ingen fix upptäckts");
annars om (fix_age & gt; 5000)
Serial.println ("Varning: möjlig inaktuella Data!");
annat {
myString.print("AT+SSTRSEND=1,\"");
myString.print ("Lat:");
myString.print(flat,DEC);
myString.print ("Long:");
myString.print(flon,DEC);
myString.print("\"");
Serial.println(myString);
cell.println(myString);
myString.begin();
offLed(blueLedPin);
}
}
}
}
}