X-MagicBox-820的luatOS之路连载系列4
上次说到定位成功后,显示的数据准确性问题。专门查询了下我所在地区的经纬度信息。
MagicBox的显示数据是这样的:

网络上查到的经纬度数据是这样的:

可以看出定位精度还可以,毕竟我这个查询的数据没有具体到所在的小区。其他的卫星数据暂时不计较。接下来是要将经纬度信息通过MQTT发布到服务器,供其他客户端来订阅。
首先要提一点就是MQTT协议虽然是所谓的发布/订阅模式的轻量级通信协议,但依然是建立在TCP/IP之上的。使用它的意义在于低开销,低带宽占用。对于老王这个经纬度数据来说再合适不过了。网络上的一张图很好的说明了它的拓扑:

明白了以上内容,那么我们将MagicBox820作为一个客户端,发布消息到服务器,PC上的处理软件作为另一个客户端从服务器订阅820发布的主题,就实现了一条通路。这就是一个小的物联网实例。

通常情况下需要搭建一个MQTT服务器(Broker),或是租用一些商业的平台,当然也是有开源的软件可以选择的。老王这里偷了个懒,先用通信猫的小工具调试。
忍不住再夸一下LuatOS的API,也得益于Lua语言的便捷,MQTT发布主题的代码可以简单到下面这样:
sys.taskInit(function()
while true do
while not socket.isReady() do sys.wait(1000) end
local mqttc = mqtt.client(misc.getImei(), 300, "", "")
while not mqttc:connect(host, port) do sys.wait(2000) end while true do --mqttc:publish("/820msg", "test publish" .. os.time())
mqttc:publish("/820msg", "test publish")
sys.wait(10000) end
end
end)
结合工具测试代码运行正常:

通信没有问题了,自然是将MQTT的消息负载替换为经纬数据了。在该任务所在的文件中,引入中科微GPS模块,重新定义本文件中使用GPS变量,代码如下:
require "agpsZkw"
local mqtt_gps = require"gpsZkw" module(..., package.seeall) -- 这里请填写修改为自己的IP和端口
--local host, port = "lbsmqtt.airm2m.com", 1884
local host, port = "mq.tongxinmao.com", 18830 -- 测试MQTT的任务代码
sys.taskInit(function()
while true do
while not socket.isReady() do sys.wait(1000) end
local mqttc = mqtt.client(misc.getImei(), 300, "", "")
while not mqttc:connect(host, port) do sys.wait(2000) end while true do
--mqttc:publish("/820msg", "test publish")
mqttc:publish("/820msg", mqtt_gps.getLocation().lngType..mqtt_gps.getLocation().lng..","..mqtt_gps.getLocation().latType..mqtt_gps.getLocation().lat)
sys.wait(10000)
end
end
end)
代码是每10秒钟发布一条消息到服务器,通信猫小工具以客户端身份订阅同一服务器的820主题。因为测试,老王又需要拿着Box板卡伸手到窗外去搜星,高处不胜寒,冷风也特别猖狂。不过看到结果符合预期,心里还是美滋滋的。

老王顺手也把屏幕显示给改了下

给自己安排下,接下来将经纬度信息展示到地图上。同时在这个过程使用Qt的WebEngineView模块。
X-MagicBox-820的luatOS之路连载系列4的更多相关文章
- X-MagicBox-820的luatOS之路连载系列6
继上次用Qt实现了显示地图和MQTT通信之后(X-MagicBox-820的luatOS之路连载系列5),说是要研究下地图的开放接口,也看了标记点和线的方法(地图上自定义标记点和轨迹线的实现).这次就 ...
- X-MagicBox-820的luatOS之路连载系列2
这块MagicBox小巧但外设丰富,盖板上的小液晶屏竟有240*240的分辨率.点亮后若是用最小字体,真有看瞎老王的不瞎之眼之势. 这种屏在某宝也是比较多的,大概就是长这样子: 我们这个820的盖板上 ...
- [js高手之路] es6系列教程 - 对象功能扩展详解
第一:字面量对象的方法,支持缩写形式 //es6之前,这么写 var User = { name : 'ghostwu', showName : function(){ return this.nam ...
- [js高手之路]设计模式系列课程-发布者,订阅者重构购物车
发布者订阅者模式,是一种很常见的模式,比如: 一.买卖房子 生活中的买房,卖房,中介就构成了一个发布订阅者模式,买房的人,一般需要的是房源,价格,使用面积等信息,他充当了订阅者的角色 中介拿到卖主的房 ...
- [js高手之路] es6系列教程 - 迭代器与生成器详解
什么是迭代器? 迭代器是一种特殊对象,这种对象具有以下特点: 1,所有对象都有一个next方法 2,每次调用next方法,都会返回一个对象,该对象包含两个属性,一个是value, 表示下一个将要返回的 ...
- [js高手之路] 设计模式系列课程 - jQuery的extend插件机制
这里在之前的文章[js高手之路] 设计模式系列课程 - jQuery的链式调用与灵活的构造函数基础上增加一个extend浅拷贝,可以为对象方便的扩展属性和方法, jquery的插件扩展机制,大致就是这 ...
- [js高手之路] es6系列教程 - 迭代器,生成器,for...of,entries,values,keys等详解
接着上文[js高手之路] es6系列教程 - 迭代器与生成器详解继续. 在es6中引入了一个新的循环结构for ....of, 主要是用来循环可迭代的对象,那么什么是可迭代的对象呢? 可迭代的对象一般 ...
- [js高手之路] vue系列教程 - 事件专题(4)
本文主要讲解事件冒泡,事件绑定的简写,事件默认行为,按键码等一系列与事件相关的知识. 一.事件绑定的简写,@事件类型. 之前我的[js高手之路] vue系列教程 - vue的事件绑定与方法(2) 用 ...
- [js高手之路]设计模式系列课程-组合模式+寄生组合继承实战新闻列表
所谓组合模式,就是把一堆结构分解出来,组成在一起,现实中很多这样的例子,如: 1.肯德基套餐就是一种组合模式, 比如鸡腿堡套餐,一般是是由一个鸡腿堡,一包薯条,一杯可乐等组成的 2.组装的台式机同理, ...
随机推荐
- 10.7 URI
URI: Uniform Resource Identifier 统一资源标识符 URL: Uniform Resource Locator 统一资源定位符 URN: Uniform R ...
- Serverless 的初心、现状和未来
作者 | 不瞋 导读:Serverless 是如何产生的?当前有哪些落地场景?Serverless 的未来又将如何?本文分享了阿里云高级技术专家不瞋对于 Serverless 的看法,回顾其发展历程, ...
- js 改变this指向的三种方法 bind call apply
先了解下bind call apply 的注意点 bind 需要手动调用 第一个参数 this 要指向的对象,后面是 散列的参数 call 不需要手动调用 第一个参数 this 要指向的对象,后面是 ...
- JS 开发中数组常用的方法
大家有没有想过,js数组为什么会有这么多的方法,没错,就是为了不同场景下处理数据的需要,就像设计模式一样,都是为了能更好的处理当前场景的需要. 首先怎么创建一个数组呢, // 两种方式 // 1,构造 ...
- FastAPI 学习之路(三)
系列文章: FastAPI 学习之路(一)fastapi--高性能web开发框架 FastAPI 学习之路(二) 之前的文章分享了如何去创建一个简单的路径的请求.那么我们这次分享的如何在请求路径中,增 ...
- android和IOS自动化定位方法
元素定位 方法:id定位,name定位(text定位),class_name定位, accessibility_id定位,xpath定位等 (目前1.5版本的已经不支持name定位了),所以APP的定 ...
- 2020.11.1--pta阶梯练习赛补题
7-5 古风排版 中国的古人写文字,是从右向左竖向排版的.本题就请你编写程序,把一段文字按古风排版. 输入格式: 输入在第一行给出一个正整数N(<),是每一列的字符数.第二行给出一个长度不超过1 ...
- Golang通脉之结构体
Go语言中的基础数据类型可以表示一些事物的基本属性,但是要表达一个事物的全部或部分属性时,这时候再用单一的基本数据类型明显就无法满足需求了,Go语言提供了一种自定义数据类型,可以封装多个基本数据类型, ...
- C++编译Dlib库出现LNK2001错误(原因是在Python中安装过Dlib)
问题 使用CMake编译Dlib库,编译得到lib文件后,新建一个VS工程想使用Dlib,却出现LNK2001:无法解析的外部符号的错误,且都与JPEG和PNG相关: 1>dlib19.17.9 ...
- Selenium获取动态图片验证码
Selenium获取动态图片验证码 关于图片验证码的文章,我想大家都有一定的了解了. 在我们做UI自动化的时候,经常会遇到图片验证码的问题. 当开发不给咱们提供万能验证码,或者测试第三方网站比如知乎的 ...