SIM868模块+Arduino将位置信息上传到服务器
一、 简要介绍
商家提供的资料中,有将GPS信息发送到OneNet平台的源码,本文就是在此基础上进行修改,将数据发送到自己的服务器中。
二、源码
第一次写博客,格式什么的就别计较了,直接上源码。
GPRS初始化部分
void initGprs()
{
if (sendCommand("AT\r\n", "OK\r\n", 3000, 10) == Success);
else errorLog(1);
if (sendCommand("AT+CGATT?\r\n", "OK\r\n", 3000, 2) == Success);
else errorLog(5);
if (sendCommand("AT+SAPBR=3,1,\"CONTYPE\",\"GPRS\"\r\n", "OK\r\n", 3000, 2) == Success);
else errorLog(7);
if (sendCommand("AT+SAPBR=3,1,\"APN\",\"CMNET\"\r\n", "OK\r\n", 3000, 2) == Success);
else errorLog(8);
if (sendCommand("AT+SAPBR=1,1\r\n", "OK\r\n", 3000, 2) == Success);//这个指令可能返回是error,但也没问题的。所以没加else
if (sendCommand("AT+HTTPINIT\r\n", "OK\r\n", 3000, 2) == Success);//同上
}
说明:指令:AT+SAPBR=1,1类似打开手机的数据连接,第一次打开肯定是成功的,但若是没关闭,再打开就会返回error,所以返回error也是没问题的,同理,AT+HTTPINIT也是,初始化一次就行了。
发送数据到服务器
void postGpsDataToServer(char* lng_temp,char* lat_temp)
{
char send_buf[1000] = {0};
char lngi[15] = {0};
char lati[15] = {0};
dtostrf(longitudeToOnenetFormat(lng_temp), 3, 6, lngi); //转换成字符串输出
dtostrf(latitudeToOnenetFormat(lat_temp), 2, 6, lati); //转换成字符串输出
String lat=lati;
String lng=lngi;
String s1="&id="+id;//设备ID
String s2="&lat="+lat;
String s3="&lng="+lng;
String s=s0+s1+s2+s3;//将数据拼接成URL地址,
char Server[300];
strcpy(Server,s.c_str());//将字符串转换为字符数组
memset(send_buf, 0, 400); //清空
strcpy(send_buf, "AT+HTTPPARA=\"URL\",\"");
strcat(send_buf, Server);
strcat(send_buf, "\"\r\n");
if (sendCommand(send_buf, "OK", 10000, 5) == Success);//10s内发送5次
else errorLog(7);
if (sendCommand("AT+HTTPACTION=0\r\n","OK\r\n\r\n+HTTPACTION\r\n",3000, 1) == Success);
if (sendCommand("AT+HTTPREAD\r\n","OK\r\n",10000, 1) == Success);
}
三、总结
这是第一次写博客,总结记录一下SIM868的使用经验,若有问题,欢迎指导交流,如需源码可以去GitHub