SIM800C 使用GPRS与远程服务器进行串口通讯

背景:SIM800C模块与服务器建立通讯实现了真正意义上的物联网应用,它突破了WiFi模块只能在固定无线网络范围内的距离局限,或是蓝牙模块的短距离传输瓶颈,我们只需要借助单片机连接GSM模块与电器开关,然后对单片机进行简单的控制逻辑编程。GSM模块只要在有移动网络信号覆盖的环境下就能与控制端进行基于TCP/IP协议的点对点数据传输,从而实现不限距离的远程控制。

本文介绍SIM800C模块通过GPRS与服务器进行串口通信。

设备清单:

USB-TTL调试模块(驱动);
SIM800C模块;
移动或联通SIM卡(可正常访问网络);
本地计算机;
拥有公网IP的远程计算机。
如果没有公网IP,可以在花生壳上付费做地址映射。

模块引脚说明
5V:供电引脚,只能输入DC5V,用于给板子供电。

V_TTL:接目标控制板单片机内核电压的5V/3.3V,TTL逻辑

GND:电源地线

TXD:模块串口发送引脚,TTL电平(不能直接接RS232电平)

RXD:模块串口接收引脚,TTL电平(不能直接接RS232电平)

DTR:数据终端准备

SPKP:内核音频输出引脚

SPKN:内核音频输出引脚

MICN:内核音频输入引脚

MICP:内核音频输入引脚

RI:内核振铃提示引脚

VRTC:RTC外置电池引脚

GND:电源地线

PWX:拉低该引脚可以实现模块的开启或者关闭

GND:电源地线

VBAT:锂电池输入引脚。

模块与电脑连接 ##
使用USB-TTL连接SIM800C然后插入电脑供电,接线如下

USBTTL SIM800C
5V-------VCC
GND------GND
TX-------RX
RX-------TX

USB-TTL 模块驱动,常用于调试TTL电平的串口信息。市面上常见的有 CP2102/PL2303/CH340等USB-TTL模块,推荐使用CP2102模块,是同类模块中性能最好最稳定的。

插入前确保电脑已经安装了USB-TTL调试驱动,在设备管理器中查看对应串口号(COM)

此时,SIM800C模块电源指示灯常亮,但并不会开始工作,前面的引脚介绍中有PWX引脚,我们需要给PWX引脚一个低电平触发来启动模块,从第一张图中可以看到,我用跳线帽将PWX和GND短接,这样每次通电只需拔下跳线帽再插上就可以启动模块。

模块与计算机通信测试
打开串口调试器,选择对应的串口号,波特率建议选择9600,数据位8,停止位1,然后点 “打开串口” 启动串口监听。向COM口发送AT命令。有些串口调试器有“发送新行”功能,一定要勾选上,这样会给每条命令的结尾加上一个换行符,模块才能识别该条命令,由于我用的串口助手没有这个功能,所以我在每条命令的结尾敲一个回车后发送。

模块的波特率可以自适应,即模块上电时候第一个发送的指令是什么波特率,系统会自动识别波特率按照这个波特率返回数据。

发送
AT
收到回复
AT
OK
SMS Ready

此时,模块与计算机的通信正常。

常用AT指令集介绍
AT+CPIN?

该指令用于查询 SIM 卡的状态,如果该指令返回:+CPIN:READY,则表明SIM卡状态正常。

AT+CSQ

该指令用于查询信号质量,返回 SIM800 模块的接收信号强度,最大有效值是31。

AT+COPS?

该指令用于查询当前运营商,该指令只有在连上网络后,才返回运营商,否则返回空,如返回:+COPS:0,0, “CHINA MOBILE”,表示当前选择的运营商是中国移动。

AT+CGMI

该指令用于查询模块制造商。

AT+CGMM

该指令用于查询模块型号。

AT+CGSN

该指令用于查询产品序列号(即IMEI号)。

AT+CNUM

该指令用于查询本机号码。不是所有的SIM卡都 支持这个指令。

ATE1

该指令用于设置回显模式(默认开启),即模块将收到的 AT 指令完整的返回给发送端,启用该功能,有利于调试模式。如果不需要开启回显模式,则发送 ATE0 指令即可关闭,这样收 到的指令将不再返回给发送端,这样方便程序控制。

ATD15002865210;

拨打电话,执行成功后返回ATD:15002865210 OK。

开启公网主机网络端口
我们远程登陆前面准备的公网IP主机,cmd命令netstat -a列出所有网络端口。

找出没有被占用的端口号,这里我选择10005,使用网络调试助手设置协议类型为TCP服务对端口10005进行监听,IP地址默认。

设置防火墙规则:
打开Windows防火墙->高级设置,增加入站规则->端口10005->适用于TCP协议,同时增加10005端口的出站规则。
或者直接关闭防火墙。


回到我们本地计算机的串口助手,接下来我们要使用串口助手给SIM800C发送指令来建立GPRS连接。
下面是我们会用到的GPRS功能指令集与相应功能:

AT+CGCLASS

用于设置移动台类别。SIM800模块仅支持类别"B"和"CC",发送:AT+CGCLASS=“B”,设置移动台类别为B。即,模块支持包交换和电路交换模式,但不能同时支持。

AT+CGDCONT

用于设置PDP上下文。发送:AT+CGDCONT=1,“IP”,“CMNET”,设置PDP上下文标标志为1,采用互联网协议(IP),接入点为"CMNET"。

AT+CGATT

用于设置附着和分离GPRS业务。发送:AT+CGATT=1,附着GPRS业务。

AT+CIPCSGP

用于设置CSD或GPRS链接模式。发送:AT+CIPCSGP=1,“CMNET”,设置为GPRS连接,接入点为"CMNET"。

AT+CLPORT

用于设置本地端口号。发送:AT+CLPORT=“TCP”,“8086”,即设置TCP连接本地端口号为8086。

AT+CIPSTART

用于建立TCP连接或注册UDP端口号。发送:AT+CIPSTART=“TCP”,“222.197.91.22”,“10005”,模块将建立一个TCP连接,连接目标地址为:222.197.91.22,连接端口号为10005,连接成功会返回:CONNECTOK。

AT+CIPSEND

用于发送数据。在连接成功后发送:AT+CIPSEND,模块返回:>,此时可以输入要发送的数据,最大可以一次发送1352字节,数据输入完后,同发短信一样,输入十六进制的:1A(0X1A),启动发送数据。在数据发送完成后,模块返回:SENDOK,表示发送成功。

AT+CIPSTATUS

用于查询当前连接状态。发送:AT+CIPSTATUS,模块即返回当前连接状态。

AT+CIPCLOSE

用于关闭TCP/UDP连接。发送:AT+CIPCLOSE=1,即可快速关闭当前TCP/UDP连接。

AT+CIFSR

查询模块IP

AT+CIPSHUT

用于关闭移动场景。发送:AT+CIPSHUT,则可以关闭移动场景,关闭场景后连接状态为:IPINITIAL,可以通过发送:AT+CIPSTATUS查询。另外,在连接建立后,如果收到:+PDP:DEACT,则必须发送:AT+CIPSHUT,关闭场景后,才能实现重连。

SIM800C 建立与服务器的连接
使用端口助手向SIM800C发送以下命令
查询网络注册情况

AT+CPIN?

查询信号质量

AT+CSQ

查询GSM网络注册状态

AT+CREG?

查询GPRS网络注册状态

AT+CGREG?

使模块附着GPRS网络

AT+CGATT=1

设置透传模式

AT+CIPMODE=1

设置APN=CMIOT

AT+CSTT=CMIOT

激活移动场景,建立无线连接

AT+CIICR

获取模块IP地址

AT+CIFSR

建立TCP连接,连接到IP:222.197.91.22,连接端口为:10005。

AT+CIPSTART=“TCP”,“222.197.91.22”,“10005”

此时SIM800C模块向串口返回CONNECT OK,现在可以进行数据交互,我们通过远程服务器向模块发送“Hello SIM800! This massage from server.” 我们的模块将会成功收到来自服务器的信息。
--------------------- 
作者:Kevin@1997 
来源:CSDN 
原文:https://blog.csdn.net/qq_36169781/article/details/86573773 
版权声明:本文为博主原创文章,转载请附上博文链接!

你可能感兴趣的:(Python)