问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

ML307A模组连接ONENET平台(AT指令步骤教程)

创作时间:
作者:
@小白创作中心

ML307A模组连接ONENET平台(AT指令步骤教程)

引用
CSDN
1.
https://m.blog.csdn.net/xiewengeng/article/details/141683727

本文将详细介绍如何使用ML307A模组连接OneNET平台,并通过AT指令实现数据的发送和接收。文章将从缓存模式配置、MQTT连接设置、数据订阅等多个方面进行讲解,帮助开发者快速掌握这一过程。

废话不多说,先上连接源码

这里配置的为缓存模式,是指在4G模组接收到发送过来的数据时候可以将数据放入模组的缓存区,在需要数据的时候区进行读取再解析,这样在单片机执行其他操作时候也不会造成数据的丢失,在使用如下AT指令步骤便可以连接上ONENET,在云平台即可看到设备在线‘

前提设备ID,产品ID,token这些不能出错,以下代码使用循环三次发送,防止一次设置不成功,只有有接收到OK即跳出当前循环。

for (int attempt_count = 0; attempt_count < 3; attempt_count++)
    {
        //连接到网络后必须要发送AT+MQTTCFG="clean",0,1(onenet要求clean参数必须是1)
        buf_len = sprintf(str_buf, "AT+MQTTCFG=\"clean\",0,1\r\n");	// 清除会话
        UART2_Send_String(str_buf,buf_len);
        mdelay(50);
        memset((void *)byRxBuf_2, 0, sizeof(byRxBuf_2));
        UART2_Receive_String();
        mdelay(1200);
        if(strstr((const char *)byRxBuf_2,"OK"))//等待接收OK后退出
        {
            break;
        }
    }
    //配置4G模组为接收缓存模式
    for(int attempt_count=0;attempt_count<3;attempt_count++)
    {
        memset((void *)byRxBuf_2, 0, sizeof(byRxBuf_2));//清空UART2串口接收缓存
        buf_len = sprintf(str_buf, "AT+MQTTCFG=\"cached\",0,1\r\n");//获取当前要发送的AT指令字符串缓存内容
        UART2_Send_String(str_buf, buf_len);            //UART2串口发送当前AT指令
        mdelay(500);                                    //延时等待
        UART2_Receive_String();                         //UART2串口接收数据
        if(strstr((const char *)byRxBuf_2,"OK"))        //UART2串口正确接收到4G模组返回的“OK”结果后退出当前循环查询操作
        {
            break;
        }
    }
    //设置MQTT连接相关参数并连接服务器
    for(int attempt_count=0;attempt_count<3;attempt_count++)
    {
        //获取当前要发送的AT指令字符串缓存内容(连接MQTT服务器客户端ID、账号、密码)
        //示例:AT+MCONFIG=0,"mqtt.dgjiedan.com","18833","bzwmt","bz1122"
        memset((void *)byRxBuf_2, 0, sizeof(byRxBuf_2));//清空UART2串口接收缓存
        buf_len = sprintf(str_buf, "AT+MQTTCONN=0,\"%s\",%d,\"%s\",\"%s\",\"%s\"\r\n",MQTT_URL,MQTT_Port,MQTT_Imei,MQTT_Count,MQTT_Password);
        UART2_Send_String(str_buf, buf_len);            //UART2串口发送当前AT指令
        mdelay(1000);                                   //延时等待
        UART2_Receive_String();                         //UART2串口接收数据
        if(strstr((const char *)byRxBuf_2,"OK"))        //UART2串口正确接收到4G模组返回的“OK”结果后退出当前循环设置操作
        {
            break;
        }
    }
//订阅下发数据主题
    for(int attempt_count=0;attempt_count<3;attempt_count++)
    {
        //示例:AT+MQTTSUB=0,"world",1,"hello",2(0:MQTT客户端标识符,范围:0~5;1、2:消息交付质量等级)
        memset((void *)byRxBuf_2, 0, sizeof(byRxBuf_2));//清空UART2串口接收缓存
        buf_len = sprintf(str_buf, "AT+MQTTSUB=0,\"$sys/%s/%s/thing/property/post/reply\",1\r\n",MQTT_Count,MQTT_Imei);//获取当前要发送的AT指令字符串缓存内容
        UART2_Send_String(str_buf, buf_len);            //UART2串口发送当前AT指令
        mdelay(500);                                    //延时等待
        UART2_Receive_String();                         //UART2串口接收数据
        if(strstr((const char *)byRxBuf_2,"OK"))        //UART2串口正确接收到4G模组返回的“OK”结果后退出当前循环查询操作
        {
            break;
        }
    }  

数据的发布一定要注意格式问题!!!,长传数据不成功基本都是格式问题。

void ML307A_AT_MQTT_PUB(void)
{
    //获取当前要发送的AT指令字符串缓存内容(加载需要上报的各个参数值及发布主题:mt_collect)
    buf_len = sprintf(str_buf, "AT+MQTTPUB=0,\"$sys/%s/%s/thing/property/post\",0,0,0,0,\"\"temp2\":{\"value\":%d}\"\r\n",MQTT_Count,MQTT_Imei,99);
    UART2_Send_String(str_buf, buf_len);        //UART2串口发送当前AT指令
}  

ML307A 模组简介

ML307A 是一款集成度高、体积小的物联网通信模组,支持多种无线通信协议,如 LoRa、NB-IoT 等。它具有低功耗、远程通信等特点,适用于多种物联网场景。

主要特性:

  • 支持 LoRa 和 NB-IoT 等多种无线通信标准。
  • 提供丰富的 GPIO 接口。
  • 内置多种传感器支持。

关键接口:

  • UART 接口:用于与微控制器或其他设备通信。
  • GPIO 接口:可以连接外部传感器或执行器。
  • 电源接口:用于供电。

OneNET 平台概述

OneNET 是中国移动推出的一款物联网开放平台,它提供了从数据采集、存储到分析的一站式解决方案。

主要功能:

  • 设备管理:注册、监控设备状态。
  • 数据存储与分析:收集设备数据,提供数据分析工具。
  • 应用开发:支持 API 接口调用,方便开发者快速构建应用。

注册流程:

  1. 访问 OneNET 官网(https://open.iot.10086.cn/)。
  2. 使用手机号码或邮箱注册账号。
  3. 完善个人信息,包括企业或个人认证信息

连接AT指令步骤

有需要的可以联系要参考手册。

本文原文来自CSDN

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号