0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

剖析中移物聯(lián)網(wǎng)麒麟座開發(fā)板代碼模塊

lcdz66 ? 來源:雨飛工作室 ? 作者:雨飛工作室 ? 2023-05-30 15:32 ? 次閱讀

一、簡述

麒麟座開發(fā)板代碼例程由OneNET-基礎(chǔ)例程、OneNET-進(jìn)階例程、OneNET-RTOS例程組成,由淺入深地演示如何接入OneNET,從最基本的上傳數(shù)據(jù)點,命令接收處理,到網(wǎng)絡(luò)維持,平臺連接維持,到最后的網(wǎng)絡(luò)錯誤處理,一步一步演示如何處理這些事情。

下面先以O(shè)neNET-基礎(chǔ)例程為例,講解如何接入OneNET。

二、OneNET-基礎(chǔ)例程模塊分析

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

1. 代碼框架說明

  • 初始化開發(fā)板外圍硬件;如LED、蜂鳴器、按鍵等。

  • 初始化網(wǎng)絡(luò)模組;開發(fā)板板載GSM模組-M6312,可插拔的WIFI-ESP8266-01模組。

  • 登錄OneNET。

  • 執(zhí)行相關(guān)上下行數(shù)據(jù)處理。

2. 代碼功能簡述

演示如何接入OneNET,如何處理OneNET推送的數(shù)據(jù)。

不具備網(wǎng)絡(luò)維持能力,掉網(wǎng)后無法處理。

3. 初始化開發(fā)板外圍硬件-Hardware_Init()函數(shù)

根據(jù)不同功能所需要用到的外圍硬件不同,可根據(jù)自己使用的例程查看相應(yīng)的硬件驅(qū)動代碼,這里以5b09884c-fe06-11ed-90ce-dac502259ad0.png為例說明

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

麒麟座使用的STM32F103RET6單片機(jī),mini板使用STM32F103C8T6單片機(jī),都是F1系列,編程方式完全一致。

  • 先配置單片機(jī)的中斷分組,采用2:2配置;

  • 然后初始化systick用來做阻塞延時;

  • 然后初始化串口1和串口2,串口1用來調(diào)試打印,串口2和網(wǎng)絡(luò)模組通信

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

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

4. 初始化網(wǎng)絡(luò)模組-ESP8266_Init()函數(shù)

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

WIFI模組的初始化比較簡單:

  • 先初始化相關(guān)控制的GPIO。

  • 然后先發(fā)送AT,測試通信是否OK。

  • 然后就是設(shè)置WIFI工作模式、登錄路由、連接IP。

  • 如果是GSM模組,前兩步相同,初始化控制GPIO、發(fā)送AT測試通信。然后是注冊、激活網(wǎng)絡(luò)、連接IP。

5.登錄OneNET -OneNet_DevLink()函數(shù)

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

主要流程就是獲取登錄數(shù)據(jù),然后發(fā)送出去,等待返回。

獲取登錄數(shù)據(jù):

EDP_PacketConnect1(DEVID, APIKEY,256, &edpPacket)

根據(jù)devid和apikey通過sdk生成登錄數(shù)據(jù),保存在edpPacket里邊。

發(fā)送:

ESP8266_SendData(edpPacket._data,edpPacket._len);

指明要發(fā)送的數(shù)據(jù)和長度即可,調(diào)用此函數(shù)就會發(fā)送到OneNET接入機(jī)。

等待結(jié)果

ESP8266_GetIPD(250):從硬件層判斷時間是否收到

EDP_UnPacketRecv(dataPtr) ==CONNRESP:

EDP_UnPacketConnectRsp(dataPtr):

從軟件層解析是否接入成功。

6. 執(zhí)行相關(guān)上下行數(shù)據(jù)處理

上行數(shù)據(jù)

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

執(zhí)行OneNet_SendData()函數(shù),會調(diào)用相關(guān)上傳功能。

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

166行,是封裝一個json,把要上傳的內(nèi)容寫在里邊

170行,根據(jù)devid、json格式和json封裝協(xié)議包

175行,將協(xié)議包上傳。

簡單看看166行的內(nèi)容

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

其中led_status.xxx,就是我們要上傳的數(shù)據(jù),按照json格式寫好即可,如果新增數(shù)據(jù)點,復(fù)制高亮三行的任意一行加以擴(kuò)展,然后把箭頭的buf緩存開大一點即可。

下行數(shù)據(jù)

先判斷驅(qū)動層是否收到數(shù)據(jù),有則調(diào)用OneNet_Re**taPtr)函數(shù)解析相關(guān)功能。

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

判斷是否是下發(fā)命令,是則回復(fù)這個命令,然后做相關(guān)命令的處理

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

三、OneNET-RTOS例程模塊分析

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

1. 代碼框架說明

  • 初始化開發(fā)板外圍硬件;如LED、蜂鳴器、按鍵等。

  • 初始化網(wǎng)絡(luò)模組;開發(fā)板板載GSM模組-M6312,可插拔的WIFI-ESP8266-01模組。

  • 登錄OneNET。

  • 執(zhí)行相關(guān)上下行數(shù)據(jù)處理。

  • 網(wǎng)絡(luò)維持,網(wǎng)絡(luò)監(jiān)測、錯誤處理。

2.代碼功能簡述

完整的開發(fā)板功能體驗,所有傳感器數(shù)據(jù)均上傳,并包含一些監(jiān)測類變量;完備的網(wǎng)絡(luò)維持、監(jiān)測、錯誤處理機(jī)制。

后文以與OneNET通訊、網(wǎng)絡(luò)監(jiān)測、錯誤處理為重點進(jìn)行分析。

3.初始化開發(fā)板外圍硬件-Hardware_Init()函數(shù)--main.c

基本流程和基礎(chǔ)例程類似,初始化板載硬件,單片機(jī)片內(nèi)外設(shè)等。

這里多了一個功能,將登陸的devid和apikey保存在eeprom里邊,可以通過串口1按照資料中的格式進(jìn)行更改而無需重新下載代碼。

4.初始化網(wǎng)絡(luò)模組- NET_DEVICE_Init ()函數(shù)--net_task.c

這個函數(shù)不連接具體的ip,僅僅只是讓網(wǎng)絡(luò)模組具備網(wǎng)絡(luò)接入能力即可。

5. 登錄OneNET- -net_task.c

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

OneNET_GetLinkIP:獲取該協(xié)議當(dāng)前資源最優(yōu)的接入ip和port。

OneNET_ConnectIP:連接ip和port。

OneNET_DevLink:根據(jù)devid和apikey 或者 proid和auth_info登錄OneNET設(shè)備。

6.執(zhí)行相關(guān)上下行數(shù)據(jù)處理--net_task.c

上行數(shù)據(jù)

在net_task.c-- NET_**_Task任務(wù)里,紅框處,是定時上傳的內(nèi)容,這個任務(wù)以50ms周期執(zhí)行一次,當(dāng)累計300次-約15s時,可自行更改,觸發(fā)一次上傳數(shù)據(jù)的標(biāo)志,箭頭所指處。

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

然后在net_task.c--DATA_P_Task任務(wù)里判斷到標(biāo)志置位,執(zhí)行OneNET_SendData(…)函數(shù)根據(jù)當(dāng)前的data_stream值去打包一個待上傳的數(shù)據(jù)包,但此時并不上傳,而是放入一個單向鏈表里,原因稍后分析,如果上傳成功,則返回值會改變onenet_info.send_data的值,如果錯誤,則會間隔一段時間后繼續(xù)回來打包數(shù)據(jù)。

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

最終將數(shù)據(jù)發(fā)送出去的的是net_task.c--DATA_S_Task任務(wù)判斷表頭是否為空,且網(wǎng)絡(luò)連接正常,然后獲取表里數(shù)據(jù)和對應(yīng)長度,吧數(shù)據(jù)發(fā)往OneNET。

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

簡單說一下,為什么上傳一包數(shù)據(jù),分了三個步驟(觸發(fā)、打包、發(fā)送),因為這樣可以在其他地方方便地上傳數(shù)據(jù),只需要改變一個變量值即可,而不用調(diào)用復(fù)雜的打包、發(fā)送函數(shù),對函數(shù)堆棧要求降低很多;然后發(fā)送作為一個單獨的任務(wù)是為了網(wǎng)絡(luò)模組穩(wěn)定性,wifi和gsm發(fā)送數(shù)據(jù)的時間間隔不同,wifi可以快一點,當(dāng)短時間內(nèi)有很多包大小不同的數(shù)據(jù)包待上傳時,發(fā)送必須要穩(wěn)定,所以O(shè)neNET_SendData(…)只是打包放入鏈表,發(fā)送函數(shù)以一個穩(wěn)定的時間間隔來一包包的發(fā)出去。

下行數(shù)據(jù)

在net_task.c-- RECV_Task任務(wù)里邊,只有一個函數(shù)OneNET_CmdHandle

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

先是調(diào)用NET_DEVICE_Read()函數(shù)判斷驅(qū)動層是否收到數(shù)據(jù)。

然后調(diào)用NET_DEVICE_GetIPD(dataPtr)判斷是否具有IPD頭,這里說明一下,在絕大多數(shù)網(wǎng)絡(luò)模組里,在指令模式下,如果收到一幀網(wǎng)絡(luò)數(shù)據(jù),則會以IPD標(biāo)識(不同網(wǎng)絡(luò)模組這個頭可能不一樣),如果帶有IPD頭,則說明收到OneNET推來的數(shù)據(jù),進(jìn)入OneNET_RevPro(ipdPtr)函數(shù)進(jìn)行處理。

處理函數(shù)里邊先通過EDP_UnPacketRecv(cmd)判斷推送數(shù)據(jù)的類型,以EDP為例,有連接響應(yīng)、命令下發(fā)、數(shù)據(jù)轉(zhuǎn)發(fā)、心跳回復(fù)等,然后各自處理即可。

最后具體說說命令下發(fā)的處理機(jī)制。

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

先調(diào)用EDP_UnPacketCmd(…)函數(shù)解析出uuid、uudi長度、命令、命令長度。

然后是調(diào)用EDP_PacketCmdResp(…)函數(shù)打包命令回復(fù)的內(nèi)容。

然后是調(diào)用CALLBACK_Execute(...)函數(shù)處理命令,在cmd_callback.c里邊可以找到處理的過程

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

調(diào)用CALLBACK_Find_CallBack(…)找到紅框處XXX的內(nèi)容,這是是命令體,后邊YYY是命令值,后邊會用到

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

然后根據(jù)命令體對應(yīng)的回調(diào)函數(shù),執(zhí)行響應(yīng)的動作,比如redled,

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

調(diào)用CALLBACK_Find_Value(…)函數(shù)找到命令參數(shù)YYY

調(diào)用CALLBACK_Str2Dec(…)函數(shù)轉(zhuǎn)為數(shù)值形式,方便執(zhí)行開關(guān)處理。

大家在添加自己的命令和處理內(nèi)容的時候添加兩個地方

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

命令體和命令回調(diào)對應(yīng)表

然后編寫命令回調(diào)函數(shù)即可。

繼續(xù)回到下行數(shù)據(jù)處理上來,處理完命令之后,就是釋放相關(guān)內(nèi)存,然后調(diào)用NET_DEVICE_AddDataSendList(…)函數(shù)吧命令回復(fù)的內(nèi)容加入鏈表,最后置位一下onenet_info.send_data上傳一次數(shù)據(jù),以更新OneNET設(shè)備上的數(shù)據(jù)。

7. 網(wǎng)絡(luò)維持—net_task.c

在NET_**_Task任務(wù)里邊,和數(shù)據(jù)上傳一樣的流程,定時發(fā)送心跳,然后等待心跳返回正確的結(jié)果,以此判斷網(wǎng)絡(luò)是否通暢

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

同樣的,在DATA_P_Task任務(wù)里邊調(diào)用OneNET_SendData_Heart()函數(shù)打包心跳數(shù)據(jù)并清除心跳標(biāo)志,在DATA_S_Task任務(wù)里真正發(fā)送出去,在OneNET_RevPro()函數(shù)里邊解析心跳數(shù)據(jù),收到則置位心跳標(biāo)志,然后在OneNET_Check_Heart()來檢測心跳標(biāo)志。

如果在規(guī)定時間內(nèi)檢測不到心跳標(biāo)志,則會檢測當(dāng)前模組狀態(tài),根據(jù)狀態(tài)分配錯誤等級,然后會進(jìn)入相關(guān)錯誤處理。

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

8. 網(wǎng)絡(luò)監(jiān)測、錯誤處理

7中說到,心跳標(biāo)志檢測不到,會進(jìn)入錯誤處理,先看看錯誤等級處理都干了什么:

fault.c--NET_Fault_Process

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

將相關(guān)標(biāo)志位清零,在任務(wù)里邊檢查到標(biāo)志位變化,會執(zhí)行對應(yīng)功能,錯誤等級為1,只是負(fù)責(zé)重新連接一下ip。

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

錯誤等級2就是走初始化流程,去重新初始化一下網(wǎng)絡(luò)模組了。

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

錯誤等級3是復(fù)位網(wǎng)絡(luò)模組。

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

錯誤等級4是給網(wǎng)絡(luò)模組斷電后,等待一會,再打開。

那么錯誤等級如何確定,下面一一截圖說明

NET_FAULT_LEVEL_1的場景:

net_task.c--OS_TimerCallBack

在網(wǎng)絡(luò)定時檢測回調(diào)里,發(fā)送數(shù)據(jù)未得到回應(yīng)次數(shù)超過規(guī)定次數(shù)時。

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

onenet.c--OneNET_CmdHandle

當(dāng)收到網(wǎng)絡(luò)模組返回的連接關(guān)閉提示時。

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

onenet.c-- OneNET_Check_Heart

心跳標(biāo)志接收超時,且網(wǎng)絡(luò)模組具備網(wǎng)絡(luò)能力時。

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

NET_FAULT_LEVEL_3的場景:

錯誤2和3通暢搭配使用,在重新初始化之前,先復(fù)位一下。

net_task.c--OS_TimerCallBack

當(dāng)網(wǎng)絡(luò)斷開超過規(guī)定時間時。

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

onenet.c-- OneNET_Check_Heart

心跳標(biāo)志接收超時,且網(wǎng)絡(luò)模組不具備網(wǎng)絡(luò)能力時。

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

fault.c

在錯誤等級1下,在規(guī)定次數(shù)內(nèi)還未連接成功時。

5ca8287a-fe06-11ed-90ce-dac502259ad0.png
可以看到,在例程里邊有很多地方都在保障網(wǎng)絡(luò)的通暢性,一旦發(fā)生網(wǎng)絡(luò)錯誤,則會根據(jù)響應(yīng)狀態(tài)制定錯誤處理,爭取用最高效的方式重新接入OneNET。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 物聯(lián)網(wǎng)
    +關(guān)注

    關(guān)注

    2901

    文章

    44084

    瀏覽量

    370294
  • 開發(fā)板
    +關(guān)注

    關(guān)注

    25

    文章

    4900

    瀏覽量

    97067
  • 麒麟
    +關(guān)注

    關(guān)注

    1

    文章

    220

    瀏覽量

    13615
  • OneNET
    +關(guān)注

    關(guān)注

    1

    文章

    51

    瀏覽量

    12748
  • 中移物聯(lián)網(wǎng)

    關(guān)注

    0

    文章

    27

    瀏覽量

    4824

原文標(biāo)題:中移物聯(lián)網(wǎng)麒麟座開發(fā)板代碼模塊分析

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

收藏 人收藏

    評論

    相關(guān)推薦

    中國移動OneNET麒麟座開發(fā)板免費試用

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

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

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

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

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

    【OneNET麒麟座試用體驗】聯(lián)云平臺初體驗-HTTP協(xié)議下上傳溫濕度數(shù)據(jù)到云端

    也修改之后。修改程序里的數(shù)據(jù)名稱。程序下載運行,稍等一會就可以看到網(wǎng)頁顯示的結(jié)果。溫度和數(shù)度數(shù)據(jù)被上傳。總結(jié):接入云平臺比較簡單。使用麒麟座OneNET開發(fā)板配合中國移動物聯(lián)網(wǎng)云平臺
    發(fā)表于 03-24 14:28

    【OneNET麒麟座試用申請】OneNET聯(lián)網(wǎng)

    項目名稱:OneNET聯(lián)網(wǎng)試用計劃:1.將開發(fā)板作為設(shè)備層,利用OneNET云,上傳傳感器數(shù)據(jù),實現(xiàn)聯(lián)網(wǎng)的氣象站(采用wifi
    發(fā)表于 04-05 15:03

    【OneNET麒麟座試用體驗】2.麒麟座初步探索-聯(lián)網(wǎng)使用體驗

    的連接起來。樓主做過聯(lián)網(wǎng)的東西,當(dāng)時全部都是自己搞的,從數(shù)據(jù)采集,上傳到服務(wù)器的接收,處理,存儲,數(shù)據(jù)可視化,微信推送都有實現(xiàn)了一套。其過程有點復(fù)雜,稍不注意就會出現(xiàn)問題。麒麟座處于
    發(fā)表于 04-12 23:09

    【OneNET麒麟座試用體驗】初識OneNET麒麟座硬件

    `今天收到了OneNET麒麟座開發(fā)板。能得到使用的機(jī)會只能說是幸運的。首先上一張靚照: 板子使用的MCU是STM32F103RET6,帶有GSM摸塊和Wifi摸塊可以聯(lián)網(wǎng)。帶有顯示屏接口和I2C接口
    發(fā)表于 04-13 23:30

    【OneNET麒麟座試用體驗】+ 開發(fā)板官方例程和EDP協(xié)議初探

    的軟硬件文檔、原理圖等。二、例程代碼介紹在程序代碼文件夾扎到麒麟座V2.2版本的文件夾,對應(yīng)本次評測的開發(fā)板版本。文件夾中有基礎(chǔ)學(xué)習(xí)例程、
    發(fā)表于 04-16 00:19

    【OneNET麒麟座試用體驗】+ FreeRTOS例程移植

    麒麟座開發(fā)板最新版本資料和例程可在以下鏈接下載:http://open.iot.10086.cn/bbs/thread-863-1-1.html一、例程代碼介紹從下載的源代碼中找到
    發(fā)表于 04-19 12:47

    【OneNET麒麟座試用體驗】數(shù)據(jù)上傳測試

    已經(jīng)測試過OneNET麒麟座開發(fā)板了,這次來嘗試與OneNET的連接和數(shù)據(jù)上傳。這也是我們測試這塊開發(fā)辦的主要原因,因為在十幾種我們有這種將分散的采集點數(shù)據(jù)上傳到后臺的需求。先看看麒麟座
    發(fā)表于 05-06 10:48

    【OneNET麒麟座試用體驗】(八)OneNET麒麟座試用【結(jié)項】

    部分的原理圖本次使用的陀螺儀為MPU6050本次使用的直流電機(jī)驅(qū)動為TB6612姿態(tài)檢測與驅(qū)動電路安裝到面包上本次使用的小車底盤組裝起來,麒麟座開發(fā)板有點大啊目前以更新了:開箱賞析
    發(fā)表于 05-21 18:33

    【OneNET麒麟座試用體驗】(八)聯(lián)網(wǎng)平衡車【結(jié)項】

    重新編輯項目概述:聯(lián)網(wǎng)平衡車使用OneNET麒麟座做主控制,可以通過網(wǎng)絡(luò)發(fā)送命令讓小車完成前進(jìn)和后退等操作,并能通過麒麟座上的溫濕度等各
    發(fā)表于 05-25 10:39

    【OneNET麒麟座試用體驗】+麒麟開發(fā)板程序下載講解

    本帖最后由 jianren2 于 2017-5-27 23:26 編輯 【OneNET麒麟座試用體驗】麒麟開發(fā)板程序下載講解當(dāng)大家拿到麒麟開發(fā)
    發(fā)表于 05-27 23:22

    【OneNET麒麟座試用體驗】+麒麟通過HTTP連接WIFI和移動平臺互聯(lián)(100%成功)

    開發(fā)板程序里面7.最后一步設(shè)置,把開發(fā)板的無線賬號和密碼設(shè)置成可以聯(lián)網(wǎng)的無線路由上就可以了8.點擊數(shù)據(jù)流管理后就可以看到數(shù)據(jù)了
    發(fā)表于 05-27 23:39

    請問onenet麒麟座和nblot有什么區(qū)別

    為什么麒麟座上用sim卡能通訊,而nb上用s好m就不能通訊,一個是m6311通訊模塊,一個是m5310模塊,有啥區(qū)別
    發(fā)表于 04-16 07:55