<acronym id="s8ci2"><small id="s8ci2"></small></acronym>
<rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
<acronym id="s8ci2"></acronym>
<acronym id="s8ci2"><center id="s8ci2"></center></acronym>
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。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 物聯網
    +關注

    關注

    2870

    文章

    41671

    瀏覽量

    358515
  • 開發板
    +關注

    關注

    25

    文章

    4441

    瀏覽量

    94127
  • 麒麟
    +關注

    關注

    1

    文章

    212

    瀏覽量

    13503
  • OneNET
    +關注

    關注

    1

    文章

    44

    瀏覽量

    12580
  • 中移物聯網
    +關注

    關注

    0

    文章

    27

    瀏覽量

    4743

原文標題:中移物聯網麒麟座開發板代碼模塊分析

文章出處:【微信號:雨飛工作室,微信公眾號:雨飛工作室】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    中國移動OneNET麒麟座開發板免費試用

    借助中國移動OneNET麒麟座開發板,30分鐘即可搭建自己的智能硬件,邁出進入聯網世界的第一步。了解更多>>
    發表于 03-06 16:34

    【OneNET麒麟座試用體驗】+開箱貼

    感謝論壇,又可以使用麒麟座,剛剛收到,迫不及待開箱,不得不承認有中國移動的背景,果然大氣,包裝和做工真的很精美。首先來一張整盒的,有木有很高檔的趕腳。打開就可以見到真容了,厲害了我的哥全家???b class='flag-5'>板細節照
    發表于 03-21 09:59

    【OneNET麒麟座試用體驗】我是開箱(OnetNET亮點多多)

    本帖最后由 he07413 于 2017-3-22 16:06 編輯 很幸運再次獲得開發板試用資格。這次得到了麒麟座OneNET的試用機會。相比上次的坎坷,這次收到板子的速度簡直神速。急吼吼
    發表于 03-22 16:08

    【OneNET麒麟座試用體驗】聯云平臺初體驗-HTTP協議下上傳溫濕度數據到云端

    也修改之后。修改程序里的數據名稱。程序下載運行,稍等一會就可以看到網頁顯示的結果。溫度和數度數據被上傳??偨Y:接入云平臺比較簡單。使用麒麟座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
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
    <acronym id="s8ci2"><small id="s8ci2"></small></acronym>
    <rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
    <acronym id="s8ci2"></acronym>
    <acronym id="s8ci2"><center id="s8ci2"></center></acronym>