SIM808 er en modul med Blåtann, GSM og GPS. Man bruker AT-kommandoer via en seriel-port for å kommunisere med den.
 
	Putter man i ett SIM-kort kan man sende/motta SMS, samtaler, koble opp mot GPRS for å sende data osv.
 
	 
 
	Jeg lagde ett lite script til en Arduino for å aktivere GPS, motta koordinater og sende de til en web-server.
 
	Foreløpig sender jeg en GET over HTTP med en enkel NMEA-record.
 
	Blir sikkert å gå over til en UDP-stream eller lignende etter hvert for litt mer fart på dataen.
 
	 
 
	Det er ikke stabilt i det heletatt siden jeg har brukt veldig kort tid på dette (mindre enn 2 arbeisdager fra jeg fikk kortet), men det er en fungerende prototype.
 
	 
 
	NB! SIM808 støtter ikke SSL så man kan ikke sende HTTPS-forespørsler!
 
	Jeg har observert at det finnes en SIM900 modul og kanskje andre som man burde sjekke ut før man bestemmer seg. 
	 
 
#include <SoftwareSerial.h>
#include <String.h>
SoftwareSerial sim808Serial(7, 8);
String gpsData;
unsigned long previousMillis = 0; 
//const long interval = 60000; //Report every 60s
const long interval = 300000; //Report every 5min
void setup()
{
  sim808Serial.begin(9600);               // the GPRS baud rate   
  while (!sim808Serial) {
    ; // wait for serial port to connect. Needed for native USB port only
  }
  //Wait to make shure SIM808 has booted, connected to the network etc.
  delay(30000);
  activateGPS();
  activateGPRS();
}
void loop()
{
  unsigned long currentMillis = millis();
  
  if (sim808Serial.available() > 0) {
    gpsData = sim808Serial.readStringUntil('\n');
  }
  
  if (currentMillis - previousMillis >= interval) {
    previousMillis = currentMillis;
    activateGPRS();
    //Init HTTP
    sim808Serial.println("AT+HTTPINIT");
    //ShowSerialData();
    delay(1000);
    
    //Remove +UGNSINF: with substring and newline with trim
    gpsData = gpsData.substring(10);
    gpsData.trim();
    //Prepare GET
    sim808Serial.println("AT+HTTPPARA=\"URL\",\"http://webserver.no/indexGPS.php?id=SIM808&data="+gpsData+"\"");
    delay(1000);
    
    //Send GET
    sim808Serial.println("AT+HTTPACTION=0");
    delay(10000);
    //Init HTTP
    sim808Serial.println("AT+HTTPTERM");
    delay(1000);
    //I don't know why it turns off...
    activateGPS();
  }
}
void activateGPS() {
  //POWER GPS
  sim808Serial.println("AT+CGNSPWR=1");
  delay(1000);
  
  //Turn on GPS report with 30 sec interval
  sim808Serial.println("AT+CGNSURC=30");
  delay(1000);
}
void activateGPRS() {
  //Init GPRS
  sim808Serial.println("AT+SAPBR=3,1,\"CONTYPE\",\"GPRS\"");
  delay(1000);
  
  sim808Serial.println("AT+SAPBR=3,1,\"APN\",\"telenor\"");
  delay(4000);
  
  sim808Serial.println("AT+SAPBR=1,1");
  delay(4000);
}