So I have SIM908 test module
(http://www.dfrobot.com/wiki/index.php/GPS/GPRS/GSM_Module_V3.0_(SKU:TEL0051))
That I have been using to gather GPS data. I want to send that data as a JSON via HTTP to my Java Node system. I have the JSON code written, but can’t quite figure out how to send that JSON info via the http. I’d prefer to use AT commands, but so far haven’t been able to produce any results.
Here is my current code. Any pointers to any projects similar to this would be appreciated. I’m finding a lot of HTTP help involving the GET commands, but I believe I need to use the POST commands? Thank you all!
If theres anything else that could be improved, that’s also appreciated. I’ll take any and all advice you can give!
#include <ArduinoJson.h>
double Datatransfer(char *data_buf,char num)//convert the data to the float type
{ //*data_buf:the data array
double temp=0.0; //the number of the right of a decimal point
unsigned char i,j;
if(data_buf[0]=='-')
{
i=1;
//process the data array
while(data_buf[i]!='.')
temp=temp*10+(data_buf[i++]-0x30);
for(j=0;j<num;j++)
temp=temp*10+(data_buf[++i]-0x30);
//convert the int type to the float type
for(j=0;j<num;j++)
temp=temp/10;
//convert to the negative numbe
temp=0-temp;
}
else//for the positive number
{
i=0;
while(data_buf[i]!='.')
temp=temp*10+(data_buf[i++]-0x30);
for(j=0;j<num;j++)
temp=temp*10+(data_buf[++i]-0x30);
for(j=0;j<num;j++)
temp=temp/10 ;
}
return temp;
}
char ID()//Match the ID commands
{
char i=0;
char value[6]={
'
,‘G’,‘P’,‘G’,‘G’,‘A’ };//match the gps protocol
char val[6]={
‘0’,‘0’,‘0’,‘0’,‘0’,‘0’ };
while(1)
{
if(Serial.available())
{
val[i] = Serial.read();//get the data from the serial interface
if(val[i]==value[i]) //Match the protocol
{
i++;
if(i==6)
{
i=0;
return 1;//break out after get the command
}
}
else
i=0;
}
}
}
void comma(char num)//get ‘,’
{
char val;
char count=0;//count the number of ‘,’
while(1)
{
if(Serial.available())
{
val = Serial.read();
if(val==’,’)
count++;
}
if(count==num)//if the command is right, run return
return;
}
}
double latitude()//get latitude
{
char i;
char lat[10]={
‘0’,‘0’,‘0’,‘0’,‘0’,‘0’,‘0’,‘0’,‘0’,‘0’
};
if( ID())
{
comma(2);
while(1)
{
if(Serial.available())
{
lat[i] = Serial.read();
i++;
}
if(i==10)
{
i=0;
return Datatransfer(lat,5)/100.0;
}
}
}
}
void lat_dir()//get dimensions
{
char i=0,val;
if( ID())
{
comma(3);
while(1)
{
if(Serial.available())
{
val = Serial.read();
Serial.write(val);
Serial.println();
i++;
}
if(i==1)
{
i=0;
return;
}
}
}
}
double longitude()//get longitude
{
char i;
char lon[11]={
‘0’,‘0’,‘0’,‘0’,‘0’,‘0’,‘0’,‘0’,‘0’,‘0’,‘0’
};
if( ID())
{
comma(4);
while(1)
{
if(Serial.available())
{
lon[i] = Serial.read();
i++;
}
if(i==11)
{
i=0;
return Datatransfer(lon,5)/100.0,7;
}
}
}
}
void lon_dir()//get direction data
{
char i=0,val;
if( ID())
{
comma(5);
while(1)
{
if(Serial.available())
{
val = Serial.read();
Serial.write(val); //Serial.println(val,BYTE);
Serial.println();
i++;
}
if(i==1)
{
i=0;
return;
}
}
}
}
double altitude()//get altitude data
{
char i,flag=0;
char alt[8]={
‘0’,‘0’,‘0’,‘0’,‘0’,‘0’,‘0’,‘0’
};
if( ID())
{
comma(9);
while(1)
{
if(Serial.available())
{
alt[i] = Serial.read();
if(alt[i]==’,’)
flag=1;
else
i++;
}
if(flag)
{
i=0;
return Datatransfer(alt,1),1;//print altitude data
}
}
}
}
void setup()
{
pinMode(3,OUTPUT);//The default digital driver pins for the GSM and GPS mode
pinMode(4,OUTPUT);
pinMode(5,OUTPUT);
digitalWrite(5,HIGH);
delay(1500);
digitalWrite(5,LOW);
digitalWrite(3,LOW);//Enable GSM mode
digitalWrite(4,HIGH);//Disable GPS mode
delay(2000);
Serial.begin(9600);
delay(5000);//GPS ready
Serial.println(“AT”);
delay(2000);
//turn on GPS power supply
Serial.println(“AT+CGPSPWR=1”);
delay(1000);
//reset GPS in autonomy mode
Serial.println(“AT+CGPSRST=1”);
delay(1000);
digitalWrite(4,LOW);//Enable GPS mode
digitalWrite(3,HIGH);//Disable GSM mode
delay(2000);
Serial.println("$GPGGA statement information: ");
}
void loop()
{
while(1)
{
//Convert to JSON
StaticJsonBuffer<200> jsonBuffer; //reserve memory space
JsonObject& object = jsonBuffer.createObject(); //Create JSON
object[“Device=”]= “GPS 1”;
object[“Latitude=”]= latitude();
//object[“Lat Direction=”]=lat_dir();
object[“Longitude=”]= longitude();
//object[“Long Direction=”]=lon_dir();
object[“Altitude=”]= altitude();
JsonArray& data= object.createNestedArray(“data”);
object.prettyPrintTo(Serial);
delay(30000);
}
}