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研究的更多相关文章

  1. sim808模块收发送短信

    一,简介 SIM 808发送短信分text模式和PDU模式.text模式已ascii码发送短信,这种模式比较简单,发送命令AT+CMGF=1就可以发送短信,而PDU模式比较复杂,首先发送命令AT+CM ...

  2. linux下利用GPRS模块发短信、打电话

    一.开发环境     内核版本:linux-3.0    开发板:FL2440(nandflash:K9F1G08 128M)    GPRS模块:SIM900   二.与发短信和拨号相关的 AT 指 ...

  3. html页面通过特殊链接:打电话,发短信,发邮件详细教程

    采用url href链接的方式,实现在Safari  ios,Android 浏览器,webos浏览器,塞班浏览器,IE,Operamini等主流浏览器,进行拨打电话功能. 1. 拨打电话 在电话号码 ...

  4. 移动设备wap手机网页html5通过特殊链接:打电话,发短信,发邮件详细教程

    如果需要在移动浏览器中实现拨打电话,调用sms发短信,发送email等功能,移动手机WEB页面(HTML5)Javascript提供的接口是一个好办法. 采用url href链接的方式,实现在Safa ...

  5. 【319】Python 通过 Twilio 发短信

    参考:python利用twilio模块给自己发短信 参考:使用python实现往手机发短信(基于twilio) 步骤如下: 登录 Twilio 网站注册,貌似需要***,包括用户名.密码.手机号.项目 ...

  6. java实现发短信功能---腾讯云短信

    目录 java实现发短信功能 前言 开发环境 腾讯云 ---短信 代码 效果 结束语 java实现发短信功能 前言 如今发短信功能已经成为互联网公司的标配,本篇文章将一步步实现java发送短信 考察了 ...

  7. 向android模拟器打电话发短信的简单方法

    在开发android应用程序时,有时候需要测试一下向android手机拨打电话发送短信时该应用程序的反应.譬如编写一个广播接收器,来提示用户有短信收到或者处理短信,就需要向该手机发送短信来进行测试.这 ...

  8. iOS开发之调用系统打电话发短信接口以及程序内发短信

    在本篇博客开头呢,先说一下写本篇的博客的原因吧.目前在做一个小项目,要用到在本应用程序内发验证码给其他用户,怎么在应用内发送短信的具体细节想不大起来了,于是就百度了一下,发现也有关于这方面的博客,点进 ...

  9. 打电话,发短信,发邮件,app跳转

    1.打电话 - (IBAction)callPhone1:(id)sender { NSURL *url = [NSURL URLWithString:@"tel://18500441739 ...

随机推荐

  1. eclipse中java项目的build path详解

    BuildPath中只支持加入jar文件,具体方法如下:在eclips里在工程名上右键->build path->contigure bud path->java build pat ...

  2. ie8 iframe去掉边框的属性

    <iframe src="" id="Iframe" height="200" frameborder="0" s ...

  3. web工具网站等

    框架 1.handlebars http://handlebarsjs.com/ 2.http://underscorejs.org/#keys 3.http://stylus-lang.com/ 4 ...

  4. Dojo框架学习笔记<一>

    因为工作刚接触到dojo框架,网上找各种资料,发现很少很少(大多是以前的),只能看官网学习了,英文不行,一边翻译一边学习,还能学点单词...呵呵 我在Apache下运行Dojo demo,初学,希望有 ...

  5. MATLAB的crack安装小曲

    MATLAB的crack安装小曲 本学期要学数学模型和数值分析,需要用MATLAB,便琢磨着装MATLAB.我同专业的同学会装MATLAB的crack,他是数学协会的理事长,平时爱吹牛,问他一个简单的 ...

  6. <Data Structure and Algorithm>排序算法

    排序稳定:如果两个数相同,对他们进行的排序结果为他们的相对顺序不变.例如A={1,2,1,2,1}这里排序之后是A = {1,1,1,2,2} 稳定就是排序后第一个1就是排序前的第一个1,第二个1就是 ...

  7. 『TCP/IP详解——卷一:协议』读书笔记——11

    2013-08-23 20:00:18 第4章 ARP:地址解析协议 4.1 引言 ARP(Address Resolution Protocol,地址解析协议)是获取物理地址的一个TCP/IP协议. ...

  8. struts2 validation.xml 注意点

    1.首先应该注意validation.xml的名字,一定要以Action的类名加“-validation.xml”作为文件名.入LoginAction-validation.xml. 2.LoginA ...

  9. html选中文字 背景/字 变色

    ::-moz-selection { background: #fe4902; color: white; /* Firefox */ } ::selection { background: #fe4 ...

  10. iOS 标题内容待定

    UITableView: UITableViewCell的声明文件.所包含的: UIView控件(contentView,作为其它元素的父控件) -- 容器 两个UILabel控件( textLabe ...