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. amr转MP3

    using System; using System.Threading; using System.IO; using System.Diagnostics; using System.Securi ...

  2. A multi-faceted language for the Java platform

    最近在研究关于groovy 相关的技术 希望有研究交到研究这方面的朋友 Groovy 最新的地址 http://www.groovy-lang.org/

  3. Android学习 之 ColorStateList按钮文字变色

    首先添加一个ColorStateList资源XML文件,XML文件保存在res/color/button_text.xml: <?xml version="1.0" enco ...

  4. 《UML大战需求分析》阅读笔记4

    流程分析利器之二,状态机图. 状态机图也可以叫状态图,也是用来分析流程的,之前的活动图的主体是事件的行为,而状态机图主要描述的是事件的状态. 开始:实心圆点: 结束:点加环:(与活动图一样) 状态:圆 ...

  5. 51nod 1138 连续整数的和(数学公式)

    1138 连续整数的和 #include <iostream> #include <cmath> #include <cstdio> using namespace ...

  6. WINCE 获取智能设备唯一编号

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...

  7. 使用PouchDB来实现React离线应用

    最近听到有同学在讨论关于数据上传遇到离线的问题,因此在这里介绍一下PouchDB. PouchDB 是一个开源的javascript数据库,他的设计借鉴于Apache CouchDB,我们可以使用他来 ...

  8. HttpWatch的Result中出现Aborted的原因分析[配图]

    我们在使用HttpWatch进行Web调试的过程中有时候会看到非HTTP Status Code(状态码)的值,例如:(Aborted). (Aborted)是HttpWatch中定义的三种非HTTP ...

  9. 浅谈BFC

    Box 是 CSS 布局的对象和基本单位, 直观点来说,就是一个页面是由很多个 Box 组成的.元素的类型和 display属性,决定了这个 Box 的类型. 不同类型的 Box, 会参与不同的 Fo ...

  10. php tools for visual studio 2013 完美 破解 Cracker

    PHP Tools for Visual Studio 2013,这个是 目前在 Visual Studio 2010/2012/2013 中 下最好用的php插件了,  破解 好的 Cracker  ...