news 2026/5/30 20:14:56

C51_ML307C_4G

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
C51_ML307C_4G

文章目录

  • 一、ML307C
  • 二、ML307C
    • 1、波特率
    • 2、注意事项
    • 3、模块测试
  • 三、ML307C串口调试
    • 1、TCP
    • 2、UDP
    • 3、PING
    • 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”

#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;unsignedcharAT_OK_Flag=0;unsignedcharInData_OK_Flag=0;#defineSIZE12charbuffer[SIZE];// 串口中断======================================================voidUART_init()// 设置串行通信 本晶振为11.0592MHZ{TMOD=0x20;TH1=0xfd;TL1=0xfd;// 波特率9600SM0=0;SM1=1;// 串口工作方式1 10位异步REN=1;// 串口允许接收TR1=1;EA=1;ES=1;// 串口中断}voidUART_SendByte(unsignedcharByte)// 字节的发送{SBUF=Byte;while(TI==0);// 当数据发送完成时,TI会变为一TI=0;}voidUART_INTERRUPT()interrupt4{staticinti=0;// 静态变量,初始化1次chartmp;if(RI){// 中断函数中对接收中断的响应RI=0;// RI为接受中断数据标志位,接收完数据硬件置1,需要软件置0tmp=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);}}// 延时函数======================================================voidDelay10us(unsignedchart)//@11.0592MHz{while(t--){unsignedchari;i=2;while(--i);}}voidDelay(unsignedintxms)//@12.000MHz{unsignedchari,j;while(xms){i=2;j=239;do{while(--j);}while(--i);xms--;}}// ML307C======================================================// ML307C发送AT指令// pbuf:AT指令,字符串格式,如:"AT"voidML307C_SendCmd(unsignedchar*pbuf){while(*pbuf)// 遇到空格跳出循环{UART_SendByte(*pbuf);pbuf++;}UART_SendByte('\r');// 回车UART_SendByte('\n');// 换行}// ML307C发送数据到APP// pbuf:数据voidML307C_SendData(unsignedchar*pbuf){while(*pbuf)// 遇到空格跳出循环{UART_SendByte(*pbuf);pbuf++;}}//ML307C模块TCP工作模式初始化voidML307C_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灯,代表连接服务器初始化成功}}voidmain(){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;}}
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/30 18:46:34

【Java】JDK动态代理 vs CGLIB代理 深度对比

JDK动态代理 vs CGLIB代理 深度对比 一、核心原理差异 JDK动态代理 基于接口实现&#xff0c;通过反射机制在运行时创建代理类。核心类是 java.lang.reflect.Proxy 和 InvocationHandler。 关键机制&#xff1a; 代理类必须实现至少一个接口生成的代理类继承 Proxy 类并实现目标…

作者头像 李华
网站建设 2026/5/30 0:40:21

工业电子中PCB工艺焊接质量控制指南

工业电子中PCB焊接质量控制实战指南&#xff1a;从材料选型到缺陷根治在工业设备的“心脏”深处&#xff0c;一块小小的PCB板承载着整个系统的灵魂。它不像消费电子产品那样追求轻薄炫酷&#xff0c;而是要在高温、高湿、强振动甚至电磁干扰严重的环境下稳定运行十年以上。一旦…

作者头像 李华
网站建设 2026/5/28 21:35:43

借助Dify镜像,轻松实现多模型协同的复杂AI工作流

借助Dify镜像&#xff0c;轻松实现多模型协同的复杂AI工作流 在企业纷纷拥抱大语言模型&#xff08;LLM&#xff09;的今天&#xff0c;构建一个能真正落地的AI应用却远比想象中困难。你有没有遇到过这样的场景&#xff1a;好不容易调通了一个RAG流程&#xff0c;结果换了个模型…

作者头像 李华
网站建设 2026/5/28 20:45:21

Dify平台如何实现跨语言的翻译辅助?

Dify平台如何实现跨语言的翻译辅助&#xff1f; 在全球化浪潮席卷各行各业的今天&#xff0c;企业面对的不再只是本地市场&#xff0c;而是遍布全球的用户群体。随之而来的挑战是&#xff1a;如何高效、准确地处理多语言内容&#xff1f;传统机器翻译系统虽然能完成基础转换&am…

作者头像 李华
网站建设 2026/5/28 18:14:29

Dify开源项目Roadmap路线图公开披露

Dify开源项目Roadmap路线图深度解读 在大模型技术席卷全球的今天&#xff0c;我们正站在一个关键的转折点上&#xff1a;AI不再只是实验室里的前沿探索&#xff0c;而是逐步渗透进企业真实业务场景中的生产力工具。然而&#xff0c;从“能用”到“好用”&#xff0c;中间隔着一…

作者头像 李华
网站建设 2026/5/30 6:12:03

一文说清QTimer单次与周期定时的区别与选择

QTimer单次与周期定时&#xff1a;深入理解机制差异与工程选型 在开发一个复杂的Qt应用时&#xff0c;你是否曾遇到过这样的问题&#xff1a; - 界面卡顿&#xff0c;明明只设置了一个“每秒刷新”的定时器&#xff0c;CPU占用却居高不下&#xff1f; - 登录失败后禁用按钮30…

作者头像 李华