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