4G模块学习
1、模块介绍
2、建立TCP服务器
2.1、打开电脑cmd串口,输入ipconfig查看ip
2.2、打开网络调试助手进行服务器建立
3、建立TCP客服端,测试能否连山服务器(局域网连接)
4、由于4G模块是通过公网去连接我们服务器,而服务器是建立在局域网中的,所以这里我们需要进行内网穿透,将服务器的ip映射到公网(借助软件花生壳)。
4.1、建立公网ip地址
4.2、连接服务器
5、4G模块上电进行AT指令调试
5.1、接线
5.2、通过串口助手配置4G模块(软件:安信可串口调试助手)
模块出厂默认波特率115200,并且模块上电不进入AT指令模式
5.2.1、进入AT指令模式
5.2.1、查看SIM卡信息,信号强度
5.2.3、修改波特率为9600
查看波特率:AT+UART 返回:+OK=115200,NONE
NONE指没有奇偶校验位。
更改波特率9600:AT+UART=9600,NONE 返回:+OK
改完波特率后需要重启模块:AT+REBT 返回:+OK
5.2.4、更改心跳包
查询心跳包数据:AT+HEARTINFO 返回:+OK=Smart-H
Smart-H为心跳包数据
设置心跳包内容为handsome:
指令:AT+HEARTINFO=1,handsome 成功返回:+OK
更改心跳包时间:
设置成3秒:AT+HEARTM=3 成功返回:+OK
5.3、4G模块连接服务器
连接成功后,服务器会收到来自模块的心跳包
6、4G模块控制LED
通过TCP服务器给4G模块发送open字符串,实现控制开发板上灯的状态。
#include "reg52.h"
#include "intrins.h"
#include <string.h>
#include <stdlib.h>
#define SIZE 12
sfr AUXR = 0x8E;
sbit D6 = P3^6;
sbit D5 = P3^7;
char buffer[SIZE];
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 UART_Init(void) //9600bps@11.0592MHz
{
AUXR = 0x01; //提升系统的电磁辐射
PCON = 0x00; //波特率不加倍,SMOD=0
SCON = 0x50; //方式1工作方式,允许串口接收(REN=1)
TMOD &= 0x0F; //定时器1模式置0,定时器0不变
TMOD |= 0x20; //定时器1模式:M1(1) M0(0),当溢出时TH1存放的值被系统自动装入TL1
TH1 = 0xFD; //9600波特率
TL1 = 0xFD;
TR1 = 1; //打开定时器1
ES = 1; //打开串口中断
EA = 1; //打开总中断
}
void main()
{
Delay1000ms(); //延时1s,让单片机上电后稳定
//配置c51串口的通信方式
UART_Init();
D5 = 1;
D6 = 1; //D6跟D5都是灭
while(1);
}
void UART_Rountion() interrupt 4
{
static int i = 0; //static静态变量,只执行一次
char temp;
if(RI){
RI = 0; //接收中断请求标志位软件恢复
temp = SBUF; //读取缓存区的数据(接收)
if( temp == 'o' || temp == 'c' ){
i = 0;
}
buffer[i++] = temp; //等于两行代码:buffer[i] = temp; i++;
if( buffer[0] == 'o' && buffer[1] == 'p'){
D6 = 0;
i = 0;
memset(buffer,'\0',SIZE);
}
if( buffer[0] == 'c' && buffer[1] == 'l'){
D6 = 1;
i = 0;
memset(buffer,'\0',SIZE);
}
if( i == SIZE ) i = 0; //指向数组最后元素,重新初始化指向数组头
}
if(TI);
}