久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 8322|回復: 1
打印 上一主題 下一主題
收起左側

Air800(GPRS+GPS模塊)連接OneNet平臺

[復制鏈接]
跳轉到指定樓層
樓主
ID:265178 發表于 2017-12-22 10:17 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
Air800介紹
Air800是上海合宙通信科技有限公司推出的一款支持GPRS+北斗+GPS的三合一模塊。其開發方式為Luat,Luat = Lua + AT, Luat 是合宙(AirM2M)推出的物聯網開源架構,依托于通信模塊做簡易快捷的開發,將傳統的AT命令用Lua封裝成API,并提供各種功能應用的demo,大大減少用戶的開發成本。詳細資料參見:wiki.openluat點com
PS:一開始準備用安信可的A7模塊來實現將GPS上傳到OneNET平臺上,但是實際開發中發現各種功能都需要自己去實現(MQTT的實現讓我頭疼好久)并且還得外接一個MCU,大幅度增加了開發成本和開發時間,所以不得不放棄這種方案。在后續的選型時,無意間在淘寶上看到Air800,不需要外接MCU和豐富API讓我心動不已,于是買了一塊來嘗鮮,在開發過程中,不得不說Luat開發方式對開發者很友好,省略了很多自己造輪子的過程,所以在這兒也推薦一波。
OneNet平臺介紹
OneNET作為中國移動通信集團推出的一個專業物聯網開放云平臺,提供了豐富的智能硬件開發工具和可靠的服務,助力各類終端設備迅速接入網絡,實現數據傳輸、數據存儲、數據管理等完整的交互流程。
支持公開協議包括EDP、MODBUS、MQTT以及HTTP等多種協議。詳細資料參見:https://open.iot.10086.cn/doc
所需API
Luat封裝了很多的實用API,所以在實現一些功能的時候就無需自己造輪子,直接調用其API即可
mqtt
pack
gps
lbs
json
實現思路
本例通過MQTT將Air800獲取到的GPS坐標發送到OneNET平臺并顯示。
MQTT協議是一個面向物聯網應用的即時通信協議,使用TCP/IP提供網絡連接,能夠對負載內容實現消息屏蔽傳輸,開銷小,可以有效降低網絡流量。OneNET平臺采用的是標準MQTT協議,所以使用合宙提供的MQTT API就能很方便的連上。只需要在OneNET上生成一個應用方可得到MQTT鑒權
Q1:MQTT連接鑒權時,Payload中ClientIdentifier;UserName;UserPassword分別填寫什么?

A: ClientIdentifier: 創建設備時得到的設備ID,為數字字串;     

       UserName: 注冊產品時,平臺分配的產品ID,為數字字串;

       UserPassword: 為設備的鑒權信息(即唯一設備編號,SN),或者為apiKey,為字符串。
OneNET平臺優勢之一可以利用數據點快速生成應用
要想讓數據在OneNET平臺上以數據點形式展現出來就得按照OneNET協議上傳數據,使用OneNET平臺的mqtt協議調試工具可以看到payload以json格式發送,并在json前面加0x01,0x00,0x20(這個字節為json長度),payload格式發送。
json格式如下
  1. {
  2.     "datastreams": [
  3.         {
  4.             "id": "temperature", //數據流名稱或數據流模板名稱
  5.             "datapoints": [
  6.                {
  7.                   "at": "2013-04-22T00:35:43", //上傳數據點時間,可選。如果為空,則設備云會取當前時間。
  8. //如果存在其格式必須為"YYYY-MM-DDThh:mm:ss"的形式(例如:2015-03-22T22:31:12)
  9.                     "value": 42  //上傳數據點值
  10.                 },
  11.                 {
  12.                     "at": "2013-04-22T00:55:43",
  13.                     "value": 84 //上傳數據點值
  14.                 }
  15.             ]
  16.         },
  17.         {
  18.             "id": "key", //數據流名稱或數據流模板名稱
  19.             "datapoints": [
  20.                 {
  21.                     "at": "2013-04-22T00:35:43",//上傳數據點時間,可選。
  22.                     "value": {…}//上傳數據點值
  23.                 },
  24.                 {
  25.                     "at": "2013-04-22T00:35:43",
  26.                     "value": {…}//上傳數據點值
  27.                 }
  28.             ]
  29.         },
  30.         {…}
  31.     ]
  32. }
復制代碼

本例中的json格式為

  1. {
  2.     "datastreams": [
  3.         {
  4.             "id": "gps",
  5.             "datapoints": [
  6.                 {
  7.                     "at": "",
  8.                     "value": {
  9.                         "lon": 106.584,
  10.                         "lat": 29.5707,
  11.                         "ele": 100
  12.                     }
  13.                 }
  14.             ]
  15.         }
  16.     ]
  17. }
復制代碼

可以看到對應不同的數據點,只需要修改“id”和“datapoints”。
部分代碼
所以將GPS數據發送到OneNET平臺上,最關鍵點將獲取到的GPS數據打包為OneNET數據點格式

  1. local function msgPack()
  2.   --打包json
  3.   local torigin =
  4.   {
  5.     datastreams =
  6.     {{
  7.       id = "gps",
  8.       datapoints =
  9.       {{
  10.         at = "",
  11.         value =
  12.         {
  13.           lon = bgps.returnBlng(),      --得到獲取到的經度
  14.           lat = bgps.returnBlat(),      --得到獲取到的緯度
  15.           ele = "100"
  16.         }
  17.       }}
  18.     }}
  19.   }
  20.   local msg = json.encode(torigin)      --對json進行編碼
  21.   local len = msg.len(msg)
  22.   buf = pack.pack("bbbA", 0x01,0x00,len,msg)    --打包數據流字節頭
  23. end
復制代碼

GPS讀取數據處理

  1. --[[
  2.   字符串分割函數,和其他語言的split使用方式類似
  3.   參數:
  4.     s:待分割的字符串
  5.     sp:分割標識符
  6.   返回值:分割得到的字符串,類型為table
  7.   例子:temp = split("a,b,c,d",",")
  8.        temp = {"a","b","c","d"}
  9. ]]
  10. function split(s, sp)  
  11.     local res = {}
  12.     local temp = s  
  13.     local len = 0  
  14.     while true do  
  15.         len = string.find(temp, sp)  
  16.         if len ~= nil then  
  17.             local result = string.sub(temp, 1, len-1)  
  18.             temp = string.sub(temp, len+1)  
  19.             table.insert(res, result)  
  20.         else  
  21.             table.insert(res, temp)  
  22.             break  
  23.         end  
  24.     end  
  25.     return res  
  26. end

  27. local function gpsGet()
  28.   if gps.isfix() == true then           --gps定位成功
  29.      local gpsStr = gps.getgpslocation()   --返回值為E,121.5259850,N,31.2356616格式 所以需要分割
  30.      local temp = split(gpsStr,",")
  31.      blng = temp[2]
  32.      blat = temp[4]
  33.   end
  34.   if gps.isfix() == false then      --gps定位失敗  用基站定位
  35.     sys.timer_start(qrygps,100)
  36.   end
  37. end
復制代碼

完整代碼見:https://github.com/lenghonglin/openLuat_Air800


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:328861 發表于 2018-5-15 10:38 | 只看該作者
有沒有完整代碼?
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 成年女人免费v片 | 91爱爱·com| 欧美日韩一区二区三区不卡视频 | 免费中文字幕日韩欧美 | 欧美黑人国产人伦爽爽爽 | 欧美日韩电影免费观看 | 男女视频在线观看网站 | 久久久视 | 91久久看片 | 久久免费观看视频 | 黄色网络在线观看 | 日韩精品极品视频在线观看免费 | 欧美色性 | 亚洲精品电影在线 | 精品视频99 | 久久久久久国产精品免费免费男同 | 精品国产18久久久久久二百 | 成人在线观看网站 | 午夜国产 | 国产精彩视频在线观看 | 狠狠久久 | 欧美日韩久 | 色资源在线视频 | 精品久久久久国产 | 国产精品一区一区 | 婷婷久久五月 | 国产视频三级 | 久久激情网 | 中文字幕第90页 | 99re在线视频 | 91国内外精品自在线播放 | 中文字幕1区2区3区 亚洲国产成人精品女人久久久 | 中文字幕 国产 | 一区视频在线 | 亚洲国产高清在线 | 1区2区3区视频 | 中文字幕一区二区在线观看 | 一区二区精品 | 日韩一区二区三区在线看 | 国产乱人伦 | 91av在线影院 |