AIR202/208使用AT指令方式连接MQTT调试笔记

目录

 

数据手册

模块初始化

printf函数中介代理


数据手册

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指令的串口,使用起来灵活一些,方便后期的项目移植。

你可能感兴趣的:(MQTT,高效开发,STM32F1)