[stm32] SIM808模块之发短信GPSTCPHTTP研究 – beautifulzzzz

 

 

 

SIM8008是四频模块,全球可用。含有TTL电平接口等接口,能够实现发短信、打电话、GPRS传输数据、GPS等功能。[正版资料请找beautifulzzzz·博客园]

一些细节:

>>  5V供电1A以上(用USB转TTL模块上的电源可以驱动,亲试)
>> 上图黑色的线是VCC,白色线是GND,绿色线是TXD连接单片机或USB转TTL的RXD引脚,橙色的线类推。
>> 其中GPS的天线一般要放在室外,否则无法收到有效信号。
>> 三个LED指示灯: 一个是RING指示灯,一个是网络指示灯,一个PPS指示灯。注开机后,等待约2秒,首先RING指示灯常亮,然后网络指示灯快闪(1秒灭1秒亮),当模块注册到网络后,网络指示灯慢闪(1秒亮,3秒灭)。当GPS定位后,PPS灯会闪烁(1秒亮1秒灭)。

 

1、获得GPS的AT指令:

1 AT+CGPSPWR=1
2 AT+CGPSRST=1
3 AT+CGPSINF=32

其中:

>>  AT+CGPSPWR=1表示开启GPS的POWER
>>  AT+CGPSRST=1表示设置GPS启动模式(COLDHOTWARM),冷启动是第一次启动用。
>>  当前两个命令发送完毕,等表示GPS定位的灯闪烁后发送AT+CGPSINF=32来获取当前的GPS数据,此处的的32表示2^5为模式5,其收取的数据格式为GPRMC格式:(其中state位为A表示收到的是有效数据)

 

 

2、获得电量的AT指令: 

1 AT+CBC

返回指令的意义:(中间一个数据为百分比电量,最后一个数据位电压的mV数)

 

3、发送短信的AT指令:

 

我买的SIM卡是流量卡,所以发送短信的服务是没有的,因此发送上面的命令会不成功。但是,我将自己手机里的4G小卡插在上面后再执行上述命令是可以的!

 

4、发送HTTP的AT指令:

1 AT+CGATT?
2 AT+SAPBR=3,1,CONTYPE,GPRS
3 AT+SAPBR=3,1,APN,CMNET
4 AT+SAPBR=1,1
5 AT+HTTPINIT
6 AT+HTTPPARA=URL,www.baidu.com/img/baidu_logo.gif
7 AT+HTTPACTION=0
8 AT+HTTPREAD
9 AT+HTTPTERM

该一组命令实现用GET从百度下载一个图片:前4个命令是初始化设置,其中当:

AT+HTTPACTION=0            // 执行之后要等一段时间,然后等待返回
OK                                                    // 此时等待以下信息的返回,不要操作其它
+HTTPACTION:0,200,1489                    //  获取成功
AT+HTTPREAD                                    //  读取数据
+HTTPREAD:1489

 

5、下面是一个简单的SIM808的封装驱动代码:

1 #include <stddef.h>
2 #include <stdlib.h>
3
4
5 #include SIM800L.h
6
7
8
9 unsigned char hd[];//
10 unsigned char id[];//id
11 unsigned char tp[];//??
12 unsigned char lat[];//纬度
13 unsigned char lng[];//经度
14 unsigned char cbc[];//电量
15 unsigned char end[];//结尾
16 unsigned char ip[];//ip
17 unsigned char pt[];//port
18
19 u8 Ub[500];
20
21
22 int Sim_ini(void)
23 {
24 USART2_DMASS(ATE1rn,500,100);//将当前的配置信息存储在非易失的存储里,当板重新启动,初始化从上次的开始
25 Delay_MS(500);
26 USART2_DMASS(AT+IFC=0,0rn,500,100); //非流控制
27 Delay_MS(500);
28 USART2_DMASS(AT+CSCLK=0rn,500,100);//不进入休眠状态
29 Delay_MS(500);
30 USART2_DMASS(AT+CFUN=1rn,500,1000); //打开全部功能
31 Delay_MS(500);
32 USART2_DMASS(AT+CBCrn,500,100);//可以充电
33 Delay_MS(500);
34 USART2_DMASS(AT+CPIN?rn,500,100);//查询(有些是否需要密码)
35 Delay_MS(500);
36 USART2_DMASS(AT+CSQrn,500,100);//信号量查询(RSSI)
37 Delay_MS(500);
38 USART2_DMASS(AT+CMGF=1rn,500,100);//选择SMS信息的模式(text模式)
39 Delay_MS(500);
40 USART2_DMASS(AT+CFGRI=0rn,500,100);//表明RI当启动URC(关闭)
41 Delay_MS(500);
42 USART2_DMASS(AT+CIPRXGET=0rn,500,100); //自动从NetWork获得数据
43 Delay_MS(500);
44
45 Delay_MS(10000);
46 USART2_DMASS(AT+CGATT=1rn,5000,1000); //连接GPRS服务器
47 Delay_MS(500);
48 USART2_DMASS(AT+CGREG?rn,5000,100);//查询
49 Delay_MS(500);
50 USART2_DMASS(AT+CGATT?rn,5000,100); //查询
51 Delay_MS(500);
52 USART2_DMASS(AT+CIPSHUTrn,1000,2000); //关闭IP连接
53 Delay_MS(500);
54 USART2_DMASS(AT+CSTT=”CMNET”rn,500,100);//设置名字和密码
55 Delay_MS(500);
56 USART2_DMASS(AT+CIICRrn,500,1000); //bring up wireless connection with GPRS or CSD
57 Delay_MS(500);
58 USART2_DMASS(AT+CIFSRrn,500,1000); //get local IP Address
59 Delay_MS(500);
60 USART2_DMASS(AT+CIPSTATUSrn,500,100);//query current connection status
61 Delay_MS(500);
62 USART2_DMASS(AT+CIPQSEND=0rn,500,100);//select data transmitting mode(0模式,服务器收到数据返回Send OK)
63 Delay_MS(500);
64 USART2_DMASS(AT+CIPSTART=”TCP”,”beautifulzzzz.iask.in”,10000rn,500,100);//start up TCP or UDP Connection
65 Delay_MS(500);
66 USART2_DMASS(NULL,5000,100);//发送一个NULL,用于读取USART2数据
67 Delay_MS(500);
68 //
69
70 return 0;
71 }
72
73
74 void USART2_DMAS(u8* Data)
75 {
76 while(*Data)
77 {
78 USART2_SendByte(*Data++);
79 }
80 }
81
82 int USART2_DMASS(u8* Data,uint16_t BeTime,uint16_t AfTime)
83 {
84 int RecLen=0;
85 u8 Ubyte=0;
86 u8 i;
87
88 USART2_RX_Buffer_Clear();
89 if(Data!=NULL){
90 USART2_DMASendString(Data,strlen((const char *)Data));
91 }
92 //等待BeTime
93 do{
94 BeTime=BeTime-1;
95 Delay_MS(1);
96 }while(!(LookUSART2_GetBuffCount()) && BeTime>0);
97 //检测串口数据
98 do{
99
100 AfTime=AfTime-1;
101 while(LookUSART2_GetBuffCount()){
102 USART2_GetByte(&Ubyte);
103 Ub[RecLen]=Ubyte;
104 RecLen=RecLen+1;
105 }
106
107 Delay_MS(1);
108
109 }while(LookUSART2_GetBuffCount() || AfTime>0);
110
111 USART2_RX_Buffer_Clear();
112
113 //通过串口1显示
114
115 DebugPf(################################rn);
116 DebugPf(####SIM800L Back Data=%drn,RecLen);
117 for(i=0;i<RecLen;i++){
118 DebugPf(%c,Ub[i]);
119 }
120 DebugPf(rn);
121 DebugPf(####SIM800L Back Data Endrn);
122 DebugPf(################################rn);
123
124 return RecLen;
125
126 }
127
128 unsigned char GPSVLD(void)
129 {
130 char *gps;
131 gps=strstr((const char *)Ub,+CGPSINF:);
132 gps+=24;
133 return gps[0];
134 }
135
136 void GPSDATA(void)
137 {
138 char *gps;
139 unsigned char i;
140
141 gps=strstr((const char *)Ub,+CGPSINF:);
142
143 gps+=26;
144 for(i=0;i<9;i++)
145 {
146 lat[i]=gps[i];
147 }
148 // DebugPf(lat);
149
150 gps+=12;
151 for(i=0;i<10;i++)
152 {
153 lng[i]=gps[i];
154 }
155 // DebugPf(lng);
156
157 tp[0]=A;
158 }
159
160 //获取电量,存入cbc[]
161 void CBCDATA()
162 {
163 char *bc;
164 unsigned char i;
165
166 bc=strstr((const char *)Ub,+CBC:);
167
168 bc+=8;
169
170 i=0;
171 do{
172 i++;
173 }while(bc[i]!=,);
174
175 switch (i){
176 case 3:
177 cbc[0]=bc[0];
178 cbc[1]=bc[1];
179 cbc[2]=bc[2];
180 break;
181
182 case 2:
183 cbc[0]=0x30;
184 cbc[1]=bc[0];
185 cbc[2]=bc[1];
186 break;
187
188 case 1:
189 cbc[0]=0x30;
190 cbc[1]=0x30;
191 cbc[2]=bc[0];
192 break;
193
194 default:
195 break;
196 }
197
198 // DebugPf(cbc);
199 }

当想要获取GPS数据时,首先启动GPS:

1 USART2_DMASS(AT+CGPSPWR=1rn,500,100);//开GPS启
2 Delay_MS(2500);
3 USART2_DMASS(AT+CGPSRST=1rn,500,100);//GPS启动模

这里的USART2_DMASS函数是基于STM32上的USART2封装的函数,专门用来向SIM808发送指令,后两个参数是控制数据发送和接收数据的时间(因为大多数AT指令发送后直接可以获取返回,因此该函数包含发送和返回接收)

此外要注意每个命令后面还要加”rn”.

这样因为有了该函数,用单片机发送AT指令就比较方便了:同用串口助手发送AT指令获得GPS数据,当GPS启动并定位成功后执行下面的语句则可以获得实时的GPS数据~

1 USART2_DMASS(AT+CGPSINF=32n,100,100);//查询GPRMC数据(当前GPS手数据)[应该在GPS定位成功后执行]

 

 

 

资料链接: 

 总资料:http://pan.baidu.com/s/1pJ7l9KB

比较有用的几个:

 1、原理图(打板、连线必备、SIM808最小系统啦):http://pan.baidu.com/s/1jGrgLW6 
 2、用户手册(注意事项、大致了解):http://pan.baidu.com/s/1ntuy1r7
 3、AT指令(虽然不是SIM808但是基本通用):http://pan.baidu.com/s/1hq5xZYO

 

 

 

 

 

 

 

本文链接:[stm32] SIM808模块之发短信GPSTCPHTTP研究,转载请注明。



You must enable javascript to see captcha here!

Copyright © All Rights Reserved · Green Hope Theme by Sivan & schiy · Proudly powered by WordPress

无觅相关文章插件,快速提升流量