0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

剖析中移物联网麒麟座开发板代码模块

lcdz66 来源:雨飞工作室 作者:雨飞工作室 2023-05-30 15:32 次阅读

一、简述

麒麟座开发板代码例程由OneNET-基础例程、OneNET-进阶例程、OneNET-RTOS例程组成,由浅入深地演示如何接入OneNET,从最基本的上传数据点,命令接收处理,到网络维持,平台连接维持,到最后的网络错误处理,一步一步演示如何处理这些事情。

下面先以OneNET-基础例程为例,讲解如何接入OneNET。

二、OneNET-基础例程模块分析

5b004246-fe06-11ed-90ce-dac502259ad0.png

1. 代码框架说明

  • 初始化开发板外围硬件;如LED、蜂鸣器、按键等。

  • 初始化网络模组;开发板板载GSM模组-M6312,可插拔的WIFI-ESP8266-01模组。

  • 登录OneNET。

  • 执行相关上下行数据处理。

2. 代码功能简述

演示如何接入OneNET,如何处理OneNET推送的数据。

不具备网络维持能力,掉网后无法处理。

3. 初始化开发板外围硬件-Hardware_Init()函数

根据不同功能所需要用到的外围硬件不同,可根据自己使用的例程查看相应的硬件驱动代码,这里以5b09884c-fe06-11ed-90ce-dac502259ad0.png为例说明

5b0ee558-fe06-11ed-90ce-dac502259ad0.png

麒麟座使用的STM32F103RET6单片机,mini板使用STM32F103C8T6单片机,都是F1系列,编程方式完全一致。

  • 先配置单片机的中断分组,采用2:2配置;

  • 然后初始化systick用来做阻塞延时;

  • 然后初始化串口1和串口2,串口1用来调试打印,串口2和网络模组通信

  • 然后就是初始化LED,蜂鸣器,按键,主要就是GPIO的配置;

  • 最后打印一下,提示硬件初始化完成。

4. 初始化网络模组-ESP8266_Init()函数

5b1d55ca-fe06-11ed-90ce-dac502259ad0.png

WIFI模组的初始化比较简单:

  • 先初始化相关控制的GPIO。

  • 然后先发送AT,测试通信是否OK。

  • 然后就是设置WIFI工作模式、登录路由、连接IP。

  • 如果是GSM模组,前两步相同,初始化控制GPIO、发送AT测试通信。然后是注册、激活网络、连接IP。

5.登录OneNET -OneNet_DevLink()函数

5b260f4e-fe06-11ed-90ce-dac502259ad0.png

主要流程就是获取登录数据,然后发送出去,等待返回。

获取登录数据:

EDP_PacketConnect1(DEVID, APIKEY,256, &edpPacket)

根据devid和apikey通过sdk生成登录数据,保存在edpPacket里边。

发送:

ESP8266_SendData(edpPacket._data,edpPacket._len);

指明要发送的数据和长度即可,调用此函数就会发送到OneNET接入机。

等待结果

ESP8266_GetIPD(250):从硬件层判断时间是否收到

EDP_UnPacketRecv(dataPtr) ==CONNRESP:

EDP_UnPacketConnectRsp(dataPtr):

从软件层解析是否接入成功。

6. 执行相关上下行数据处理

上行数据

5b2d1c76-fe06-11ed-90ce-dac502259ad0.png

执行OneNet_SendData()函数,会调用相关上传功能。

5b31f7dc-fe06-11ed-90ce-dac502259ad0.png

166行,是封装一个json,把要上传的内容写在里边

170行,根据devid、json格式和json封装协议包

175行,将协议包上传。

简单看看166行的内容

5b47a834-fe06-11ed-90ce-dac502259ad0.png

其中led_status.xxx,就是我们要上传的数据,按照json格式写好即可,如果新增数据点,复制高亮三行的任意一行加以扩展,然后把箭头的buf缓存开大一点即可。

下行数据

先判断驱动层是否收到数据,有则调用OneNet_Re**taPtr)函数解析相关功能。

5b60feb0-fe06-11ed-90ce-dac502259ad0.png

判断是否是下发命令,是则回复这个命令,然后做相关命令的处理

5b675508-fe06-11ed-90ce-dac502259ad0.png

三、OneNET-RTOS例程模块分析

5b6f3278-fe06-11ed-90ce-dac502259ad0.png

1. 代码框架说明

  • 初始化开发板外围硬件;如LED、蜂鸣器、按键等。

  • 初始化网络模组;开发板板载GSM模组-M6312,可插拔的WIFI-ESP8266-01模组。

  • 登录OneNET。

  • 执行相关上下行数据处理。

  • 网络维持,网络监测、错误处理。

2.代码功能简述

完整的开发板功能体验,所有传感器数据均上传,并包含一些监测类变量;完备的网络维持、监测、错误处理机制。

后文以与OneNET通讯、网络监测、错误处理为重点进行分析。

3.初始化开发板外围硬件-Hardware_Init()函数--main.c

基本流程和基础例程类似,初始化板载硬件,单片机片内外设等。

这里多了一个功能,将登陆的devid和apikey保存在eeprom里边,可以通过串口1按照资料中的格式进行更改而无需重新下载代码。

4.初始化网络模组- NET_DEVICE_Init ()函数--net_task.c

这个函数不连接具体的ip,仅仅只是让网络模组具备网络接入能力即可。

5. 登录OneNET- -net_task.c

5b7e4e8e-fe06-11ed-90ce-dac502259ad0.png

OneNET_GetLinkIP:获取该协议当前资源最优的接入ip和port。

OneNET_ConnectIP:连接ip和port。

OneNET_DevLink:根据devid和apikey 或者 proid和auth_info登录OneNET设备。

6.执行相关上下行数据处理--net_task.c

上行数据

在net_task.c-- NET_**_Task任务里,红框处,是定时上传的内容,这个任务以50ms周期执行一次,当累计300次-约15s时,可自行更改,触发一次上传数据的标志,箭头所指处。

5b8f1462-fe06-11ed-90ce-dac502259ad0.png

然后在net_task.c--DATA_P_Task任务里判断到标志置位,执行OneNET_SendData(…)函数根据当前的data_stream值去打包一个待上传的数据包,但此时并不上传,而是放入一个单向链表里,原因稍后分析,如果上传成功,则返回值会改变onenet_info.send_data的值,如果错误,则会间隔一段时间后继续回来打包数据。

5ba56708-fe06-11ed-90ce-dac502259ad0.png

最终将数据发送出去的的是net_task.c--DATA_S_Task任务判断表头是否为空,且网络连接正常,然后获取表里数据和对应长度,吧数据发往OneNET。

5bb765a2-fe06-11ed-90ce-dac502259ad0.png

简单说一下,为什么上传一包数据,分了三个步骤(触发、打包、发送),因为这样可以在其他地方方便地上传数据,只需要改变一个变量值即可,而不用调用复杂的打包、发送函数,对函数堆栈要求降低很多;然后发送作为一个单独的任务是为了网络模组稳定性,wifi和gsm发送数据的时间间隔不同,wifi可以快一点,当短时间内有很多包大小不同的数据包待上传时,发送必须要稳定,所以OneNET_SendData(…)只是打包放入链表,发送函数以一个稳定的时间间隔来一包包的发出去。

下行数据

在net_task.c-- RECV_Task任务里边,只有一个函数OneNET_CmdHandle

5bbcd528-fe06-11ed-90ce-dac502259ad0.png

先是调用NET_DEVICE_Read()函数判断驱动层是否收到数据。

然后调用NET_DEVICE_GetIPD(dataPtr)判断是否具有IPD头,这里说明一下,在绝大多数网络模组里,在指令模式下,如果收到一帧网络数据,则会以IPD标识(不同网络模组这个头可能不一样),如果带有IPD头,则说明收到OneNET推来的数据,进入OneNET_RevPro(ipdPtr)函数进行处理。

处理函数里边先通过EDP_UnPacketRecv(cmd)判断推送数据的类型,以EDP为例,有连接响应、命令下发、数据转发、心跳回复等,然后各自处理即可。

最后具体说说命令下发的处理机制。

5bd1e6b6-fe06-11ed-90ce-dac502259ad0.png

先调用EDP_UnPacketCmd(…)函数解析出uuid、uudi长度、命令、命令长度。

然后是调用EDP_PacketCmdResp(…)函数打包命令回复的内容。

然后是调用CALLBACK_Execute(...)函数处理命令,在cmd_callback.c里边可以找到处理的过程

5bddf2c6-fe06-11ed-90ce-dac502259ad0.png

调用CALLBACK_Find_CallBack(…)找到红框处XXX的内容,这是是命令体,后边YYY是命令值,后边会用到

5be3428a-fe06-11ed-90ce-dac502259ad0.png

然后根据命令体对应的回调函数,执行响应的动作,比如redled,

5bf1d3ea-fe06-11ed-90ce-dac502259ad0.png

调用CALLBACK_Find_Value(…)函数找到命令参数YYY

调用CALLBACK_Str2Dec(…)函数转为数值形式,方便执行开关处理。

大家在添加自己的命令和处理内容的时候添加两个地方

5bfd9586-fe06-11ed-90ce-dac502259ad0.png

命令体和命令回调对应表

然后编写命令回调函数即可。

继续回到下行数据处理上来,处理完命令之后,就是释放相关内存,然后调用NET_DEVICE_AddDataSendList(…)函数吧命令回复的内容加入链表,最后置位一下onenet_info.send_data上传一次数据,以更新OneNET设备上的数据。

7. 网络维持—net_task.c

在NET_**_Task任务里边,和数据上传一样的流程,定时发送心跳,然后等待心跳返回正确的结果,以此判断网络是否通畅

5c1672cc-fe06-11ed-90ce-dac502259ad0.png

同样的,在DATA_P_Task任务里边调用OneNET_SendData_Heart()函数打包心跳数据并清除心跳标志,在DATA_S_Task任务里真正发送出去,在OneNET_RevPro()函数里边解析心跳数据,收到则置位心跳标志,然后在OneNET_Check_Heart()来检测心跳标志。

如果在规定时间内检测不到心跳标志,则会检测当前模组状态,根据状态分配错误等级,然后会进入相关错误处理。

5c1e4a2e-fe06-11ed-90ce-dac502259ad0.png

8. 网络监测、错误处理

7中说到,心跳标志检测不到,会进入错误处理,先看看错误等级处理都干了什么:

fault.c--NET_Fault_Process

5c26d068-fe06-11ed-90ce-dac502259ad0.png

将相关标志位清零,在任务里边检查到标志位变化,会执行对应功能,错误等级为1,只是负责重新连接一下ip。

5c2fec8e-fe06-11ed-90ce-dac502259ad0.png

错误等级2就是走初始化流程,去重新初始化一下网络模组了。

5c3fe328-fe06-11ed-90ce-dac502259ad0.png

错误等级3是复位网络模组。

5c46998e-fe06-11ed-90ce-dac502259ad0.png

错误等级4是给网络模组断电后,等待一会,再打开。

那么错误等级如何确定,下面一一截图说明

NET_FAULT_LEVEL_1的场景:

net_task.c--OS_TimerCallBack

在网络定时检测回调里,发送数据未得到回应次数超过规定次数时。

5c65c688-fe06-11ed-90ce-dac502259ad0.png

onenet.c--OneNET_CmdHandle

当收到网络模组返回的连接关闭提示时。

5c80a4d0-fe06-11ed-90ce-dac502259ad0.png

onenet.c-- OneNET_Check_Heart

心跳标志接收超时,且网络模组具备网络能力时。

5c89d0a0-fe06-11ed-90ce-dac502259ad0.png

NET_FAULT_LEVEL_3的场景:

错误2和3通畅搭配使用,在重新初始化之前,先复位一下。

net_task.c--OS_TimerCallBack

当网络断开超过规定时间时。

5c915df2-fe06-11ed-90ce-dac502259ad0.png

onenet.c-- OneNET_Check_Heart

心跳标志接收超时,且网络模组不具备网络能力时。

5c997956-fe06-11ed-90ce-dac502259ad0.png

fault.c

在错误等级1下,在规定次数内还未连接成功时。

5ca8287a-fe06-11ed-90ce-dac502259ad0.png
可以看到,在例程里边有很多地方都在保障网络的通畅性,一旦发生网络错误,则会根据响应状态制定错误处理,争取用最高效的方式重新接入OneNET。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 物联网
    +关注

    关注

    2902

    文章

    44142

    浏览量

    370501
  • 开发板
    +关注

    关注

    25

    文章

    4914

    浏览量

    97100
  • 麒麟
    +关注

    关注

    1

    文章

    220

    浏览量

    13618
  • OneNET
    +关注

    关注

    1

    文章

    51

    浏览量

    12751
  • 中移物联网
    +关注

    关注

    0

    文章

    27

    浏览量

    4826

原文标题:中移物联网麒麟座开发板代码模块分析

文章出处:【微信号:雨飞工作室,微信公众号:雨飞工作室】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    中国移动OneNET麒麟座开发板免费试用

    借助中国移动OneNET麒麟座开发板,30分钟即可搭建自己的智能硬件,迈出进入联网世界的第一步。了解更多>>
    发表于 03-06 16:34

    【OneNET麒麟座试用体验】+开箱贴

    感谢论坛,又可以使用麒麟座,刚刚收到,迫不及待开箱,不得不承认有中国移动的背景,果然大气,包装和做工真的很精美。首先来一张整盒的,有木有很高档的赶脚。打开就可以见到真容了,厉害了我的哥全家福卡细节照
    发表于 03-21 09:59

    【OneNET麒麟座试用体验】我是开箱(OnetNET亮点多多)

    本帖最后由 he07413 于 2017-3-22 16:06 编辑 很幸运再次获得开发板试用资格。这次得到了麒麟座OneNET的试用机会。相比上次的坎坷,这次收到板子的速度简直神速。急吼吼
    发表于 03-22 16:08

    【OneNET麒麟座试用体验】联云平台初体验-HTTP协议下上传温湿度数据到云端

    也修改之后。修改程序里的数据名称。程序下载运行,稍等一会就可以看到网页显示的结果。温度和数度数据被上传。总结:接入云平台比较简单。使用麒麟座OneNET开发板配合中国移动物联网云平台
    发表于 03-24 14:28

    【OneNET麒麟座试用申请】OneNET联网

    项目名称:OneNET联网试用计划:1.将开发板作为设备层,利用OneNET云,上传传感器数据,实现联网的气象站(采用wifi
    发表于 04-05 15:03

    【OneNET麒麟座试用体验】2.麒麟座初步探索-联网使用体验

    的连接起来。楼主做过联网的东西,当时全部都是自己搞的,从数据采集,上传到服务器的接收,处理,存储,数据可视化,微信推送都有实现了一套。其过程有点复杂,稍不注意就会出现问题。麒麟座处于
    发表于 04-12 23:09

    【OneNET麒麟座试用体验】初识OneNET麒麟座硬件

    `今天收到了OneNET麒麟座开发板。能得到使用的机会只能说是幸运的。首先上一张靓照: 板子使用的MCU是STM32F103RET6,带有GSM摸块和Wifi摸块可以联网。带有显示屏接口和I2C接口
    发表于 04-13 23:30

    【OneNET麒麟座试用体验】+ 开发板官方例程和EDP协议初探

    的软硬件文档、原理图等。二、例程代码介绍在程序代码文件夹扎到麒麟座V2.2版本的文件夹,对应本次评测的开发板版本。文件夹中有基础学习例程、
    发表于 04-16 00:19

    【OneNET麒麟座试用体验】+ FreeRTOS例程移植

    麒麟座开发板最新版本资料和例程可在以下链接下载:http://open.iot.10086.cn/bbs/thread-863-1-1.html一、例程代码介绍从下载的源代码中找到
    发表于 04-19 12:47

    【OneNET麒麟座试用体验】数据上传测试

    已经测试过OneNET麒麟座开发板了,这次来尝试与OneNET的连接和数据上传。这也是我们测试这块开发办的主要原因,因为在十几种我们有这种将分散的采集点数据上传到后台的需求。先看看麒麟座
    发表于 05-06 10:48

    【OneNET麒麟座试用体验】(八)OneNET麒麟座试用【结项】

    部分的原理图本次使用的陀螺仪为MPU6050本次使用的直流电机驱动为TB6612姿态检测与驱动电路安装到面包上本次使用的小车底盘组装起来,麒麟座开发板有点大啊目前以更新了:开箱赏析
    发表于 05-21 18:33

    【OneNET麒麟座试用体验】(八)联网平衡车【结项】

    重新编辑项目概述:联网平衡车使用OneNET麒麟座做主控制,可以通过网络发送命令让小车完成前进和后退等操作,并能通过麒麟座上的温湿度等各
    发表于 05-25 10:39

    【OneNET麒麟座试用体验】+麒麟开发板程序下载讲解

    本帖最后由 jianren2 于 2017-5-27 23:26 编辑 【OneNET麒麟座试用体验】麒麟开发板程序下载讲解当大家拿到麒麟开发
    发表于 05-27 23:22

    【OneNET麒麟座试用体验】+麒麟通过HTTP连接WIFI和移动平台互联(100%成功)

    开发板程序里面7.最后一步设置,把开发板的无线账号和密码设置成可以联网的无线路由上就可以了8.点击数据流管理后就可以看到数据了
    发表于 05-27 23:39

    请问onenet麒麟座和nblot有什么区别

    为什么麒麟座上用sim卡能通讯,而nb上用s好m就不能通讯,一个是m6311通讯模块,一个是m5310模块,有啥区别
    发表于 04-16 07:55