Air800(GPRS+GPS模块)连接OneNet平台
来源:互联网 发布:淘宝口红代购知乎 编辑:程序博客网 时间:2024/06/01 07:54
Air800介绍
Air800是上海合宙通信科技有限公司推出的一款支持GPRS+北斗+GPS的三合一模块。其开发方式为Luat,Luat = Lua + AT, Luat 是合宙(AirM2M)推出的物联网开源架构,依托于通信模块做简易快捷的开发,将传统的AT命令用Lua封装成API,并提供各种功能应用的demo,大大减少用户的开发成本。详细资料参见:http://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格式如下
{ "datastreams": [ { "id": "temperature", //数据流名称或数据流模板名称 "datapoints": [ { "at": "2013-04-22T00:35:43", //上传数据点时间,可选。如果为空,则设备云会取当前时间。//如果存在其格式必须为"YYYY-MM-DDThh:mm:ss"的形式(例如:2015-03-22T22:31:12) "value": 42 //上传数据点值 }, { "at": "2013-04-22T00:55:43", "value": 84 //上传数据点值 } ] }, { "id": "key", //数据流名称或数据流模板名称 "datapoints": [ { "at": "2013-04-22T00:35:43",//上传数据点时间,可选。 "value": {…}//上传数据点值 }, { "at": "2013-04-22T00:35:43", "value": {…}//上传数据点值 } ] }, {…} ]}
本例中的json格式为
{ "datastreams": [ { "id": "gps", "datapoints": [ { "at": "", "value": { "lon": 106.584, "lat": 29.5707, "ele": 100 } } ] } ]}
可以看到对应不同的数据点,只需要修改“id”和“datapoints”。
部分代码
所以将GPS数据发送到OneNET平台上,最关键点将获取到的GPS数据打包为OneNET数据点格式
local function msgPack() --打包json local torigin = { datastreams = {{ id = "gps", datapoints = {{ at = "", value = { lon = bgps.returnBlng(), --得到获取到的经度 lat = bgps.returnBlat(), --得到获取到的纬度 ele = "100" } }} }} } local msg = json.encode(torigin) --对json进行编码 local len = msg.len(msg) buf = pack.pack("bbbA", 0x01,0x00,len,msg) --打包数据流字节头end
GPS读取数据处理
--[[ 字符串分割函数,和其他语言的split使用方式类似 参数: s:待分割的字符串 sp:分割标识符 返回值:分割得到的字符串,类型为table 例子:temp = split("a,b,c,d",",") temp = {"a","b","c","d"}]]function split(s, sp) local res = {} local temp = s local len = 0 while true do len = string.find(temp, sp) if len ~= nil then local result = string.sub(temp, 1, len-1) temp = string.sub(temp, len+1) table.insert(res, result) else table.insert(res, temp) break end end return res end local function gpsGet() if gps.isfix() == true then --gps定位成功 local gpsStr = gps.getgpslocation() --返回值为E,121.5259850,N,31.2356616格式 所以需要分割 local temp = split(gpsStr,",") blng = temp[2] blat = temp[4] end if gps.isfix() == false then --gps定位失败 用基站定位 sys.timer_start(qrygps,100) endend
完整代码整理后会放出这里写图片描述
- Air800(GPRS+GPS模块)连接OneNet平台
- 使用SIM900A通过GPRS连接OneNet平台发送GPS 信息的方法
- GPS与GPRS模块
- 安信可A7模块 GPRS/GPS使用教程
- A20平台调试GPS模块
- Air800连接阿里云物联网
- GPRS外置模块连接电脑进行拨号上网
- GPRS外置模块连接电脑进行拨号上网
- Python读写OneNET平台数据
- PHP和OneNet平台交互
- GSM/GPRS+GPS 二合一模块L216—电动车GPS防盗器最佳选择
- ESP32 + MQTT 连接到中移动物联网云平台 OneNET
- 树莓派连接温湿度传感器并自动上传到onenet云平台
- 连接OneNET物联网平台,实时监测家里的温湿度变化
- OneNet学习笔记(二)——OneNet平台初识
- OneNet
- RFID,GPRS,GPS,ERP
- GPS/GPRS定位
- Android关于触摸事件跟点击事件两个方法的关系
- 数据库中触发器和索引的使用
- Java:如何用链表实现队列
- erlang shell 命令中文使用说明
- HTML(五) 使用img标签
- Air800(GPRS+GPS模块)连接OneNet平台
- LeetCode
- 150. Evaluate Reverse Polish Notation
- ElasticSearch 常用的查询过滤语句
- 产品经理如何学机器学习——一篇以产品为中心的机器学习概论
- 专访 | 在AI 医疗这个热门的赛道上,阿里在怎么玩?
- Flask-Moment本地化日期和时间显示不正常
- CentOS下通过yum安装svn及配置
- lua脚本操作redis数据库