[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 ...
随机推荐
- React阶段开发总结
这次独立编写了React页面主要是数据切换.点击不同的按钮,Ajax请求不同的后台数据.数据驱动表格内容的显示.使用React组件开发. 开发中获得下面的心得: 1.后台给的地址早一点添加路由(写好数 ...
- ORACLE导入、导出命令使用方法
oracle导入.导出命令使用方法: 给用户增加导入数据权限的操作 第一,启动sql*puls 第二,以system/manager登陆 第三,create user 用户名 IDENTIFIED B ...
- UnicodeEncodeError: 'ascii' codec can't encode characters in position问题的解决办法
今天刚开始用ulipad写python代码 代码如下 #! /usr/bin/env python#coding=utf-8a = int(raw_input('请输入一个数:'))if a<1 ...
- vc中获取磁盘IO统计计数
想知道进程读写磁盘的情况,可以获取当前进程或指定进程的IO计数. #include <Windows.h> int get_io_bytes(ULONGLONG * read_bytes, ...
- 编译器工具 Flex Bison for Windows 简单入门例子
最近从事一个系统仿真软件的开发,里面定义了自己的描述性语言MSL, MSL语言经FlexBison转换成C语言,然后用C编译器来编译并计算仿真. 现在领域驱动开发比较热门,有机会定义自己的语言对程序员 ...
- java程序操作Geometry对象
Geometry 空间地理对象,Oracle中存储Geometry对象的字段类型是 MDSYS.SDO_GEOMETRY,在数据库中构建Geometry对象的方法: v_pointarray MDSY ...
- html给div加超链接的方法
1.通过window.open函数 <div onclick="window.open('www.baidu.com')">在新窗口跳转至百度</div> ...
- gulp 配置自动化前端开发
有的人说,grunt已经廉颇老矣,尚能饭否.gulp已经成为了未来的趋势,或许将撼动grunt的地位. 那么就得看看gulp到底优势在哪里,在我最近的使用中发现,我的到了一个结论:“grunt廉颇老矣 ...
- Fix git 提交代码错误
今天用git clone下代码,修改,push提交,发现以下错误 [root@localhost gocache]# git push origin master error: The request ...
- 【NHibernate】列“ReservedWord”不属于表 ReservedWords
NHibernate+FluentNHibernate+MySql 运行时黄页显示下边的异常,项目中找了半天没出现过这个列的关键字. [ArgumentException: 列“ReservedWor ...