GPRS/3G

像GPRS/3G模块之类的应用,需要连接,登陆,初始化等步骤完成后才能传输数据,而这些步骤又比较耗时。

所以用 状态机 + 超时 的机制来实现比较合理。

我有systick依赖症,所以用systick来做超时检测(其他定时器也都一样)。

因为这种AT指令来操作的模块一般是基于串口的,所以透传模式就类似于串口传输了。

void SysTick_Handler(void)
 {
   msTicks++;
}

void gprs_init(void)

{
    if((strstr(aUart5RxBuffer, "command ready") == NULL)

        /*||(strstr(aUart5RxBuffer, "+SIM READY") == NULL)*/)
    {

         gprs_init_ok = 0;                        

    }

    else

    {

         gprs_init_ok = 1;   

    }  

}

void ppp_config(void)

{         

    switch (ppp_config_step)

    {

        case 0:

            free_rom_buf(aUart5RxBuffer,sizeof(aUart5RxBuffer));

            gprs_puts("AT+GTSET=\"LPMMODE\",0\r\n");

            gprs_tick = msTicks;            

            ppp_config_step = 1;
            break;

        case 1:

            if((msTicks - gprs_tick) > 500)

            {        

                if(strstr(aUart5RxBuffer, "OK") == NULL)
                {

                    ppp_config_step = 0;                    

                }

                else

                {

                    ppp_config_step = 2;                                   

                }
                free_rom_buf(aUart5RxBuffer,sizeof(aUart5RxBuffer));
            }
            break;

//===================================================            

        case 2:

            gprs_puts("AT+CPIN?\r\n");

            ppp_config_step = 3;

            gprs_tick = msTicks;

            break;        

        case 3:

            if((msTicks - gprs_tick) > 500)

            {

                if((strstr(aUart5RxBuffer, "OK") == NULL) || (strstr(aUart5RxBuffer, "+CPIN: READY") == NULL))

                {

                     ppp_config_step = 2;

                }

                else

               {

                    ppp_config_step = 4;                                                                     

               }

               free_rom_buf(aUart5RxBuffer,strlen(aUart5RxBuffer));

            }            

            break;
//======================================================           

        case 4:

            gprs_puts("AT+CSQ\r\n");

            ppp_config_step = 5;

            gprs_tick = msTicks;

            break;

        case 5:

            if((msTicks - gprs_tick) > 500)

            {

                if(strstr(aUart5RxBuffer, "OK") == NULL)

                {

                    ppp_config_step = 4;

                }

                else

                {

                    ppp_config_step = 6;
                }

                free_rom_buf(aUart5RxBuffer,strlen(aUart5RxBuffer));

            }            

            break;

//=====================================================            

        case 6:

            gprs_puts("AT+CREG?\r\n");

            ppp_config_step = 7;

            gprs_tick = msTicks;

            break;

        case 7:

            if((msTicks - gprs_tick) > 500)

            {

                if(strstr(aUart5RxBuffer, "+CREG: 0,0") == NULL)

                {

                    ppp_config_step = 8;

                }

                else

                {

                    ppp_config_step = 6;
                }

                free_rom_buf(aUart5RxBuffer,strlen(aUart5RxBuffer));

            }            

            break;

//=========================================================

        case 8:

            //gprs_puts("AT+MIPCALL=1,\"3GNET\"\r\n");

            gprs_puts("AT+MIPCALL=1,\"xagfzqx.ydoa.snapn\"\r\n");

            ppp_config_step = 9;

            gprs_tick = msTicks;

            break;

        case 9:

            if((msTicks - gprs_tick) > 3000)

            {

                if(strstr(aUart5RxBuffer, "+MIPCALL: 0") == NULL)

                {

                        ppp_config_step = 0;

                        ppp_config_ok = 1;                    

                }

                else

                {

                      ppp_config_step = 8;
                }

                free_rom_buf(aUart5RxBuffer,strlen(aUart5RxBuffer));

            }            

            break;             

        default:

            break;

    }    

}

void gprs_monit_routine(void)

{
   if(!gprs_init_ok)                                          { gprs_init();      }

   if((gprs_init_ok)&&(!ppp_config_ok))                       { ppp_config();     } 

   if((ppp_config_ok)&&(data_is_ok)&&(!http_send_cmplt))      { http_send_test(); }         

}
 

初始化成功了就可以传输数据了,数据发送和接收都跟串口一样。主要工作都在初始化 ,和异常修复机制的实现。因为网络传输每一步都可能会失败,而且外部因素太多,所以异常修复机制尤其重要。

代码实例完全都是按规格书流程来操作的,规格书链接:http://pan.baidu.com/s/1sjSMu6p 密码:cam1

时间: 2024-08-05 07:07:53

GPRS/3G的相关文章

GPRS/3G/4G无线数传DTU充电桩开关量模拟量IP MODEM远程测控

方案需求 充电桩主要由桩体.计量模块及电气模块组成,基础结构类似于低压配电柜.充电桩主要分为交流充电桩和直流充电桩.交流充电桩一般功率在数KW左右,适用于慢速充电,一般有RS485或者RS232接口,通过DTU将充电数据上传云端,通过云端应用计算扣费方式. 直流充电桩的功率一般在数10KW,提供快速充电服务,主要应用于各种类型充电站,高速公路等快速充电场合. 技术部署 充电桩系统由充电桩.DTU.后端管理平台.数据管理中心以及基于互联网的APP应用构成.充电桩拥有RS232或者RS485接口,通

塔吊工地GPRS/3G/4G无线数传DTU

方案需求 由于塔吊的特点,随着楼层的升高而升高,工地位置不同而随时转移,这导致了常规的塔吊监控方式难以满足实际要求.远程无线的监控,由于使用无线网络作为传输方式,无需人工布线,安装方便,价格低廉,可以很好地满足各个工地的实际需求. 建筑塔吊远程监测系统方案01 技术部署 建筑塔吊远程监测系统主要由3大部分组成:服务端包括数据库.管理平台:无线通信终端采用深圳思连科技的3G/4G工业路由器来实现数据联网:前端部分主要由摄像头.各种监控传感器组成. 中心平台主要由数据服务器.应用服务器和监控大屏组成

ip modem温室大棚GPRS/3G/4G无线数传DTU传感器的数据采集

方案需求 温室大棚是一种可以改变植物生长环境,根据作物生的最佳生长条件,调节温室气候使之一年四季满足植物生长需要,不受气候和土壤条件的影响,能够避免外界四变化和恶劣气候对其影响的场所,并且能在有限的土地上周年地生产各种不同的蔬菜.鲜花等反季节作物的一种温室设施.因此温室大棚中的温度.湿度.光照度.土壤湿度.CO2浓度等环境因子对农作物的产量.质量有很大的影响,需要随时监测和控制. 技术部署 监测传感器采集:获取空气温度.湿度.光照强度.土壤水分温度.二氧化碳浓度.叶面湿度.露点温度等环境参数及视

GPRS/3G/4G无线数传DTU鱼塘养殖MQTT协议 ip modem

方案需求 鱼塘养殖水大多采用循环流水式,水质的好坏,决定池塘的生态系统稳不稳定.如何对水体质量及生物成分进行控制,是养殖的难点.水质中鱼的粪便.残食引起溶氧.氨氮的波动,导致水质污染,鱼群生病及死亡. 水温也是影响水产养殖物的正常生长发育,日照时间,及日照面积与室温建筑透光性能影响整体的池塘的温度.因此,采集鱼塘的水温.溶氧量.酸碱度等关键数据是水产养殖物快速成长的基础保障. 技术部署 池塘养殖生产自动化,针对软硬件对水体水温.溶氧.酸碱度.气温等参数进行在线自动检测并采集传输至云端而到达管理平

无线远程监控GPRS/3G/4G无线数传DTU

方案需求 液氧贮存与充装的安全也越来越突出地成为生产厂家不可回避的现实问题.液氧远程监控系统,加强和规范液氧贮存与充装的安全监控管理,杜绝重大事故发生,对于保障企业安全生产和人民生产财产安全具有十分重要的现实意义. 技术部署 每个现场液氧罐罐体安装无线差压式液位变送器.无线浮子液位开关及无线温度变送器.控制室由无线主机.计算机.NB-IoT无线数传终端.UPS.打印机组成.无线主机接收现场仪表的信号,控制室的计算机上,计算机安装有上位机组态软件,可以查看整个网络的拓扑视图.网络性能视图.设备数据

触屏手机3G网站设计

随着智能手机iphone和Android的热潮,衍生出基于Safari和Chrome浏览器的触屏手机网站Touch Screen Mobile Website. 触屏手机网站在中国还属于起步阶段,从行业的现状来看,其体验参差不齐,笔者将从设备.系统.浏览器.网络.四个维度来与大家共同探讨触屏手机的网站设计: 一.设备 ·分辨率与屏幕尺寸 ·触屏机的交互特点 ·性能 1. 分辨率是设计师做网站时首要考虑的问题,iphone/ipod touch目前有2种分辨率:480*320.960*640,屏幕

物联网核心协议—消息推送技术演进

消息触达能力是物联网(internet ofthings, IOT)的重要支撑,而物联网很多技术都源于移动互联网.本文阐述移动互联网消息推送技术在物联网中的应用和演进. 一.物联网架构和关键技术 从开发的角度,无线接入是物联网设备端的核心技术,身份设备管理和消息推送技术是物联网云端的核心技术.而从场景体验的角度,除了前者,还要包括手机的前端开发技术. 在上一篇<一张图读懂基于微信硬件平台的物联网架构>博文中,笔者曾用一张大图详细描述了基于微信硬件平台的物联网架构的组成要素.关键场景.和通信协议

Android Studio初体验之启动AVD模拟器异常:cannot set up guest memory &#39;pc.ram&#39;

启动AVD模拟器异常:Cannot set up guest memory 'pc.ram' 错误信息: HAX is working and emulator runs in fast virt mode Cannot set up guest memory 'pc.ram': Invalid argument Error accepting connect 分析 各种查资料,没有发现网上有同样问题的,在一篇相关文章中找到类似的解决方法. 从语意看,应该是hax安装后没有启动.(不懂hax是什

基于Node.js的跨平台工具LivePool简介

作者:zhanhailiang 日期:2015-01-05 简介 LivePool 是一个基于 NodeJS,类似 Fiddler 支持抓包和本地替换的 Web 开发调试工具,是 Tencent AlloyTeam 在开发实践过程总结出的一套的便捷的 WorkFlow 以及调试方案. 特性 基于 NodeJS, 跨平台 支持 http 抓包和本地替换调试,Https/WebSockets 直接代理转发(暂不支持本地替换) 便捷的 UI 管理界面,跟 Fiddler 类似,降低学习成本 可以脱离