EC20模块

由WIFI模块引入4G模块

4G模块通过 插入SIM卡进行 上网。就像手机插卡才能开移动数据,才能访问网络资源。

WIFI模块则通过连接到 路由器进行上网。

所以4G模块的初始化主要围绕 连接基站开启移动数据 

而WIFI模块主要围绕接入 路由器 

4G优点: WIFI模块需要在有路由器的环境下才能上网,而4G模块就像是开了流量在有基站的环境下就能上网。  

注意: 插入4G模块的SIM卡 也需要有流量。如果卡内没有流量,也上不了网。

如果再用了一段时间后,4G模块无法接入 互联网,有可能是流量不够了。

物理连接

4G模块初始化

重点AT指令: (注意所有AT指令后都有\r\n,在串口助手测试要勾选发送新行)

  • ATE1————指令回显
  • AT+CPIN? ————检查是否有SIM卡
  • AT+CREG? ————检查入网状态
  • AT+CSQ ———— 查看信号强度
  • AT+CGSN  ————得到产品序列号
	/**
		* @brief  测试EC20是否就绪
		* @param  无
		* @retval  EC20_OK 初始化自检成功
		*/
	uint8_t EC20_work_test(void)
	{
			memset(EC20CSQ,0,BUFLEN); 
		//连接快慢也看天线的摆放位置
			if(NULL==EC20_send_cmd((uint8_t *)"AT","OK",150))        {
					if(NULL==EC20_send_cmd((uint8_t *)"AT","OK",200))		              				                
						return SIM_COMMUNTION_ERR;	//通信不上
			}
			
			if(NULL==EC20_send_cmd((uint8_t *)"ATE1","OK",150))		  
							return SIM_COMMUNTION_ERR;	//通信不上
			
			if(NULL==EC20_send_cmd((uint8_t *)"AT+CPIN?","READY",150))	 
					return SIM_CPIN_ERR;			//没有SIM卡

					
			if(NULL==EC20_send_cmd((uint8_t *)"AT+CREG?","2,1",150))		  
					{
							if(strstr((const char*)strEC20_Fram_Record.Data_RX_BUF,"0,1")==NULL)
							{
								if(strstr((const char*)strEC20_Fram_Record.Data_RX_BUF,"0,5")==NULL)
								{
										if(NULL!=EC20_send_cmd((uint8_t *)"AT+CSQ","OK",150))    // 200
										{
												memcpy(EC20CSQ,strEC20_Fram_Record.Data_RX_BUF+15,2); 
										}   
										return SIM_CREG_FAIL;		//等待附着到网络
								}
							}
					}
			
			if(NULL==EC20_send_cmd((uint8_t *)"AT+CGSN","OK",150))  
					return IMEI_ERR;			//IMEI错误
			
			
			/*存储设备识别码IMEI*/
			strncpy(IMEI_Code,(strEC20_Fram_Record.Data_RX_BUF+10),15); 
				return EC20_OK;		
	}

连接MQTT(数据交互)

 if(NULL==EC20_send_cmd((uint8_t *)"AT+CGATT?", ": 1",140))   return 1;  // 检测激活PDP
    if(NULL==EC20_send_cmd((uint8_t *)"AT+QIACT?", "OK",100))    return 2;  // 检测激活ACT
    if(NULL==EC20_send_cmd((uint8_t *)"AT+QIDEACT=1", "OK",120)) return 3;  // 关闭当前连接
    if(NULL==EC20_send_cmd((uint8_t *)"AT+QMTCLOSE=0", NULL,0))  return 4;  // 关闭MQTT客户端
    if(NULL==EC20_send_cmd((uint8_t *)"AT+QMTDISC=0", NULL,0))   return 5;  // 关闭和MQTT服务器的所有连接

    //设置MQTT接收数据的模式
    if(NULL==EC20_send_cmd((uint8_t *)"AT+QMTCFG=\"recv/mode\",0,0,1", "OK",250))	          		return 12;
    
	//为模块打开网络链接
    memset(AtStrBuf,0,BUFLEN);
    sprintf(AtStrBuf, "AT+QMTOPEN=0,\"%s\",%d",Ec20_Mqtt_Ip,Ec20_Mqtt_Port);
    if(NULL==EC20_send_cmd((uint8_t *)AtStrBuf, "+QMTOPEN: 0,0",1500))  //3000            return 13;

    //连接到MQTT服务器
    memset(AtStrBuf,0,BUFLEN);
    sprintf(AtStrBuf, "AT+QMTCONN=0,\"%s\",\"%s\",\"%s\"",Ec20_Mqtt_Clientid,Ec20_Mqtt_Username,Ec20_Mqtt_Password);
    if(NULL==EC20_send_cmd((uint8_t *)AtStrBuf, "+QMTCONN: 0,0,0",250))	   
        return 14; 

	//当前订阅的Topic
    if(NULL==EC20_send_cmd((uint8_t *)AtStrBuf, "+QMTSUB: 0,1,0,0",300))	   
        return 15;	
    
    return 0;

服务器pub Topic就可以给EC20传递数据

串口接收数据。

服务器端sub Topic就可以收到来自EC20的数据。

AT+QMTPUBEX=0,0,0,0,"/device/out/%s"

以上参数的时间在EC官方手册中有,但是都是最大值,如需优化可以调试出最优值。

连接速度跟以下相关:

        天线的摆放位置(向窗边摆)

        距离基站的远近

        如果连了SWD下载器的会连接不上,需要拔掉

        给的延时少了也会出错(参考官方延时+自己调试)

问题

卡没流量

 1.先确认卡是否损坏或插入正确

      AT+QCCID 

      正确返回该卡的ID

 2.AT+CREG? 返回 0,0 或者 0,3

3.AT+CGATT?  返回0   ,代表连不上网

如果能正确识别卡,但连不上网,就是卡没流量了。

一些重要的AT指令

获取 lac ci 确定基站位置
AT+COPS=3,2

AT+COPS?

AT+CREG=2

AT+CREG?

发送短信
AT+CMGF=1

AT+CMGS=195xxxxxx

xxxxxx(content)

1A

1A 代表文本内容的结束

获取时间
AT+QLTS=2

还有很多如打电话,播放音频等功能,感兴趣可以去官方文档里看看。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值