C51_ML307C_4G

文章目录

  • 一、ML307C
  • 二、ML307C
    • [   1、波特率](#   1、波特率)
    • [   2、注意事项](#   2、注意事项)
    • [   3、模块测试](#   3、模块测试)
  • 三、ML307C串口调试
    • [   1、TCP](#   1、TCP)
    • [   2、UDP](#   2、UDP)
    • [   3、PING](#   3、PING)
    • [   4、DNS](#   4、DNS)
  • 四、实例代码

一、ML307C

中移物联(比邻智联) ML307C是新一代小尺寸国产化Cat.1 无线通信模组,采用翱捷科技ASR1605 芯片平台,专为物联网应用设计,具备高集成度、低功耗和强大扩展性。

采用行业通用LCC+LGA 封装,可前向兼容ML307系列Cat.1模组,部分型号的外设接口。

ML307C可广泛应用于金融支付、定位追踪、电动两轮车、视频监控等领域。

官方资料: http://onemo10086.com/#/product/detail/729

二、ML307C

1、波特率

模组为自适应波特率模式时,无+MATREADY上报,串口需先输入AT命令,返回OK后可执行后续操作。

(多发送几次AT命令)

2、注意事项

每条AT命令执行完毕后,才能执行下一条命令,不能同时发送多条AT命令。

模组开机返回+MATREADY后,间隔至少2s才能执行AT+CFUN=0或AT+CFUN=1,AT+CFUN=[,]命令默认值为1。

3、模块测试

设备上电,无+MATREADY ,输入 AT,可看到返回信息。

三、ML307C串口调试

1、TCP

AT\r\n

AT\r\n

ATE0\r\n

AT+CPIN?\r\n

AT+CEREG?\r\n

//先尝试关闭0号socket,不需要判断返回

AT+MIPCLOSE=0\r\n

//使用0号socket连接TCP服务器, 服务器地址47.92.31.46(也可以填写域名,域名由于内部需要先DNS域名解析,所以需要等待约8S才可以连接), 服务器端口号 10002

AT+MIPOPEN=0,"TCP","112.125.89.8",33927\r\n

//告诉模组我要使用0号socket发送5字节数据

AT+MIPSEND=0,5\r\n

等待模组返回 >

发送要发送的5字节数据: 11111 (也可以填写16进制数)

模块接收数据,假设0号socket接收到16字节

+MIPURC: "rtcp",0,16,1111111111111111

//创建连接的时候还可以指定本地socket端口号

AT+MIPOPEN=0,"TCP","47.92.31.46",10002,5,0,1000\r\n //指定本地端口号为1000

2、UDP

AT\r\n

AT\r\n

ATE0\r\n

AT+CPIN?\r\n

AT+CEREG?\r\n

//先尝试关闭0号socket,不需要判断返回

AT+MIPCLOSE=0\r\n

//使用0号socket连接UDP服务器, 服务器地址47.92.31.46(也可以填写域名), 服务器端口号 10002

AT+MIPOPEN=0,"UDP","47.92.31.46",10002\r\n

//告诉模组我要使用0号socket发送5字节数据

AT+MIPSEND=0,5\r\n

等待模组返回 >

发送要发送的5字节数据: 11111 (也可以填写16进制数)

模块接收数据,假设0号socket接收到16字节

+MIPURC: "rudp",0,16,1111111111111111

3、PING

AT+MPING="www.baidu.com"\r\n

+MPING: 0,"2409:8C54:870:34E:0:FF:B024:1916",16,60,49

[12:19:52.019]收←◆

+MPING: 0,"2409:8C54:870:34E:0:FF:B024:1916",16,60,49

[12:19:52.099]收←◆

+MPING: 0,"2409:8C54:870:34E:0:FF:B024:1916",16,75,49

[12:19:52.180]收←◆

+MPING: 0,"2409:8C54:870:34E:0:FF:B024:1916",16,75,49

+MPING: "statistics",4,0,60,75,67

4、DNS

AT+MDNSGIP="www.baidu.com"\r\n

+MDNSGIP: "www.baidu.com","2409:8C54:870:34E:0:FF:B024:1916","2409:8C54:870:67:0:FF:B0C2:AD75","120.232.145.185","120.232.145.144"

四、实例代码

ML307C,TCP连接,并发送 "EST_ML307C"

c 复制代码
	#include <REGX52.H>
	#include <string.h>
	
	sbit LED1 = P2 ^ 0;
	sbit LED2 = P2 ^ 1;
	sbit LED3 = P2 ^ 2;
	sbit LED4 = P2 ^ 3;
	sbit LED5 = P2 ^ 4;
	sbit LED6 = P2 ^ 5;
	sbit LED7 = P2 ^ 6;
	sbit LED8 = P2 ^ 7;
	unsigned char AT_OK_Flag = 0;
	unsigned char InData_OK_Flag = 0;
	
	#define SIZE 12
	char buffer[SIZE];
	
	// 串口中断======================================================
	void UART_init() // 设置串行通信 本晶振为11.0592MHZ
	{
	        TMOD = 0x20;
	        TH1 = 0xfd;
	        TL1 = 0xfd; // 波特率9600
	        SM0 = 0;
	        SM1 = 1; // 串口工作方式1 10位异步
	        REN = 1; // 串口允许接收
	        TR1 = 1;
	        EA = 1;
	        ES = 1; // 串口中断
	}
	
	void UART_SendByte(unsigned char Byte) // 字节的发送
	{
	        SBUF = Byte;
	        while (TI == 0);        // 当数据发送完成时,TI会变为一
	        TI = 0;
	}
	
	void UART_INTERRUPT() interrupt 4
	{
	        static int i = 0; // 静态变量,初始化1次
	        char tmp;
	        if (RI)
	        {                        // 中断函数中对接收中断的响应
	                RI = 0; // RI为接受中断数据标志位,接收完数据硬件置1,需要软件置0
	                tmp = SBUF;
	                if(tmp == '>' )
	                {
	                        InData_OK_Flag = 1;
	                }
	                if (tmp == '+' || tmp == 'O' || tmp == 'L')
	                {
	                        i = 0; // 强制W字符为第一位
	                }
	                buffer[i++] = tmp; // 数据偏移
	        }
	        if (buffer[0] == 'O' && buffer[1] == 'K')
	        { // 连接服务器等OK返回值指令的判断
	                AT_OK_Flag = 1;
	                memset(buffer, '\0', SIZE);
	        }
	
	        if (buffer[0] == 'L' && buffer[1] == '1')
	        { // 指令L1灯亮
	                LED1 = 0;
	                memset(buffer, '\0', SIZE);
	        }
	        if (buffer[0] == 'L' && buffer[1] == '0')
	        { // 指令L0灯灭
	                LED1 = 1;
	                memset(buffer, '\0', SIZE);
	        }
	}
	
	// 延时函数======================================================
	void Delay10us(unsigned char t) //@11.0592MHz
	{
	        while (t--)
	        {
	                unsigned char i;
	                i = 2;
	                while (--i)
	                        ;
	        }
	}
	
	void Delay(unsigned int xms) //@12.000MHz
	{
	        unsigned char i, j;
	        while (xms)
	        {
	                i = 2;
	                j = 239;
	                do
	                {
	                        while (--j)
	                                ;
	                } while (--i);
	                xms--;
	        }
	}
	
	// ML307C======================================================
	// ML307C发送AT指令
	// pbuf:AT指令,字符串格式,如:"AT"
	void ML307C_SendCmd(unsigned char *pbuf)
	{
	        while (*pbuf) // 遇到空格跳出循环
	        {
	                UART_SendByte(*pbuf);
	                pbuf++;
	        }
	        UART_SendByte('\r'); // 回车
	        UART_SendByte('\n'); // 换行
	}
	
	// ML307C发送数据到APP
	// pbuf:数据
	void ML307C_SendData(unsigned char *pbuf)
	{
	        while (*pbuf) // 遇到空格跳出循环
	        {
	                UART_SendByte(*pbuf);
	                pbuf++;
	        }
	}
	
	//ML307C模块TCP工作模式初始化
	void ML307C_TCPModeInit(void)
	{
	        UART_init();
	        Delay(1000);
	        
	        LED1 = 0;
	        ML307C_SendCmd("AT"); 
	        while (!AT_OK_Flag); // OK返回值的标志位
	        AT_OK_Flag = 0;
	        
	        LED2 = 0;
	        
	        Delay(1500);
	        ML307C_SendCmd("AT"); 
	        while (!AT_OK_Flag); // OK返回值的标志位
	        AT_OK_Flag = 0;
	        
	        LED3 = 0;
	        
	        ML307C_SendCmd("ATE0"); 
	        while (!AT_OK_Flag); // OK返回值的标志位
	        AT_OK_Flag = 0;
	
	        LED4 = 0;
	        
	        ML307C_SendCmd("AT+CPIN?"); 
	        while (!AT_OK_Flag); // OK返回值的标志位
	        AT_OK_Flag = 0;
	        
	        LED5 = 0;
	        
	        ML307C_SendCmd("AT+CEREG?"); 
	        while (!AT_OK_Flag); // OK返回值的标志位
	
	        if (AT_OK_Flag)
	        {
	                LED8 = 0; // 点亮LED8灯,代表连接服务器初始化成功
	        }
	}
	
	void main()
	{ 
	        LED1 = 1;
	        LED2 = 1;
	        LED3 = 1;
	        LED4 = 1;
	        LED5 = 1;
	        LED6 = 1;
	        LED7 = 1;
	        LED8 = 1;
	        
	        Delay(1000);
	        
	        ML307C_TCPModeInit();
	        
	        while (1)
	        {
	                Delay(1000);
	                ML307C_SendCmd("AT+MIPCLOSE=0"); 
	                Delay(1000);
	                ML307C_SendCmd("AT+MIPOPEN=1,\"TCP\",\"112.125.89.8\",34586"); 
	                while (!AT_OK_Flag); // OK返回值的标志位
	                AT_OK_Flag = 0;
	                
	                ML307C_SendCmd("AT+MIPSEND=1,13"); 
	                while (!InData_OK_Flag); // 可以输入字符串
	                ML307C_SendData("TEST_ML307C\r\n");
	                InData_OK_Flag = 0;
	                
	        }
	}
相关推荐
逐步前行18 小时前
C51_ATGM336H_GPS
51单片机
v先v关v住v获v取1 天前
塔式立体车库5张cad+设计说明书+三维图
科技·单片机·51单片机
v先v关v住v获v取1 天前
杨柳絮收集装置设计cad1张总图+三维图+设计说明书
科技·单片机·51单片机
v先v关v住v获v取1 天前
草莓采摘机器人结构设计2张cad+设计说明书+三维图
科技·单片机·51单片机
恶魔泡泡糖1 天前
51单片机蜂鸣器应用
单片机·嵌入式硬件·51单片机
梁下轻语的秋缘2 天前
I2S与I2C
运维·stm32·单片机·51单片机
Q_21932764552 天前
基于单片机的RFID门禁系统设计
单片机·嵌入式硬件·51单片机
就是蠢啊2 天前
51单片机——LCD1602液晶显示
单片机·嵌入式硬件·51单片机
v先v关v住v获v取2 天前
3D打印机的定量铺粉器设计13张 +三维图+设计说明书
科技·单片机·51单片机