一、环境介绍
MCU: STM32F103C8T6
GSM模块: GA6--果云
开发软件: Keil5
完整源码下载: https://download.csdn.net/download/xiaolong1126626497/18245590
其他参考文章: STM32 ESP8266使用MQTT协议连接阿里云物联网服务器
其他参考文章:STM32 ESP8266使用标准MQTT协议(MQTTS)连接中国移动OneNet物联网服务器
二、GA6-GSM模块介绍与调试
说明: GA6-B模块供电必须5V,采用电脑USB供电可能不稳定(没有5V,只有4.8V左右),导致模块使用不稳定,发送AT指令没有反应,调试阶段,可将开发板的USB线连接充电宝或者手机充电插头取电。
2.1 GA6-B模块概述
GA6-B 模组: 1. GA6 尺寸 22.8mm x 16.8mm x 2.2 mm; 2. 正常工作温度:-30°C ~ 80°C, 3. 受限工作温度:-40°C ~ -30°C 及 80°C ~ 85°C* 4. 工作电压 3.5V-4.2V; 5. 开机电压>3.5V; 6. SLEEP 模式下的耗流为 0.9mA; 7. 四频:GSM850, EGSM 900 和 DCS 1800,PCS1900 可以自动的搜寻 四个频段。 l 符合 GSM Phase 2 / 2 l GPRS Class 10; 8. 灵敏度<-107; 9. 支持语音通话; 10. 支持 SMS 短信; 11. 支持移动和联通2G,以及全球的GSM网络 12. GPRS 数据特性,最大数据速率,下载 85.6Kbps,上传 42.8Kbps; 13. 支持符合 GSM 07.10 协议的串口复用功能 14. 支持 2 个串口,一个下载串口,一个 AT 命令口; 15. AT 命令支持标准 AT 和 TCP/IP 命令接口; 16. 支持数字音频和模拟音频,支持 HR,FR,EFR,AMR 语音编码; 17. 支持FCC,CE认证; 18. SMT 42PIN 封装;
GA6模块的优势 广域覆盖:GPRS在全国34个省均有良好覆盖,更是全球通行的2G通讯标准。基本上在手机可以打电话的地方都可以通过GPRS无线上网; 永远在线:只要激活GPRS应用后,将一直保持在线,类似于无线专线网络服务。 按量计费:GPRS服务虽然保持一直在线,但您不必担心费用问题;因为只有产生通信流量时才计费。 高速传输:目前GPRS可支持85.6Kbps的峰值传输速率,理论峰值传输可达100余Kbps。 价格便宜 :相对于 SIM 系列的模块 价格只有其的一半。大大降低了物联网设备的入门门槛凭借超小的尺寸,超低功耗和宽工作温度范围,GA6是M2M应用的理想解决方案,适用于车载、工业及PDA、个人跟踪、电力环境检测、无线POS、智能计量以及其它M2M的应用,为其提供完善的GSM/GPRS短信、数据传输及语音服务。
物联网卡:
2.2 GA6模块调试
模块默认波特率: 115200 电压: 5V TX---URX(GA6模块) RX---UTX(GA6模块)
- 模块上电串口助手收到的消息:
注意: 电压必须5V否则,给模块发送AT指令没有用。
- 正常情况下,模块插上SIM电话卡,供电达到5V时,模块上电会返回以下提示信息。
当模块出现 “SMS Ready”字符串提示时,说明模块已经可以正常的接收“AT”指令了。
2.3 基础常用的指令介绍使用
(指令结尾发送都需要加rn)
1. 检测模块是否正常
给模块发送指令: AT 模块正常返回,这个指令可以检测模块是否正常: OK |
---|
2. 查询SIM卡是否在卡槽内
给模块发送指令: AT CPIN? 如果卡在卡槽内,模块正常返回值: CPIN:READY OK |
---|
3. 查询模块是否注册到网络
给模块发送指令: AT CREG? 如果模块已经正常注册到网络的返回值: AT CREG? CREG: 1,1 OK |
---|
4. 关闭指令回显
给模块发送指令: ATE0 指令执行成功返回值: (关闭AT指令回显,方便调试,提高程序效率) OK |
---|
2.4 GPRS网络通信相关指令介绍
1. 查询网络连接状态
给模块发送指令: AT CIPSTATUS 指令执行成功返回值如下(多种): "IP INITIAL" 初始化 "IP START" 启动任务 "IP CONFIG" 配置场景 "IP IND" 激活 GPRS/CSD 场景中 "IP GPRSACT" 接收场景配置 "IP STATUS" 获得本地 IP 地址(参考 AT CIFSR 命令) "TCP CONNECTING" TCP 连接中 "UDP CONNECTING" UDP 连接中 "IP CLOSE" TCP/UDP 连接关闭 |
---|
2. 附着GPRS网络 (进行网络通信前,需要先附着GPRS网络才可进行正常通信)
给模块发送指令: AT CGATT=1 模块正常附着了GPRS网络,返回值: (注意该指令第一次附着网络需要点时间,需等待一段时间) OK |
---|
3. 激活GPRS网络
给模块发送指令: AT CGACT=1,1 模块正常激活了GPRS网络返回值: OK |
---|
4. 建立TCP连接: 连接TCP服务器
模块发送指令: AT CIPSTART="TCP","183.230.40.33",80 如果服务器正常连接成功的返回值: OK CONNECT OK |
---|
说明: 上面的指令是采用TCP协议连接,183.230.40.33服务器,端口号是80。
5. 发送数据
给模块发送指令: AT CIPSEND 如果收到指令后会返回 > 符号。,接下来就可以发送 实际要发送的数据,在发送实际数据时,不需要加回车符(rn)。 实际数据发送之后,紧接着发送一个0x1A,即可启动数据发送。 注意: 0x1A是十六进制格式数据,不是字符串。 如果数据发送成功,会返回 “SEND OK” 字符串。 |
---|
发送数据示例:
POST /devices/517704007/datapoints HTTP/1.1 api-key:vvQAUiBG=HwKzqGicH=RxBvFCDw= Host:api.heclouds.com Connection:close Content-Length:65 {"datastreams":[{"id":"ds18b20","datapoints":[{"value":66.66}]}]} |
---|
三、STM32代码调试GA6模块
3.1 通过STM32串口代码测试GA6模块
直接接在STM32F103C8T6最小系统板上面:
注意: 如果是使用USB给开发板供电,为了防止电压不够,USB线不要接分线器,直接接电脑的USB口。
因为GA6模块的电压必须5V才可驱动,4.8V都不行。
STM32F103C8T6最小系统板使用串口3与GA6-B模块连接:
5V-----5V GND---G PB10—URX PB11---UTX |
---|
出现以上提示之后,发送AT能返回OK就说明模块已经正常工作了。
模块上电会返回以下信息: (注意: 电压一定要保证是5V)
AT Ready AST_POWERON NITZ:19/03/20,01:57:46,32 Call Ready CREG: 1 SMS Ready |
---|
3.2 通过STM32封装标准函数(使用HTTP协议连接OneNet服务器)
GA6_GPRS.c文件代码:
代码语言:javascript复制#include "ga6_gprs.h"
#define GS6_GSM_CHECK_CNT 10
/*
函数功能:向GA6_GPRS发送指令
函数参数:
char *cmd :发送的指令
char *check :检查返回的字符串
u32 wait_time :等待的时间(100ms)为单位
说明:该函数只是适用于成功后返回OK的指令
返回值: 0表示成功 1表示失败
*/
u8 GA6_GSM_SendCmd(char *cmd,char *check,u32 wait_time)
{
u32 i,j;
for(i=0;i<GS6_GSM_CHECK_CNT;i ) //测试的总次数
{
USART3_RX_FLAG=0;
USART3_RX_CNT=0;
memset(USART3_RX_BUFF,0,sizeof(USART3_RX_BUFF));
USART_X_SendString(USART3,cmd);
for(j=0;j<wait_time;j ) //等待的时间(ms单位)
{
delay_ms(100); //一次的时间
if(USART3_RX_FLAG)
{
USART3_RX_BUFF[USART3_RX_CNT]='