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);
}