#include <stddef.h>
#include <stdlib.h>
#include "SIM800L.h"
unsigned char hd[];//头
unsigned char id[];//id
unsigned char tp[];//??
unsigned char lat[];//纬度
unsigned char lng[];//经度
unsigned char cbc[];//电量
unsigned char end[];//结尾
unsigned char ip[];//ip
unsigned char pt[];//port
u8 Ub[500];
int Sim_ini(void)
{
USART2_DMASS("ATE1\r\n",500,100);//将当前的配置信息存储在非易失的存储里,当板重新启动,初始化从上次的开始
Delay_MS(500);
USART2_DMASS("AT+IFC=0,0\r\n",500,100); //非流控制
Delay_MS(500);
USART2_DMASS("AT+CSCLK=0\r\n",500,100);//不进入休眠状态
Delay_MS(500);
USART2_DMASS("AT+CFUN=1\r\n",500,1000); //打开全部功能
Delay_MS(500);
USART2_DMASS("AT+CBC\r\n",500,100);//可以充电
Delay_MS(500);
USART2_DMASS("AT+CPIN?\r\n",500,100);//查询(有些是否需要密码)
Delay_MS(500);
USART2_DMASS("AT+CSQ\r\n",500,100);//信号量查询(RSSI)
Delay_MS(500);
USART2_DMASS("AT+CMGF=1\r\n",500,100);//选择SMS信息的模式(text模式)
Delay_MS(500);
USART2_DMASS("AT+CFGRI=0\r\n",500,100);//表明RI当启动URC(关闭)
Delay_MS(500);
USART2_DMASS("AT+CIPRXGET=0\r\n",500,100); //自动从NetWork获得数据
Delay_MS(500);
Delay_MS(10000);
USART2_DMASS("AT+CGATT=1\r\n",5000,1000); //连接GPRS服务器
Delay_MS(500);
USART2_DMASS("AT+CGREG?\r\n",5000,100);//查询
Delay_MS(500);
USART2_DMASS("AT+CGATT?\r\n",5000,100); //查询
Delay_MS(500);
USART2_DMASS("AT+CIPSHUT\r\n",1000,2000); //关闭IP连接
Delay_MS(500);
USART2_DMASS("AT+CSTT=\"CMNET\"\r\n",500,100);//设置名字和密码
Delay_MS(500);
USART2_DMASS("AT+CIICR\r\n",500,1000); //bring up wireless connection with GPRS or CSD
Delay_MS(500);
USART2_DMASS("AT+CIFSR\r\n",500,1000); //get local IP Address
Delay_MS(500);
USART2_DMASS("AT+CIPSTATUS\r\n",500,100);//query current connection status
Delay_MS(500);
USART2_DMASS("AT+CIPQSEND=0\r\n",500,100);//select data transmitting mode(0模式,服务器收到数据返回Send OK)
Delay_MS(500);
USART2_DMASS("AT+CIPSTART=\"TCP\",\"beautifulzzzz.iask.in\",10000\r\n",500,100);//start up TCP or UDP Connection
Delay_MS(500);
USART2_DMASS(NULL,5000,100);//发送一个NULL,用于读取USART2数据
Delay_MS(500);
//
return 0;
}
void USART2_DMAS(u8* Data)
{
while(*Data)
{
USART2_SendByte(*Data++);
}
}
int USART2_DMASS(u8* Data,uint16_t BeTime,uint16_t AfTime)
{
int RecLen=0;
u8 Ubyte=0;
u8 i;
USART2_RX_Buffer_Clear();
if(Data!=NULL){
USART2_DMASendString(Data,strlen((const char *)Data));
}
//等待BeTime
do{
BeTime=BeTime-1;
Delay_MS(1);
}while(!(LookUSART2_GetBuffCount()) && BeTime>0);
//检测串口数据
do{
AfTime=AfTime-1;
while(LookUSART2_GetBuffCount()){
USART2_GetByte(&Ubyte);
Ub[RecLen]=Ubyte;
RecLen=RecLen+1;
}
Delay_MS(1);
}while(LookUSART2_GetBuffCount() || AfTime>0);
USART2_RX_Buffer_Clear();
//通过串口1显示
DebugPf("################################\r\n");
DebugPf("####SIM800L Back Data=%d\r\n",RecLen);
for(i=0;i<RecLen;i++){
DebugPf("%c",Ub[i]);
}
DebugPf("\r\n");
DebugPf("####SIM800L Back Data End\r\n");
DebugPf("################################\r\n");
return RecLen;
}
unsigned char GPSVLD(void)
{
char *gps;
gps=strstr((const char *)Ub,"+CGPSINF:");
gps+=24;
return gps[0];
}
void GPSDATA(void)
{
char *gps;
unsigned char i;
gps=strstr((const char *)Ub,"+CGPSINF:");
gps+=26;
for(i=0;i<9;i++)
{
lat[i]=gps[i];
}
// DebugPf(lat);
gps+=12;
for(i=0;i<10;i++)
{
lng[i]=gps[i];
}
// DebugPf(lng);
tp[0]='A';
}
//获取电量,存入cbc[]
void CBCDATA()
{
char *bc;
unsigned char i;
bc=strstr((const char *)Ub,"+CBC:");
bc+=8;
i=0;
do{
i++;
}while(bc[i]!=',');
switch (i){
case 3:
cbc[0]=bc[0];
cbc[1]=bc[1];
cbc[2]=bc[2];
break;
case 2:
cbc[0]=0x30;
cbc[1]=bc[0];
cbc[2]=bc[1];
break;
case 1:
cbc[0]=0x30;
cbc[1]=0x30;
cbc[2]=bc[0];
break;
default:
break;
}
// DebugPf(cbc);
}