目录
数据手册
AIR202合宙推出的一款GPRS模块,相对于传统的SIM800C模块,使用更加方便,功能也更加强大。
本文主要讨论在使用AIR202模块连接MQTT服务器过程中出现的问题,模块的数据手册地址如下:
http://www.openluat.com/Product/gprs/Air202.html,读者可自己研究学习。
模块初始化
此处作者所指的模块初始化,并非对模块发送一些参数配置命令而让模块开始连接服务器;恰恰相反,而是让GPRS模块停止网络连接。这样做的原因是:一旦单片机重启,单片机会发送指令让GPRS模块连接网络,而如果此时GPRS模块已经是网络连接状态,就会可能有如下情况:
1、返回值不是OK,而变成ERROR
2、及时退步重新发送IP请求命令,由于之前并未断开TCP连接,请求IP会一直报错。
delay_ms(1200);
gprs_mqtt_printf("+++");
delay_ms(600);
gprs_mqtt_printf("ATE0\r\n");
delay_ms(500);
gprs_mqtt_printf("AT+MDISCONNECT\r\n");
delay_ms(500);
gprs_mqtt_printf("AT+MIPCLOSE\r\n");
delay_ms(500);
gprs_mqtt_printf("AT+CIPSHUT\r\n");
delay_ms(2500);
在此说明一下上面代码的用途
delay_ms(1200);
gprs_mqtt_printf("+++");
delay_ms(600);
结束透传模式,无论之前是不是透传,发送指令使模块推出透传模式,该指令之前应该延时1000ms以上,该指令之后应该延时500ms以上。
gprs_mqtt_printf("ATE0\r\n");
delay_ms(500);
关闭回显,避免收到自己发出的命令造成判断失误。
gprs_mqtt_printf("AT+MDISCONNECT\r\n");
delay_ms(500);
断开MQTT连接
gprs_mqtt_printf("AT+MIPCLOSE\r\n");
delay_ms(500);
断开TCP连接
gprs_mqtt_printf("AT+CIPSHUT\r\n");
delay_ms(2500);
关闭移动场景(注意这个指令模块回复有一定的时间间隔,所以延时时间是2500ms),此后再次连接网络便可以顺利申请到IP。
printf函数中介代理
上面贴出的代码,使用的发送函数是gprs_mqtt_printf而不是printf函数。
前者是作者自己包装处理后的函数,可以自定义发送AT指令的串口,使用起来灵活一些,方便后期的项目移植。