SIM800

一、sim800c的使用

使用到的功能包括:GSM短信收发,GPRS数据传输,TCP/IP协议数据传输,LBS信息的定位,http的java接口调用,FTP的无线升级,模块BT的串口协议传输。主要是网络传输方面的使用,其对模块的外围器件的使用倒是涉及不多。

1、短信接收发功能指令:
“AT+CMGF=1\r” //配置短信形式
“AT+CMGL=\”ALL\”\r” //读取所有短信
“AT+CSCS=\”GSM\”\r” //进行CSCS设置
“AT+CMGS=” //后面添加信息中心短信号码
“AT+CMGD=” //进行短信删除
C语言书写解释:
@1、每一个AT指令后面都要以\r或者是\r\n结束。这是AT标准AT指令集
里面规定的,没有什么疑问。
@2、AT指令后面如果是要跟字符串的东西,例如AT+CSCS=”GSM”,这句指
令,因为我们发过去给simcom模块的是字符串,最后传入的形式是:“AT+CSCS=”GSM””,因为里面有多个字符串标识(“”),导致模块识别不了,然而里面的字符串不是真的字符串结束标识符,而是我们实际要传入的值,所以我们要把这个标识符转义成字符就可以,让其不代表其他意思,加上\转义字符就可以了例如上面:”AT+CSCS=\”GSM\”\r”。
@3、AT+CMGF=mode:
mode:
0 PDU模式
1 TXT文本模式(经常用的)
@4、AT+CMGL=”ALL”
标识列出所有的信息,包括已读和未读的。或者是
AT+CMGL=“REC UNREAD”
会列举出所有未读的消息
AT+CMGL=“REC READ”
会列举出已读的消息。
后面列举的形式:包括短信状态(已读 未读),短信Num,消息发送方号码,消息发送时间,最后面就是紧跟着信息的内容了。
@5、AT+CSCS=”GSM”
设置信息服务发送模块,其实这个可以不设置也可以发送,默认的就是这个模式。
@6、AT+CMGS= 号码
这个命令执行完之后,就像其他传输一样会出现一个‘>’符号,后面就是你要写入的信息内容。注意这个结束有点奇怪。要在短信内容后面添加0x1A 0x1D才可以结束。对应的是Ctrl+Z的按键的ASCII码。如果不加的话,短信是永远不会结束的。
@7、AT+CMGD=NUM
NUM:就是短信的***,当短消息发过来,其短信的***就固定了,短信息对应的***不会随着你删除一条短信,其他短信息***随着改动。
@8、AT+CMGR=NUM
NUM:同上,就是短信息的***,固定读取这个***的短信内容。
以上的用法利用好了,足矣做一个短信收发的小功能了。前提要把GSM基本的功能配齐全,例如AT+CFUN=1,AT+CREG=1检测GSM入网成功才可以,其他标准用法就不一一说了,看看AT指令集应该都会用了。

2、GPRS数据传输

这个数据2G的数据流量功能,与GSM网络还不一样,大家千万不要认为这2个东西走的是一个网络通道奥.
1
“AT+CGATT=1\r”
“AT+CGATT?\r”
@1、AT+CGATT=NUM
NUM:0表示与当前GPRS网络分离,1表示要附着现有检测到的GPRS网络。
@2、AT+CGATT?
表示检测当前的GPRS网络附着状态,成功返回1 失败返回0
当然以上的成功条件是sim卡已经插入,并且射频天线正常,sim卡开通了数据流量,否则会无法附着GPRS网络奥。
当然上面的一步就是为了下面的TCP/IP服务做准备的。

3、TCP/IP数据流量传输服务

模块已经内置了TCP/IP协议栈,很强大
“AT+CSTT=\”” //设置APN账号,用户名,密码(后面如果说sim卡没有设置用户和密码就不需要填写)
“AT+CIICR\r” //唤醒无线连接 进行连接用GPRS或者CSD
“AT+CIFSR\r” //获取联网后 本地分配的IP地址
“AT+CIPQSEND=0\r” //设置发送数据的返回形式
“AT+CMUX=0\r” //说明是基础模式 没有进行复用
“AT+CIPHEAD=0\r” //去除IP头 内容
“AT+SAPBR=3,1,\”Contype\”,\”GPRS\”\r”//基于IP的应用程序的承载设置
“AT+SAPBR=3,1,\”APN\”,\”” //设置网络承载的APN服务
“AT+CIPSTART=\”TCP\”,\”” //进行网络传输服务的选择
“AT+CIPSEND=length” //进行数据的传输写入
“AT+CIPCLOSE=1\r ” //关闭TCP/IP连接通道
以上顺序不要有颠倒,否则其中配置会报错。
@1、AT+CSTT=
这个是来配置sim卡运营商的APN账号,用户名和密码
如果用户名和密码没有设置可以不用写,只写一个APN就可以
@2、AT+CIICR
这个是开启无线射频模块的指令。
@3、AT+CIFSR
这个是在进行入网后,根据运营商网络获取基站分配给终端的IP地址。
@4、AT+CIPQSEND=mode
mode: 0 返回形式是 send ok .
1 返回形式是 send ok accept
@5、AT+CMUX=NUM
NUM: 这个是设置串口复用还是不复用,
0:串口不复用 只是模块的基本功能
1 : 串口复用,协议遵循GSM0710协议,详见协议描述,下篇讲解。
@6、AT+CIPHEAD=0
去除IP头显示,设置为1,会显示发送方的IP地址信息。
@7、AT+SAPBR=3,1,”Contype”,”GPRS”
设置无线连接数据的承载形式,为GPRS,也可以设置成CSD,但一般设置都是GPRS.
@7、AT+SAPBR=3,1,”APN”,“运营商的APN名称”
这一步很关键,这是你的数据最终是由哪家运营商接入的公网设置。例如:移动2G:CMMTM/CMNET/CMIOT等,联通2G:UNINET UNWAP等,沃达丰网络2G例如:internet.gdsp/ppinternetd.gdsp/spe.inetd3.gdsp.当然这个沃达丰是国际运营商,世界好多国家也都有支持和合作,再进行国际业务开拓时候,这个APN是一定要修改的,要根据使用的沃达丰的sim卡类型来修改。APN有沃达丰人员提供。
@8、”AT+CIPSTART=”TCP”,”IP地址”
这个就是描述了我们终端模块使用的是什么协议,还有要连接的服务端的IP地址,也可以是域名。里面继承了DNS服务,可以转换的。
支持填写UDP/TCP.
@9、AT+CIPSEND=length
这个命令是描述你要本次发向服务器的数据量多少,以字节为单位。
等这条命令执行完成之后,会出现‘>’这个符号,等你输入的字符数据长度等于你上一步要发送的数据长度时候,他会自动进行发送,不用加任何的结束标志符,不想短信一样还要加0x1A 0x1D这样的结束符。
@10、AT+CIPCLOSE=1
数据发送成功之后,模块会返回senk ok标识。
这时候如果没有更多的数据发送这时候可以使用上面的指令进行通道断开连接。
以上步骤最好不要有顺序颠倒,按照配置一步步来最后可以实现与服务器端的收发功能。

4、LBS基站定位

@1、AT+CENG?
这个指令就是获取周边基站的信息,要想定位准确的话,最好是获取三个基站信息数据,因为三点定位就是这个原理。画圆圈就可以了,精确度在20m—-500m之间,这个要看定位时候的信号强度。
获取基站返回信息包括:
mcc:移动用户所属的国家代码,默认值460
mnc:移动网号,0:中国移动 1:中国联通
lac:位置区域码 , 取值范围: 0-65535
cellid:基站小区编号 基站小区编号 ,取值范围: 取值范围: 取值范围: 0-65535 ,0-268435455 ,其中 ,其中 0,65535,268435455 不使用, 小区编号大于 65535 时为 3G 基站。
signal(rssi):信号强度 , 取值范围: 0到-113dbm. 113dbm.
(如获得信号强度为正数,则请按照以下公式 获得信号强度为正数,则请按照以下公式 进行转换: 获得的正信号强度 * 2 * 2 – 113 )
这些信息的作用就是为了要调用某个地图来用的,为了获取出来地理位置信息。就拿高德地图来说。
调用的http接口:
http://apilocate.amap.com/position?accesstype=0&imei=866104021101384&cdma=0&bts=460,0,6324,33427,-56&nearbts=460,0,6324,33427,-56|460,0,6324,33427,-56&output=json&key=key值
返回的结果就是经纬度信息。

当然这个模块也有直接获取的经纬读信息的AT指令集。例如:
AT+CIPGSMLOC=1,1
这个返回值就是经纬度信息。
AT+CIPGSMLOC=2,1
这个就是返回的是调用正常与否和时间。

5、http协议调用

AT+HTTPINIT ————————–>初始化HTTP 服务
AT+HTTPTERM ————————->结束HTTP 服务
AT+HTTPPARA ————————->设置HTTP 参数值
AT+HTTPDATA ————————->HTTP 写数据
AT+HTTPACTION ———————->HTTP 方式**
AT+HTTPREAD ————————->查询HTTP 服务响应
AT+HTTPSCONT ———————–>保存HTTP 应用上下文
AT+HTTPSTATUS ———————->读取HTTP 状态
@1:AT+HTTPINIT
初始化HTTP服务,后面不用加参数 正常返回OK
@2:AT+HTTPTERM
结束http服务,后面不用加参数,正常返回OK
@3:AT+HTTPPARA
设置HTTP回话参数,这个要进行设置2次,第一次是CID的设置,后面是目的地的URL
例如:
AT+HTTPPARA = “CID”,1
OK
AT+HTTPPARA=“URL”,”www.sim.com”
OK
@4:AT+HTTPACTION=MODE
MODE=0时候
后面就是get的用法
AT+HTTPACTION=0 ———-> GET 会话开始
OK
+HTTPACTION: 0,200,1000 ————–>GET 成功
这个是获取到的数据还没有进行串口输出,要主动使用命令才可以输出。
AT+HTTPREAD ———–>读取服务器的数据向串口输出。
+HTTPREAD: 1000
…. ———->向串口输出数据
OK
在这一步进行解析就可以了,注意的是如果MCU的处理数据的速度不够快的话,可能数存在数据丢失的危险,,因为最好是使用数据中断的形式,否则数据接收会影响总的数据服务进行。
AT+HTTPTERM ————–>结束HTTP 服务
OK
@5:AT+HTTPACTION=1
post的用法
AT+HTTPINIT ————————————–>初始化HTTP 服务
OK
AT+HTTPPARA = “CID”,1———————>设置HTTP 会话参数
OK
AT+HTTPPARA=“URL”,”www.sim.com”
OK
AT+HTTPDATA=100,10000 ——————–>这个是进行数据缓存到模块中
DOWNLOAD
……
OK
上传 100 字节数据,输入数据的等待时间为10000 毫秒。等待时间必须设置得足够
长,以使所有数据都能下载到模块中。准备从UART 接收数据,DCD 引脚拉低。
所有数据接收完毕,DCD 引脚拉高。
AT+HTTPACTION=1 —————>执行完这一步才开始进行传输
OK ———————–>POST 会话开始
+HTTPACTION: 1,200,0 —————————–>POST 成功
AT+HTTPTERM ———————–>关闭服务
OK
结束HTTP 服务
@6:AT+HTTPACTION=2
从http服务器获取http头信息
AT+HTTPINIT ————————–>初始化HTTP 服务
OK
AT+HTTPPARA = “CID”,1 ——————>设置HTTP 会话参数
OK
AT+HTTPPARA=“URL”,”www.sim.com”
OK
AT+HTTPACTION=2——————————>HEAD 会话开始
OK
+HTTPACTION: 2,200,0 ——————–>HEAD 成功
AT+HTTPTERM———————————>结束http服务
OK
@7:进行http服务器代理
AT+HTTPINIT
OK
初始化HTTP 服务
AT+HTTPPARA = “CID”,1
OK
AT+HTTPPARA=“URL”,”www.sim.com”
OK
设置HTTP 会话参数
AT+HTTPPARA=“PROIP”,”10.0.0.172”
OK
设置代理服务器IP 地址
AT+HTTPPARA = “PROPORT”,80
OK
设置代理服务器端口号
AT+HTTPACTION=0
OK
GET 会话开始
+HTTPACTION: 0,200,1000 GET 成功
AT+HTTPREAD
+HTTPREAD: 1000
….
OK
读取 HTTP 服务器的数据
向 UART 口输出数据
AT+HTTPTERM
OK
结束HTTP 服务
@8:进行http断点续传
AT+HTTPINIT
OK
初始化HTTP 服务
AT+HTTPPARA = “CID”,1
OK
设置HTTP 会话参数
AT+HTTPPARA =“URL”,”http://www.sim.com/img/sim_logo_jr_1003_38.gif”
OK
设置 URL, gif 图片的大小是16384 bytes
AT+HTTPPARA = “BREAK”,2000
OK
设置断点
AT+HTTPACTION=0
OK
GET 会话开始, 获取从 2000 到16384 的
数据
+HTTPACTION: 0, 200,14384 GET 成功
AT+HTTPREAD
+HTTPREAD: 14384
….
OK
读取HTTP 服务器的数据
向 UART 口输出数据
AT+HTTPTERM
OK
@9:获取HTTP状态
AT+HTTPINIT
OK
初始化HTTP 服务
AT+HTTPPARA =“CID”,1
OK
设置HTTP 会话参数
AT+HTTPPARA =“URL”,“www.baidu.com”
OK
AT+HTTPACTION = 0
OK
GET 会话开始
AT+HTTPSTATUS?
+HTTPSTATUS: GET,1,1440,7915
OK
“获取”会话的状态为进行中
+HTTPACTION: 0, 200,9335 GET 成功
AT+HTTPSTATUS?
+HTTPSTATUS: GET,0,0,0
OK
“获取”会话的状态为已完成
AT+HTTPACTION = 1
OK
POST 会话开始
AT+HTTPSTATUS?
+HTTPSTATUS: POST,2,1440,608
OK
“上传”会话的状态为进行中
+HTTPACTION: 1,200,0 POST 成功
AT+HTTPSTATUS?
+HTTPSTATUS: POST,0,0,0
OK
“上传”会话的状态为已完成
AT+HTTPTERM
OK
以上是HTTP的用法

6、FTP协议传输

......

7、模块BT的用法

......
————————————————-----------------------------------------------------------------------------------------------------

SIM800C模块高配版本是带EAT功能,那么何必要再接单片机,那是多次一举,什么是EAT开发呢?

为什么使用EAT?

充分利用SIM800无线模块的资源,将原本需要外部MCU完成的程序移植内嵌到无线模块内部,以达到节约成本的目的。利用RTOS的多线程,消息等技术,开发更高效。利用硬件的API接口,减少开发难度。


下面我们来看看,EAT与非EAT的区别:

SIM800

从这幅图片可以看出,如果使用非EAT开发,是不是多次一举呢,使用串口来通信,但是SIM800C模块本身就有MCU ,GPIO,SPI FLASH等等

来看看EAT开发架构:

SIM800

这是EAT开发架构,省去了MCU吧,各种AT指令,通过moderm就可以实现,不需要通过串口来发送AT指令,多么简单。。

我这里这种板子就是既支持EAT开发,和非EAT开发,资料非常详细和全面呢,大家有兴趣可以联系我哦,承接一切高难度的EAT开发,专注于SIM内部EAT开发,如数据透传,DTU ,RTU,MQTT  协议移植。 

这是作者本人开发的http透传模块,发送数据只要发数据,模块的配置信息通过上位机配置就可以。


————————————————----------------------------------------------------------------------------------------------