SIMCOM800C 是SIMCom公司的工业级四频 GSM/GPRS 模块,工作频段四频:850/900/1800/1900MHz,可以低功耗实现语音、 SMS(短信)、 MMS(彩信)、蓝牙数据信息的传输.
准备一个SIM800C模组和USB转串口,使用USB 5V给SIM800C模组供电:
SIMCOM800C.ini
)下载地址:https://github.com/Mculover666/QCOM_Tools_Scripts
此文档来自于simcom官方!阅读本教程时,关于AT指令的详细说明请参考该文档!
指令:AT
功能:测试AT指令功能是否正常
示例:
AT
OK
指令:AT+CPIN?
功能:查询SIM卡是否正常,返回ready则表示SIM卡正常
示例,如果SIM卡插入成功,则返回结果为:
AT+CPIN?
+CPIN: READY
OK
如果未插入SIM卡,则返回结果为:
AT+CPIN?
+CME ERROR: 10
指令:AT+CSQ
功能:查询模组的信号强度
响应:第一个值rssi为信号值,0-31则正常,第二个值ber为误码率,99为不可测。
+CSQ: ,
示例:
AT+CSQ
+CSQ: 25,0
OK
指令:AT+CREG?
功能:查询模组是否注册上GSM网络
响应:第一个参数n为0表示禁用网络注册非请求结果码,第二个参数stat为1表示已注册上本地网,为5表示注册上漫游网,其余值表示注册不成功。
+CREG:,
示例:
AT+CREG?
+CREG: 0,1
OK
指令:AT+CERGE?
功能:查询模组是否注册上GPRS网络
响应:第一个参数n为0表示禁用网络注册非请求结果码,第二个参数stat为1表示已注册上本地网,为5表示注册上漫游网,其余值表示注册不成功。
+CGREG:,
示例:
AT+CGREG?
+CGREG: 0,1
OK
必须在查询GPRS网络已正常注册网络的情况下进行本节实验!
指令:
AT+CIPMUX=
功能:
示例:
AT+CIPMUX=1
OK
指令:
AT+CSTT=
功能:
示例:
AT+CSTT="CMNET"
OK
指令:AT+CIICR
功能:建立无线链路
示例:
AT+CIICR
OK
指令:AT+CIFSR
功能:查看模组获取的IP地址
示例:
AT+CIFSR
100.122.243.183
SIMCOM800C模组的TCP/IP应用有两种模式,分为单链路模式和多链路模式,使用指令AT+CIPMUX=
来设置(0-单链路,1-多链路)。
在单链路模式下,SIM800C模组可以工作在透传模式和非透传模式,在这两种模式下,模组均可以被配置为TCP/UDP服务端或者TCP/UDP客户端。
在多链路模式下,SIM800C模组只工作在非透传模式,在这种模式下,模组仅仅可以被配置为TCP/UDP客户端,可以建立6路链接。
首先我们需要搭建一个TCP服务器,有两种方式:
因为M26模组直接注册的是公网ip地址,所以这里我们使用第一种方式,在Linux服务器上运行一个Python编写的tcp测试服务器:
本地PC使用的是局域网,公网不可以直接根据ip地址访问到本PC,需要进行内网穿透,不推荐使用。
这里的Python程序如下:
# tcp-server.py
from socket import *
host = ''
port = 8001
# 创建server socket
server_socket = socket(AF_INET,SOCK_STREAM)
# 绑定socket监听地址
server_addr = (host,port)
server_socket.bind(server_addr)
# 开始监听,最大允许连接数5
server_socket.listen(5)
# 处理连接请求
try:
while True:
print('waiting for connect...')
#阻塞等待客户端的连接
client_socket, client_addr = server_socket.accept()
# 连接成功后,打印客户端信息
print('a client connnect from:', client_addr)
while(True):
# 向客户端发送数据
client_socket.send('Hello, client!'.encode())
# 接收客户端的数据
data = client_socket.recv(1024)
print('recv data is ', data.decode())
# 接收到quit则关闭socket
if "quit" in data.decode():
break
# 关闭socket
client_socket.close()
server_socket.close()
print("socket closed.")
break
except:
client_socket.close()
server_socket.close()
print("socket closed.")
运行:
python3 tcp-server.py
效果如下:
SIM800C模组作为 TCP 客户端的时候,连接TCP服务器的指令需要分以下两种情况对待。
① 如果是单链路模式(之前设置AT+QIMUX=0
),则指令如下:
AT+CIPSTART=,/,
② 如果是多链路模式(之前设置AT+QIMUX=1
),则指令如下:
AT+CIPSTART=<index>,<mode>,<IPaddress>/<domain name>,<port>
其中每个参数的意义如下:
index
:0-5,多链路模式下有效,表示sokcet连接序号,SIM800C 支持 6 个 SOCKET 同时存在;mode
:字符串类型,“TCP”或者“UDP”,表示socket连接模式;Ipaddress
:字符串类型,表示服务器ip地址;domain name
:字符串类型,表示服务器域名地址;port
:整数类型,表示服务器端口号;两条指令的响应:
① 如果格式正确,返回:
OK
如果格式错误,返回:
ERROR
② 如果连接成功,返回:
[,] CONNECT OK
如果连接失败,返回:
[,] CONNECT FAIL
如果该编号的socket已经存在,返回:
ALREAY CONNECT
示例:
AT+CIPSTART=0,"TCP","117.50.111.72",8001
OK
0, CONNECT OK
SIM800C模组接收消息有两种模式,一种是接收到后直接打印,另一种是接收到缓存区中,使用AT指令读取,另外,还可以控制接收数据时的IP头是否显示。
① 接收后直接打印,不显示IP头(默认模式):
+RECEIVE,0,14:
Hello, client!
② 接收后直接打印,显示IP头,需要配置(只有单链路模式下会生效):
AT+CIPHEAD=1
OK
接收效果如下:
+IPD14:Hello, client!
使用如下的命令即可向TCP服务器发送消息,首先设置要发送数据的字节数,等待模组返回>
后,输入要发送的数据即可,如果发送的数据超过了设置的n个字节,则只发送前n个字节,后面的数据被认为是无效数据,不会发送:
AT+CIPSEND
>hello<0x1a>
示例:
Hello, client!AT+CIPSEND
> hello
SEND OK
发送成功看服务器上运行的TCP服务器是否收到:
通信完毕之后,可以使用下面的命令关闭TCP连接:
AT+CIPCLOSE=
示例:
AT+CIPCLOSE=0
0, CLOSE OK
指令:
AT+CDNSGIP=
功能:域名解析
响应:
① 如果AT格式正确,返回
OK
如果AT格式错误,返回:
ERROR
② 如果解析成功,返回:
如果解析失败,返回:
ERROR:
STATE:
示例:
AT+CDNSGIP=mculover666.top
OK
+CDNSGIP: 1,"mculover666.top","117.50.111.72"
接收更多精彩文章及资源推送,欢迎订阅我的微信公众号:『mculover666』。