无线路灯项目——SIM900A调试
1.波特率
1.1自适应波特率
当SIM900A模块处于自适应波特率下,模块开机后,会从串口发出一串字符,在上位机不同的波特率下,会显示出不同的字符,以115200为例子,模块开机后,上位机会收到如下信息,其中0x49是英文字母”I”的ASCII码:
然后我们发送AT指令,即可把模块的波特率同步成我们上位机的波特率(能同步成功的波特率是特定的几个:1200、2400、4800、9600、19200、38400、57600、115200)同步好后,会出现以下界面,返回“OK”,自适应下同步出来的波特率,在关机后就失效,下次启动还是自适应波特率。
1.2确定波特率
当SIM900A模块处于确定波特率下,模块开机后,若上位机在正确的波特率下,那么就会收到如下的信息,其中“RDY”代表模块启动成功,可以接收AT指令,“+CREG: 1”代表SIM卡注册网络成功。
SIM900A AT Command Manual:
2.GPRS心跳包
GPRS连上TCP后,若长期不发送数据,会发生连接在但不能发数据的情况。这是运营商为了保护网络资源而设定的。我们需要定时发生数据包以维持连接一直可用,这个数据包也叫做心跳包。心跳包的间隔随着地区运营商不同而不同,可根据实验情况确定,网络繁忙地区一般为几分钟。当SIM发送心跳包或者其他数据,服务器没有回应的时候,我们不需要继续等待数据,认为这次的连接已失效,主动断开连接,转入重连程序。
系统有这么一个徐需求:服务器决定SIM900A何时上传数据,上传什么数据,由于服务器不能主动去连接SIM900A,且SIM900A是运营商的内网,服务器是外网,要实现这样的需求,有两个方案:
1.SIM900A一直连接TCP,用心跳包维持;
2.SIM900A平时与服务器是断开连接的,要连接时,服务器发送短信,SIM900A然后连接TCP。
我使用的是方案1,用定时中断。不一定是SIM向服务器发送心跳包,服务器定时向SIM发送数据也是可以维持的。
心跳包的作用可以不仅仅是维持连接,我们可以在心跳包里附加一点有价值的状态信息等。
在我调试这个模块的时候,经常连接不上,后来发现是信号的问题,信号低于10,很难通信成功。
3.网络时间同步
如果SIM模块是带有网络时间功能的,就可以不使用MCU的RTC了。授时服务器可以多准备几个,防止某一个服务器挂掉。另外,还可以根据ntp协议,做一个自己的授时服务器。
【Reference】
心跳包:
http://bbs.eeworld.com.cn/thread-427882-1-1.html
http://www.amobbs.com/forum.php?mod=viewthread&tid=5582370
http://www.amobbs.com/forum.php?mod=viewthread&tid=5544395
网络时间同步:
http://www.amobbs.com/thread-5589688-1-1.html