[stm32] SIM808模块之发短信\GPS\TCP\HTTP研究
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指令:
AT+CGPSPWR=
AT+CGPSRST=
AT+CGPSINF=
其中:
>> AT+CGPSPWR=1表示开启GPS的POWER
>> AT+CGPSRST=1表示设置GPS启动模式(COLD\HOT\WARM),冷启动是第一次启动用。
>> 当前两个命令发送完毕,等表示GPS定位的灯闪烁后发送AT+CGPSINF=32来获取当前的GPS数据,此处的的32表示2^5为模式5,其收取的数据格式为GPRMC格式:(其中state位为A表示收到的是有效数据)
2、获得电量的AT指令:
AT+CBC
返回指令的意义:(中间一个数据为百分比电量,最后一个数据位电压的mV数)
3、发送短信的AT指令:
我买的SIM卡是流量卡,所以发送短信的服务是没有的,因此发送上面的命令会不成功。但是,我将自己手机里的4G小卡插在上面后再执行上述命令是可以的!
4、发送HTTP的AT指令:
AT+CGATT?
AT+SAPBR=,,"CONTYPE","GPRS"
AT+SAPBR=,,"APN","CMNET"
AT+SAPBR=,
AT+HTTPINIT
AT+HTTPPARA="URL","www.baidu.com/img/baidu_logo.gif"
AT+HTTPACTION=
AT+HTTPREAD
AT+HTTPTERM
该一组命令实现用GET从百度下载一个图片:前4个命令是初始化设置,其中当:
AT+HTTPACTION=0 // 执行之后要等一段时间,然后等待返回
OK // 此时等待以下信息的返回,不要操作其它
+HTTPACTION:0,200,1489 // 获取成功
AT+HTTPREAD // 读取数据
+HTTPREAD:1489
5、下面是一个简单的SIM808的封装驱动代码:
#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[]; int Sim_ini(void)
{
USART2_DMASS("ATE1\r\n",,);//将当前的配置信息存储在非易失的存储里,当板重新启动,初始化从上次的开始
Delay_MS();
USART2_DMASS("AT+IFC=0,0\r\n",,); //非流控制
Delay_MS();
USART2_DMASS("AT+CSCLK=0\r\n",,);//不进入休眠状态
Delay_MS();
USART2_DMASS("AT+CFUN=1\r\n",,); //打开全部功能
Delay_MS();
USART2_DMASS("AT+CBC\r\n",,);//可以充电
Delay_MS();
USART2_DMASS("AT+CPIN?\r\n",,);//查询(有些是否需要密码)
Delay_MS();
USART2_DMASS("AT+CSQ\r\n",,);//信号量查询(RSSI)
Delay_MS();
USART2_DMASS("AT+CMGF=1\r\n",,);//选择SMS信息的模式(text模式)
Delay_MS();
USART2_DMASS("AT+CFGRI=0\r\n",,);//表明RI当启动URC(关闭)
Delay_MS();
USART2_DMASS("AT+CIPRXGET=0\r\n",,); //自动从NetWork获得数据
Delay_MS(); Delay_MS();
USART2_DMASS("AT+CGATT=1\r\n",,); //连接GPRS服务器
Delay_MS();
USART2_DMASS("AT+CGREG?\r\n",,);//查询
Delay_MS();
USART2_DMASS("AT+CGATT?\r\n",,); //查询
Delay_MS();
USART2_DMASS("AT+CIPSHUT\r\n",,); //关闭IP连接
Delay_MS();
USART2_DMASS("AT+CSTT=\"CMNET\"\r\n",,);//设置名字和密码
Delay_MS();
USART2_DMASS("AT+CIICR\r\n",,); //bring up wireless connection with GPRS or CSD
Delay_MS();
USART2_DMASS("AT+CIFSR\r\n",,); //get local IP Address
Delay_MS();
USART2_DMASS("AT+CIPSTATUS\r\n",,);//query current connection status
Delay_MS();
USART2_DMASS("AT+CIPQSEND=0\r\n",,);//select data transmitting mode(0模式,服务器收到数据返回Send OK)
Delay_MS();
USART2_DMASS("AT+CIPSTART=\"TCP\",\"beautifulzzzz.iask.in\",10000\r\n",,);//start up TCP or UDP Connection
Delay_MS();
USART2_DMASS(NULL,,);//发送一个NULL,用于读取USART2数据
Delay_MS();
// return ;
} void USART2_DMAS(u8* Data)
{
while(*Data)
{
USART2_SendByte(*Data++);
}
} int USART2_DMASS(u8* Data,uint16_t BeTime,uint16_t AfTime)
{
int RecLen=;
u8 Ubyte=;
u8 i; USART2_RX_Buffer_Clear();
if(Data!=NULL){
USART2_DMASendString(Data,strlen((const char *)Data));
}
//等待BeTime
do{
BeTime=BeTime-;
Delay_MS();
}while(!(LookUSART2_GetBuffCount()) && BeTime>);
//检测串口数据
do{ AfTime=AfTime-;
while(LookUSART2_GetBuffCount()){
USART2_GetByte(&Ubyte);
Ub[RecLen]=Ubyte;
RecLen=RecLen+;
} Delay_MS(); }while(LookUSART2_GetBuffCount() || AfTime>); USART2_RX_Buffer_Clear(); //通过串口1显示 DebugPf("################################\r\n");
DebugPf("####SIM800L Back Data=%d\r\n",RecLen);
for(i=;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+=;
return gps[];
} void GPSDATA(void)
{
char *gps;
unsigned char i; gps=strstr((const char *)Ub,"+CGPSINF:"); gps+=;
for(i=;i<;i++)
{
lat[i]=gps[i];
}
// DebugPf(lat); gps+=;
for(i=;i<;i++)
{
lng[i]=gps[i];
}
// DebugPf(lng); tp[]='A';
} //获取电量,存入cbc[]
void CBCDATA()
{
char *bc;
unsigned char i; bc=strstr((const char *)Ub,"+CBC:"); bc+=; i=;
do{
i++;
}while(bc[i]!=','); switch (i){
case :
cbc[]=bc[];
cbc[]=bc[];
cbc[]=bc[];
break; case :
cbc[]=0x30;
cbc[]=bc[];
cbc[]=bc[];
break; case :
cbc[]=0x30;
cbc[]=0x30;
cbc[]=bc[];
break; default:
break;
} // DebugPf(cbc);
}
当想要获取GPS数据时,首先启动GPS:
USART2_DMASS("AT+CGPSPWR=1\r\n",,);//开GPS启
Delay_MS();
USART2_DMASS("AT+CGPSRST=1\r\n",,);//GPS启动模
这里的USART2_DMASS函数是基于STM32上的USART2封装的函数,专门用来向SIM808发送指令,后两个参数是控制数据发送和接收数据的时间(因为大多数AT指令发送后直接可以获取返回,因此该函数包含发送和返回接收)
此外要注意每个命令后面还要加"\r\n".
这样因为有了该函数,用单片机发送AT指令就比较方便了:同用串口助手发送AT指令获得GPS数据,当GPS启动并定位成功后执行下面的语句则可以获得实时的GPS数据~
USART2_DMASS("AT+CGPSINF=32\n",,);//查询GPRMC数据(当前GPS手数据)[应该在GPS定位成功后执行]
资料链接:
总资料:http://pan.baidu.com/s/1sjTg5q9
比较有用的几个:
1、原理图(打板、连线必备、SIM808最小系统啦):http://pan.baidu.com/s/1kTRWJpd
2、用户手册(注意事项、大致了解):http://pan.baidu.com/s/1nuh1Fi5
3、AT指令(虽然不是SIM808但是基本通用):http://pan.baidu.com/s/1pJW8uPd
[stm32] SIM808模块之发短信\GPS\TCP\HTTP研究的更多相关文章
- sim808模块收发送短信
一,简介 SIM 808发送短信分text模式和PDU模式.text模式已ascii码发送短信,这种模式比较简单,发送命令AT+CMGF=1就可以发送短信,而PDU模式比较复杂,首先发送命令AT+CM ...
- linux下利用GPRS模块发短信、打电话
一.开发环境 内核版本:linux-3.0 开发板:FL2440(nandflash:K9F1G08 128M) GPRS模块:SIM900 二.与发短信和拨号相关的 AT 指 ...
- html页面通过特殊链接:打电话,发短信,发邮件详细教程
采用url href链接的方式,实现在Safari ios,Android 浏览器,webos浏览器,塞班浏览器,IE,Operamini等主流浏览器,进行拨打电话功能. 1. 拨打电话 在电话号码 ...
- 移动设备wap手机网页html5通过特殊链接:打电话,发短信,发邮件详细教程
如果需要在移动浏览器中实现拨打电话,调用sms发短信,发送email等功能,移动手机WEB页面(HTML5)Javascript提供的接口是一个好办法. 采用url href链接的方式,实现在Safa ...
- 【319】Python 通过 Twilio 发短信
参考:python利用twilio模块给自己发短信 参考:使用python实现往手机发短信(基于twilio) 步骤如下: 登录 Twilio 网站注册,貌似需要***,包括用户名.密码.手机号.项目 ...
- java实现发短信功能---腾讯云短信
目录 java实现发短信功能 前言 开发环境 腾讯云 ---短信 代码 效果 结束语 java实现发短信功能 前言 如今发短信功能已经成为互联网公司的标配,本篇文章将一步步实现java发送短信 考察了 ...
- 向android模拟器打电话发短信的简单方法
在开发android应用程序时,有时候需要测试一下向android手机拨打电话发送短信时该应用程序的反应.譬如编写一个广播接收器,来提示用户有短信收到或者处理短信,就需要向该手机发送短信来进行测试.这 ...
- iOS开发之调用系统打电话发短信接口以及程序内发短信
在本篇博客开头呢,先说一下写本篇的博客的原因吧.目前在做一个小项目,要用到在本应用程序内发验证码给其他用户,怎么在应用内发送短信的具体细节想不大起来了,于是就百度了一下,发现也有关于这方面的博客,点进 ...
- 打电话,发短信,发邮件,app跳转
1.打电话 - (IBAction)callPhone1:(id)sender { NSURL *url = [NSURL URLWithString:@"tel://18500441739 ...
随机推荐
- eclipse中java项目的build path详解
BuildPath中只支持加入jar文件,具体方法如下:在eclips里在工程名上右键->build path->contigure bud path->java build pat ...
- ie8 iframe去掉边框的属性
<iframe src="" id="Iframe" height="200" frameborder="0" s ...
- web工具网站等
框架 1.handlebars http://handlebarsjs.com/ 2.http://underscorejs.org/#keys 3.http://stylus-lang.com/ 4 ...
- Dojo框架学习笔记<一>
因为工作刚接触到dojo框架,网上找各种资料,发现很少很少(大多是以前的),只能看官网学习了,英文不行,一边翻译一边学习,还能学点单词...呵呵 我在Apache下运行Dojo demo,初学,希望有 ...
- MATLAB的crack安装小曲
MATLAB的crack安装小曲 本学期要学数学模型和数值分析,需要用MATLAB,便琢磨着装MATLAB.我同专业的同学会装MATLAB的crack,他是数学协会的理事长,平时爱吹牛,问他一个简单的 ...
- <Data Structure and Algorithm>排序算法
排序稳定:如果两个数相同,对他们进行的排序结果为他们的相对顺序不变.例如A={1,2,1,2,1}这里排序之后是A = {1,1,1,2,2} 稳定就是排序后第一个1就是排序前的第一个1,第二个1就是 ...
- 『TCP/IP详解——卷一:协议』读书笔记——11
2013-08-23 20:00:18 第4章 ARP:地址解析协议 4.1 引言 ARP(Address Resolution Protocol,地址解析协议)是获取物理地址的一个TCP/IP协议. ...
- struts2 validation.xml 注意点
1.首先应该注意validation.xml的名字,一定要以Action的类名加“-validation.xml”作为文件名.入LoginAction-validation.xml. 2.LoginA ...
- html选中文字 背景/字 变色
::-moz-selection { background: #fe4902; color: white; /* Firefox */ } ::selection { background: #fe4 ...
- iOS 标题内容待定
UITableView: UITableViewCell的声明文件.所包含的: UIView控件(contentView,作为其它元素的父控件) -- 容器 两个UILabel控件( textLabe ...