目录
3.6.1 模块使用
3.6.2 公网IP的服务器地址
3.6.3 AT指令控制模块联网
3.6.4 代码实现
3.6.1 模块使用
说明
- 基于串口AT指令的开发方式
- 有两种工作模式,默认是透传模式,通过其他方式进入AT指令模式,后续有说明
- 注意插卡不要出错,下图红色位置为SIM卡状态灯,亮才是正常
- 软件和用户手册下载地址 https://www.ebyte.com/product-view-news.html?id=1102
开始使用
工具
串口调试助手,网络调试助手,用户手册(AT 指令),均可在以上网址中下载到
3.6.2 公网IP的服务器地址
借助花生壳软件
1. 注册花生壳账号
2. 下载花生壳软件
1. 设置一个 TCP 服务器
1. 内网穿透
测试
3.6.3 AT指令控制模块联网
在测试之前,将电源、天线、SIM 卡、串口线等硬件连接好。
1. 打开串口连接 4G 模块,串口出产默认波特率是 115200 ,可以自行根据用户手册修改
2. 进入 AT 指令模式,在串口助手内发送 +++ (不要勾选发送新行),必须在发送 +++ 指令 3s 内发送其
他任意 AT 指令,比如 AT+CPIN
3. 观察 SIM 卡灯是否亮起, AT+ICCID 获得 SIM 卡信息,确认 SIM 卡安装完好 返回数据:
+OK=89860116838013413419
检查信号是否正常,通过 AT+CSQ 指令检查信号值,建议插入信号天线,返回数据: +OK=31
4. AT+SOCK=TCPC,103.46.128.21,52541 连接 socket 服务器,
103.46.128.21 是公网 IP 地址,通过花生壳获得, 26532 是端口号,参数之间逗号隔开
5. AT+LINKSTA查看连接状态,如果第四步没有问题,此时串口返回 +OK=Connect
使用
重启后,模块自动进入透传模式,直接可以和服务器进行通信
踩坑
1. SIM卡方向装反了
2. 进入 AT 指令,认真操作哦
3. AT+SOCK=TCPC,103.46.128.21,26532是正确连接socket 服务器的方式,官方给的文档有错误引导
有效使用的样子
3.6.4 代码实现
//通过4g模块连接网络,收到数据包op开灯,收到数据包cl关灯
#include "reg52.h"
#include "intrins.h"
#include <string.h>
#define SIZE 12
sfr AUXR = 0x8E;
sbit D5 = P3^7;
char cmd[SIZE];
void UartInit(void) //9600bps@11.0592MHz
{AUXR = 0x01;SCON = 0x50; //配置串口工作方式1,REN使能接收TMOD &= 0xF0;TMOD |= 0x20;//定时器1工作方式位8位自动重装TH1 = 0xFD;TL1 = 0xFD;//9600波特率的初值TR1 = 1;//启动定时器EA = 1;//开启总中断ES = 1;//开启串口中断
}
void Delay1000ms() //@11.0592MHz
{unsigned char i, j, k;_nop_();i = 8;j = 1;k = 243;do{do{while (--k);} while (--j);} while (--i);
}
void sendByte(char data_msg)
{SBUF = data_msg;while(!TI);TI = 0;
}
void sendString(char* str)
{while( *str != '\0'){sendByte(*str);str++;
}
}
void main()
{D5 = 1;//配置C51串口的通信方式UartInit();while(1){Delay1000ms();//往发送缓冲区写入数据,就完成数据的发送//sendString("chenlichen shuai\r\n");}
}
void Uart_Handler() interrupt 4
{static int i = 0;//静态变量,被初始化一次char tmp;if(RI)//中断处理函数中,对于接收中断的响应{RI = 0;//清除接收中断标志位tmp = SBUF;if(tmp == ':'){i = 0;}cmd[i++] = tmp;if(cmd[0]== ':' && cmd[1] == 'o' && cmd[2]=='p'){D5 = 0;//点亮D5i = 0;memset(cmd,'\0',SIZE);}if(cmd[0]== ':' && cmd[1] == 'c' && cmd[2]=='l'){D5 = 1;//熄灭D5i = 0;memset(cmd,'\0',SIZE);}if(i == 12) i = 0;}if(TI);
}