基于STM32的有方科技(银而达)N58模块与OneNet平台互联

本文档详细介绍了如何使用STM32F103ZET6开发板和有方科技N58模块,通过OneNet平台的EDP协议实现物联网数据上传。首先,在OneNet平台上创建EDP产品和设备,分配APIKey,然后在STM32中编写代码,通过AT指令建立TCP连接,发送EDP数据包完成设备关联和数据上传。文中提供了创建产品和设备的步骤,N58模块的上网流程,以及代码实现的关键步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一.简介

        最近做了一个物联网方面的项目,就是利用有方科技(银尔达)N58模块实现与OneNet物联终端平台的互联,采用的是OneNet平台的EDP协议,最终实现了数据的上传,后面由于没做了,命令的下发就没有搞。之前做的时候,发现N58这个模块网上资料很少,特别是基于STM32开发板的资料基本没有,官方也只是提供基本的AT指令,没有什么例程,对于新手来说可能学起来有点困难。因此特地挤出一点时间写一篇(其实是一个专栏,一次也写不完,无奈)关于这方面的博客,也是对N58这个模块的实际使用做一个入门的介绍吧。

二.使用的硬件和软件

        硬件:stm32f103zet6开发板一块;有方Core-N58-G-A测试套餐(AT固件,带GPS)等

        软件:Keil5;OneNet平台;串口调试助手等

三.实现过程

1.最终效果图

        最终实现的效果是,给开发板和N58模块供电,N58模块自动连接网络,并连接上OneNet平台,然后将要上传的数据连续上传给OneNet平台,效果图如下所示:

        当然,这里是静态的图,看不到实际自动更新的过程,不过实际是可以的。

2.开发流程

2.1.在OneNet平台上创建一个EDP协议的产品和设备

        注册OneNet平台账号这里就不过多赘述,应该大家都会。

        登录OneNet账号,进入 控制台->全部产品服务->多协议接入->EDP->添加产品,眼睛比较灵活的,可以直接跳过下面截图,看文字说明,没找到的具体可以看下面截图操作流程。

        点击控制台:

         点击全部产品服务:

        点击多协议接入:

         点击EDP:

         点击添加产品:(注意,这里如果你是第一次打开,是没有任何东西的,因为我之前做过测试,所以这里是有内容的)

         点击添加产品后就会弹出一个小界面框,里面是你需要填写的一些设备内容,具体如下图所示:

         这里说明一下,产品名称,产品行业,产品类别,产品简介可以任意填写。联网方式选移动蜂窝网络,设备接入协议必须选EDP,操作系统选无(这里我使用的STM32代码没有使用操作系统,你也可以根据自己的来,不过后面提供的代码可能会有区别),网络运营商按你N58上使用的SIM卡来选,如果使用的联通的卡就选联通,一次类推,填完后点击确定,下面是我的配置信息:

         产品添加成功的画面:

         这里你可以选择立即添加设备,也可以暂不添加。这里我选择暂不添加。这里我稍微解释一下,为什么添加一个产品和还要添加设备,每一个设备对应的是一个具体的硬件设备,而多个相同的设备构成一个产品。

        点击刚刚创建的产品进入产品详情页:

         这里左侧的方框中对应的是该产品下的一些设备和一些设置,上面方框中是该产品的一些基本信息,其中比较重要的有产品ID和Master-APLkey,这两个信息后面登录中可以用到,也可以不用到,后面再详细解答。

        点击设备列表,添加设备:

         添加设备和添加产品步骤有一点类似:

         其中,设备名称和鉴权信息任意填写,只要满足字数要求就行,设备数据保密性如果选公开,其他人就可以看到此设备的数据,设备描述和设备标签暂时可以不写,填完信息后点击添加,然后在设备列表中就可以看到刚刚添加的设备了。

        这里我们看到设备的状态是离线的,这是因为没有实际的硬件设备连接上OneNet平台上并于创建的这个设备相关联,我们下面要做的就是将实际的硬件设备(N58)与创建的设备关联起来。不过创建设备后,还要做一些准备工作。 因为要想与创建的设备相关联,需要两个信息,一个是设备ID,一个是鉴权信息,设备ID是在创建设备时系统自动分配的,而鉴权信息是需要我们自己手动分配的。当然你也可以采用产品的鉴权信息(APIkey),因为产品的APIkey是对这个产品下的所有设备都有用,这样以来就比较混乱了,所以我一般采用每一个设备单独生成一个鉴权信息(APIkey),这个APIkey只对这个设备有用。生成对应设备的APIkey操作如下:

        点击权限管理->添加APIKey:

         按要求输入APIKey名称,点击添加:

         添加完APIKey后,可以看到该APIKey的详细信息,关联的设备数为0:

        生成APIKey后,要做的就是将该APIKey与上面我们创建的设备相关联起来,简单点来说就是将该APIKey分配给该设备,然后就可以根据设备ID和该APIKey连接该设备了,APIKey可以简单理解为密码,没有此密码就不能和与之关联的设备通信。

        点击关联,如上图所示。选择与之关联的设备,这里我们选择之前创建的设备:

         查看该APIKey关联设备数是否为1,为1关联成功。

         到这里我们就在OneNet平台上创建了一个基于EDP协议的产品,该产品中创建了一个设备,并为该设备创建了鉴权信息(APIKey)。下面要做的就是编程实现N58模块和刚刚创建的设备相关联,实现数据的上传。在编程之前,还要简单介绍以下OneNet平台的EDP协议和N58实现上网的流程。

2.2.OneNet平台的EDP协议简介

        EDP (Enhanced Device Protocol增强设备协议)是OneNET平台根据物联网特点专门定制的完全公开的基于TCP的协议,可以广泛应用到家居、交通、物流、能源以及其他行业应用中。

        支持:长连接协议;数据加密传输;平台消息下发;端到端数据发送;终端数据上报,支持的数据上报类型有:浮点型,整型,字符串,JSON对象和二进制数据。

        EDP协议适用于设备和平台需要保持长连接点对点控制的使用场景。基于TCP协议的,该协议只传输数据包到达目的地,不保证传输的顺序与到达的顺序相同,事务机制需要在上层实现;若客户端同时发起两次请求,服务器返回时,不保障返回报文的顺序。EDP协议适合于数据的长连接上报、透传、转发、存储、数据主动下发等场景。

        关于EDP协议的文档,我会在后面的资料中给出,编程十分需要这个文档,结合代码的注释和EDP协议文档可以很好的理解代码(这里说这些好像还有一点早了,不管了,大家看得懂就行了)。

2.3.N58上网流程介绍

        N58与单片机交互只需要使用到串口,而N58与网络的连接需要使用到AT指令,简单来说单片机通过串口给N58发送AT指令,N58执行指令从而实现联网。下图就是N58连接网络的基本流程:(截图来自资料里提供的N58-AT固件用户手册,这也是银而达官方提供的资料,也可以从其官网下载)

 

        这里插入一张AT指令调试的截图,使用串口助手通过串口给N58发送AT指令,观察其返回的是什么。

         上图中,蓝色的行表示串口助手发送的AT指令,绿色的行表示N58接收串口助手发送的AT指令后返回给串口助手的信息,可以看到返回的信息中先是重复一遍指令,然后再返回指令执行的情况。这就是AT指令执行的基本过程。

        另外,想要看AT指令具体的操作与解释,可以看资料里提供的N58-AT命令手册,里面有详细的介绍和使用方法,这里不多说。

        经过上面8步操作后,仅仅只完成了N58联网的初始化,通俗的说此时N58的SIM卡有信号,有网,但是你想要访问某一个网页,你还需要输入网址。这里我们想要连接上OneNet平台的EDP设备,就需要使用TCP协议去链接OneNet平台上的EDP设备(前面讲过EDP协议是基于TCP协议的,所以要使用TCP协议连接),OneNet平台为每一种协议的设备的连接都提供的IP和端口号,如下图所示:

        上述接入地址可以在OneNet平台上的开发文档中查看, 放个链接吧接入地址_开发者文档_OneNET (10086.cn)

         那么如何使用TCP协议去连接指定的IP和端口呢?AT指令里有对AT指令的详细介绍,指令格式为”AT+TCPSETUP=链路编号,目的IP地址,目的端口号“,我这里使用的是AT+TCPSETUP=0,182.230.40.42,876

         到这里就实现了使用TCP协议连接到OneNet平台了,但是想要连接上之前创建的设备,还需要以EDP协议的格式发送链接设备的请求,其实就是发送EDP协议包。在发送链接设备的请求之前,还需要了解使用AT指令发送TCP数据的命令,具体如下图所示:

        在发送TCP数据的AT指令中,包含了要发送的数据,而这里的数据指的就是以EDP协议格式包装的各种各样的数据包,比如连接请求包等等。

        看到这里是不是都有一点迷糊了,其实我自己写的也有点迷糊了,过程我清楚,只是不知道怎么去很好的阐述,让大家很好的理解。这里给N58连接OneNet平台上的设备做一个总结吧!

1.N58模块联网初始化,主要包括检查SIM是否正常,信号是否可用,是否已联网;

2.使用AT指令,建立TCP连接,作用是使N58和OneNet平台建立TCP连接,为后面进行数据传输做准备;

3.使用AT指令,发送TCP数据,其中TCP数据中包含以EDP格式出现的各种数据包,用来完成不同的功能,数据包的格式和作用可查看资料中的EDP协议文档。

        这里我觉得有一点绕,既有TCP又有EDP可能不好理解,其实TCP协议主要是用来连接OneNet平台的,用于网络连接,而EDP协议仅仅用在TCP数据传输中的数据打包,通过TCP协议连接平台并将数据传输给平台后,平台是以EDP的数据格式来解析TCP传输过来的数据,从而明白数据是什么意思。 

2.4.EDP协议格式

        EDP协议格式我这里就不展开讲了,详见资料里的EDP协议文档。

2.5.小结

        第二部分主要是讲解了N58与OneNet平台连接并于设备相关联的步骤和流程,其中只对在OneNet平台上创建EDP产品和设备进行了详细的介绍,基本是手把手的操作,而对于N58关联设备和进行数据传输只进行了流程的介绍,没有详细解释,这是因为后面讲代码的部分会详细讲解,这里只是让大家有一个基本的流程的掌控。

3.代码详解

注意:如果你和我使用的都是stm32f103zet6开发板,只需要下载整个工程并更改bsp_onenet.h头文件中的设备ID和APIKEY即可。如果不同按下面步骤来。

3.1.使用CubeMx创建工程(只需要初始化一个串口即可,不详细讲解,使用标准库也可以,资料里提供的代码是基于HAL库的)

3.2.添加提供的驱动文件

        驱动文件文件及其作用:

1.bsp_n58.c:主要包括了AT指令的发送,N58建立TCP链接等;

2.bsp_edpkit.c:主要包括EDP协议的数据包格式的封装;

3.bsp_usart.c:串口相关函数的定义;

4:bsp_onenet.c:主要包括与OneNet平台设备的关联和数据上传,以及将数据数据封装为JSON格式的函数。

3.3.改设备ID和APIKey

       bsp_onenet.h头文件中将设备ID和APIKEY更改为自己的,如下图所示。

3.4.开启串口接收中断

 3.5.编辑串口中断处理函数

3.6.编写主函数

 

3.7.连接好线路,下载程序,查看设备是否在线

 

         可以看到此时设备已经连接上了,查看数据流,也可以看到数据的上传(这里我上传的是一个固定的值)。

        最后讲一下,代码的注释我写的很清楚,这里不细讲,这篇博客写了好久了,有一点写不下去了感觉。另外,上传的数据在bsp_onenet.c中的函数OneNet_FillBuf()中,只需更改下图方框中的数字更改为你想要上传的参数即可,这里我只是为了演示,直接写的常数。

        好的,就写到这里吧,最后附上所有资料吧。祝大家学习愉快!!

 链接:https://pan.baidu.com/s/1XMk6efV7zqr2AQdwY1QjUw 
提取码:8ezg 
 

 

 

         

        

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值