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模块。 

posted @ 2021-11-22 10:31  BinWin  阅读(125)  评论(0)    收藏  举报