|
|
@@ -4,6 +4,7 @@ VERSION = "1.0.1"
|
|
|
|
|
|
--[[
|
|
|
本demo需要很多流量!!!
|
|
|
+注意: 室内无信号!! 无法定位!!!
|
|
|
]]
|
|
|
|
|
|
-- sys库是标配
|
|
|
@@ -72,25 +73,25 @@ function exec_agnss()
|
|
|
end
|
|
|
end
|
|
|
|
|
|
-function upload_stat()
|
|
|
- -- if mqttc == nil or not mqttc:ready() then return end
|
|
|
- local stat = {
|
|
|
- csq = mobile.csq(),
|
|
|
- rssi = mobile.rssi(),
|
|
|
- rsrq = mobile.rsrq(),
|
|
|
- rsrp = mobile.rsrp(),
|
|
|
- -- iccid = mobile.iccid(),
|
|
|
- snr = mobile.snr(),
|
|
|
- vbat = adc.get(adc.CH_VBAT),
|
|
|
- temp = adc.get(adc.CH_CPU),
|
|
|
- memsys = {rtos.meminfo("sys")},
|
|
|
- memlua = {rtos.meminfo()},
|
|
|
- fixed = libgnss.isFix()
|
|
|
- }
|
|
|
- sys.publish("uplink", "/gnss/" .. mobile.imei() .. "/up/stat", (json.encode(stat)), 1)
|
|
|
-end
|
|
|
+-- function upload_stat()
|
|
|
+-- -- if mqttc == nil or not mqttc:ready() then return end
|
|
|
+-- local stat = {
|
|
|
+-- csq = mobile.csq(),
|
|
|
+-- rssi = mobile.rssi(),
|
|
|
+-- rsrq = mobile.rsrq(),
|
|
|
+-- rsrp = mobile.rsrp(),
|
|
|
+-- -- iccid = mobile.iccid(),
|
|
|
+-- snr = mobile.snr(),
|
|
|
+-- vbat = adc.get(adc.CH_VBAT),
|
|
|
+-- temp = adc.get(adc.CH_CPU),
|
|
|
+-- memsys = {rtos.meminfo("sys")},
|
|
|
+-- memlua = {rtos.meminfo()},
|
|
|
+-- fixed = libgnss.isFix()
|
|
|
+-- }
|
|
|
+-- sys.publish("uplink", "/gnss/" .. mobile.imei() .. "/up/stat", (json.encode(stat)), 1)
|
|
|
+-- end
|
|
|
|
|
|
-sys.timerLoopStart(upload_stat, 60 * 1000)
|
|
|
+-- sys.timerLoopStart(upload_stat, 60 * 1000)
|
|
|
|
|
|
sys.taskInit(function()
|
|
|
-- Air780EG默认波特率是115200
|
|
|
@@ -119,170 +120,171 @@ sys.taskInit(function()
|
|
|
-- 绑定uart,底层自动处理GNSS数据
|
|
|
-- 这里延后到设置命令发送完成后才开始处理数据,之前的数据就不上传了
|
|
|
libgnss.bind(gps_uart_id)
|
|
|
- exec_agnss()
|
|
|
+ log.debug("提醒", "室内无GNSS信号,定位不会成功, 要到空旷的室外,起码要看得到天空")
|
|
|
+ -- exec_agnss()
|
|
|
end)
|
|
|
|
|
|
-sys.taskInit(function()
|
|
|
- while 1 do
|
|
|
- sys.wait(5000)
|
|
|
- -- 6228CI, 查询产品信息, 可选
|
|
|
- -- uart.write(gps_uart_id, "$PDTINFO,*62\r\n")
|
|
|
- -- uart.write(gps_uart_id, "$AIDINFO\r\n")
|
|
|
- -- sys.wait(100)
|
|
|
+-- sys.taskInit(function()
|
|
|
+-- while 1 do
|
|
|
+-- sys.wait(5000)
|
|
|
+-- -- 6228CI, 查询产品信息, 可选
|
|
|
+-- -- uart.write(gps_uart_id, "$PDTINFO,*62\r\n")
|
|
|
+-- -- uart.write(gps_uart_id, "$AIDINFO\r\n")
|
|
|
+-- -- sys.wait(100)
|
|
|
|
|
|
- -- uart.write(gps_uart_id, "$CFGSYS\r\n")
|
|
|
- -- uart.write(gps_uart_id, "$CFGMSG,6,4\r\n")
|
|
|
- log.info("RMC", json.encode(libgnss.getRmc(2) or {}))
|
|
|
- -- log.info("GGA", libgnss.getGga(3))
|
|
|
- -- log.info("GLL", json.encode(libgnss.getGll(2) or {}))
|
|
|
- -- log.info("GSA", json.encode(libgnss.getGsa(2) or {}))
|
|
|
- -- log.info("GSV", json.encode(libgnss.getGsv(2) or {}))
|
|
|
- -- log.info("VTG", json.encode(libgnss.getVtg(2) or {}))
|
|
|
- -- log.info("ZDA", json.encode(libgnss.getZda(2) or {}))
|
|
|
- -- log.info("date", os.date())
|
|
|
- log.info("sys", rtos.meminfo("sys"))
|
|
|
- log.info("lua", rtos.meminfo("lua"))
|
|
|
- end
|
|
|
-end)
|
|
|
+-- -- uart.write(gps_uart_id, "$CFGSYS\r\n")
|
|
|
+-- -- uart.write(gps_uart_id, "$CFGMSG,6,4\r\n")
|
|
|
+-- log.info("RMC", json.encode(libgnss.getRmc(2) or {}))
|
|
|
+-- -- log.info("GGA", libgnss.getGga(3))
|
|
|
+-- -- log.info("GLL", json.encode(libgnss.getGll(2) or {}))
|
|
|
+-- -- log.info("GSA", json.encode(libgnss.getGsa(2) or {}))
|
|
|
+-- -- log.info("GSV", json.encode(libgnss.getGsv(2) or {}))
|
|
|
+-- -- log.info("VTG", json.encode(libgnss.getVtg(2) or {}))
|
|
|
+-- -- log.info("ZDA", json.encode(libgnss.getZda(2) or {}))
|
|
|
+-- -- log.info("date", os.date())
|
|
|
+-- log.info("sys", rtos.meminfo("sys"))
|
|
|
+-- log.info("lua", rtos.meminfo("lua"))
|
|
|
+-- end
|
|
|
+-- end)
|
|
|
|
|
|
--- 订阅GNSS状态编码
|
|
|
-sys.subscribe("GNSS_STATE", function(event, ticks)
|
|
|
- -- event取值有
|
|
|
- -- FIXED 定位成功
|
|
|
- -- LOSE 定位丢失
|
|
|
- -- ticks是事件发生的时间,一般可以忽略
|
|
|
- local onoff = libgnss.isFix() and 1 or 0
|
|
|
- log.info("GNSS", "LED", onoff)
|
|
|
- gpio.set(LED_GNSS, onoff)
|
|
|
- log.info("gnss", "state", event, ticks)
|
|
|
- if event == "FIXED" then
|
|
|
- local locStr = libgnss.locStr()
|
|
|
- log.info("gnss", "locStr", locStr)
|
|
|
- if locStr then
|
|
|
- io.writeFile("/gnssloc", locStr)
|
|
|
- end
|
|
|
- end
|
|
|
-end)
|
|
|
+-- -- 订阅GNSS状态编码
|
|
|
+-- sys.subscribe("GNSS_STATE", function(event, ticks)
|
|
|
+-- -- event取值有
|
|
|
+-- -- FIXED 定位成功
|
|
|
+-- -- LOSE 定位丢失
|
|
|
+-- -- ticks是事件发生的时间,一般可以忽略
|
|
|
+-- local onoff = libgnss.isFix() and 1 or 0
|
|
|
+-- log.info("GNSS", "LED", onoff)
|
|
|
+-- gpio.set(LED_GNSS, onoff)
|
|
|
+-- log.info("gnss", "state", event, ticks)
|
|
|
+-- if event == "FIXED" then
|
|
|
+-- local locStr = libgnss.locStr()
|
|
|
+-- log.info("gnss", "locStr", locStr)
|
|
|
+-- if locStr then
|
|
|
+-- io.writeFile("/gnssloc", locStr)
|
|
|
+-- end
|
|
|
+-- end
|
|
|
+-- end)
|
|
|
|
|
|
--- mqtt 上传任务
|
|
|
-sys.taskInit(function()
|
|
|
- -- sys.waitUntil("IP_READY", 15000)
|
|
|
- mqttc = mqtt.create(nil, "lbsmqtt.airm2m.com", 1886) -- mqtt客户端创建
|
|
|
+-- -- mqtt 上传任务
|
|
|
+-- sys.taskInit(function()
|
|
|
+-- -- sys.waitUntil("IP_READY", 15000)
|
|
|
+-- mqttc = mqtt.create(nil, "lbsmqtt.airm2m.com", 1886) -- mqtt客户端创建
|
|
|
|
|
|
- mqttc:auth(mobile.imei(), mobile.imei(), mobile.muid()) -- mqtt三元组配置
|
|
|
- log.info("mqtt", mobile.imei(), mobile.imei(), mobile.muid())
|
|
|
- mqttc:keepalive(30) -- 默认值240s
|
|
|
- mqttc:autoreconn(true, 3000) -- 自动重连机制
|
|
|
+-- mqttc:auth(mobile.imei(), mobile.imei(), mobile.muid()) -- mqtt三元组配置
|
|
|
+-- log.info("mqtt", mobile.imei(), mobile.imei(), mobile.muid())
|
|
|
+-- mqttc:keepalive(30) -- 默认值240s
|
|
|
+-- mqttc:autoreconn(true, 3000) -- 自动重连机制
|
|
|
|
|
|
- mqttc:on(function(mqtt_client, event, data, payload) -- mqtt回调注册
|
|
|
- -- 用户自定义代码,按event处理
|
|
|
- -- log.info("mqtt", "event", event, mqtt_client, data, payload)
|
|
|
- if event == "conack" then -- mqtt成功完成鉴权后的消息
|
|
|
- sys.publish("mqtt_conack") -- 小写字母的topic均为自定义topic
|
|
|
- -- 订阅不是必须的,但一般会有
|
|
|
- mqtt_client:subscribe("/gnss/" .. mobile.imei() .. "/down/#")
|
|
|
- elseif event == "recv" then -- 服务器下发的数据
|
|
|
- log.info("mqtt", "downlink", "topic", data, "payload", payload)
|
|
|
- local dl = json.decode(data)
|
|
|
- if dl then
|
|
|
- -- 检测命令
|
|
|
- if dl.cmd then
|
|
|
- -- 直接写uart
|
|
|
- if dl.cmd == "uart" and dl.data then
|
|
|
- uart.write(gps_uart_id, dl.data)
|
|
|
- -- 重启命令
|
|
|
- elseif dl.cmd == "reboot" then
|
|
|
- rtos.reboot()
|
|
|
- elseif dl.cmd == "stat" then
|
|
|
- upload_stat()
|
|
|
- end
|
|
|
- end
|
|
|
- end
|
|
|
- elseif event == "sent" then -- publish成功后的事件
|
|
|
- log.info("mqtt", "sent", "pkgid", data)
|
|
|
- end
|
|
|
- end)
|
|
|
+-- mqttc:on(function(mqtt_client, event, data, payload) -- mqtt回调注册
|
|
|
+-- -- 用户自定义代码,按event处理
|
|
|
+-- -- log.info("mqtt", "event", event, mqtt_client, data, payload)
|
|
|
+-- if event == "conack" then -- mqtt成功完成鉴权后的消息
|
|
|
+-- sys.publish("mqtt_conack") -- 小写字母的topic均为自定义topic
|
|
|
+-- -- 订阅不是必须的,但一般会有
|
|
|
+-- mqtt_client:subscribe("/gnss/" .. mobile.imei() .. "/down/#")
|
|
|
+-- elseif event == "recv" then -- 服务器下发的数据
|
|
|
+-- log.info("mqtt", "downlink", "topic", data, "payload", payload)
|
|
|
+-- local dl = json.decode(data)
|
|
|
+-- if dl then
|
|
|
+-- -- 检测命令
|
|
|
+-- if dl.cmd then
|
|
|
+-- -- 直接写uart
|
|
|
+-- if dl.cmd == "uart" and dl.data then
|
|
|
+-- uart.write(gps_uart_id, dl.data)
|
|
|
+-- -- 重启命令
|
|
|
+-- elseif dl.cmd == "reboot" then
|
|
|
+-- rtos.reboot()
|
|
|
+-- elseif dl.cmd == "stat" then
|
|
|
+-- upload_stat()
|
|
|
+-- end
|
|
|
+-- end
|
|
|
+-- end
|
|
|
+-- elseif event == "sent" then -- publish成功后的事件
|
|
|
+-- log.info("mqtt", "sent", "pkgid", data)
|
|
|
+-- end
|
|
|
+-- end)
|
|
|
|
|
|
- -- 发起连接之后,mqtt库会自动维护链接,若连接断开,默认会自动重连
|
|
|
- mqttc:connect()
|
|
|
- -- sys.waitUntil("mqtt_conack")
|
|
|
- -- log.info("mqtt连接成功")
|
|
|
- sys.timerStart(upload_stat, 3000) -- 一秒后主动上传一次
|
|
|
- while true do
|
|
|
- sys.wait(60*1000)
|
|
|
- end
|
|
|
- mqttc:close()
|
|
|
- mqttc = nil
|
|
|
-end)
|
|
|
+-- -- 发起连接之后,mqtt库会自动维护链接,若连接断开,默认会自动重连
|
|
|
+-- mqttc:connect()
|
|
|
+-- -- sys.waitUntil("mqtt_conack")
|
|
|
+-- -- log.info("mqtt连接成功")
|
|
|
+-- sys.timerStart(upload_stat, 3000) -- 一秒后主动上传一次
|
|
|
+-- while true do
|
|
|
+-- sys.wait(60*1000)
|
|
|
+-- end
|
|
|
+-- mqttc:close()
|
|
|
+-- mqttc = nil
|
|
|
+-- end)
|
|
|
|
|
|
-sys.taskInit(function()
|
|
|
- while 1 do
|
|
|
- sys.wait(3600 * 1000) -- 一小时检查一次
|
|
|
- local fixed, time_fixed = libgnss.isFix()
|
|
|
- if not fixed then
|
|
|
- exec_agnss()
|
|
|
- end
|
|
|
- end
|
|
|
-end)
|
|
|
+-- sys.taskInit(function()
|
|
|
+-- while 1 do
|
|
|
+-- sys.wait(3600 * 1000) -- 一小时检查一次
|
|
|
+-- local fixed, time_fixed = libgnss.isFix()
|
|
|
+-- if not fixed then
|
|
|
+-- exec_agnss()
|
|
|
+-- end
|
|
|
+-- end
|
|
|
+-- end)
|
|
|
|
|
|
-sys.timerLoopStart(upload_stat, 60000)
|
|
|
+-- sys.timerLoopStart(upload_stat, 60000)
|
|
|
|
|
|
-sys.taskInit(function()
|
|
|
- local msgs = {}
|
|
|
- while 1 do
|
|
|
- local ret, topic, data, qos = sys.waitUntil("uplink", 30000)
|
|
|
- if ret then
|
|
|
- if topic == "close" then
|
|
|
- break
|
|
|
- end
|
|
|
- log.info("mqtt", "publish", "topic", topic)
|
|
|
- -- if #data > 512 then
|
|
|
- -- local start = mcu.ticks()
|
|
|
- -- local cdata = miniz.compress(data)
|
|
|
- -- local endt = mcu.ticks() - start
|
|
|
- -- if cdata then
|
|
|
- -- log.info("miniz", #data, #cdata, endt)
|
|
|
- -- end
|
|
|
- -- end
|
|
|
- if mqttc:ready() then
|
|
|
- local tmp = msgs
|
|
|
- if #tmp > 0 then
|
|
|
- log.info("mqtt", "ready, send buff", #tmp)
|
|
|
- msgs = {}
|
|
|
- for k, msg in pairs(tmp) do
|
|
|
- mqttc:publish(msg.topic, msg.data, 0)
|
|
|
- end
|
|
|
- end
|
|
|
- mqttc:publish(topic, data, qos)
|
|
|
- else
|
|
|
- log.info("mqtt", "not ready, insert into buff")
|
|
|
- if #msgs > 60 then
|
|
|
- table.remove(msgs, 1)
|
|
|
- end
|
|
|
- table.insert(msgs, {
|
|
|
- topic = topic,
|
|
|
- data = data
|
|
|
- })
|
|
|
- end
|
|
|
- end
|
|
|
- end
|
|
|
-end)
|
|
|
+-- sys.taskInit(function()
|
|
|
+-- local msgs = {}
|
|
|
+-- while 1 do
|
|
|
+-- local ret, topic, data, qos = sys.waitUntil("uplink", 30000)
|
|
|
+-- if ret then
|
|
|
+-- if topic == "close" then
|
|
|
+-- break
|
|
|
+-- end
|
|
|
+-- log.info("mqtt", "publish", "topic", topic)
|
|
|
+-- -- if #data > 512 then
|
|
|
+-- -- local start = mcu.ticks()
|
|
|
+-- -- local cdata = miniz.compress(data)
|
|
|
+-- -- local endt = mcu.ticks() - start
|
|
|
+-- -- if cdata then
|
|
|
+-- -- log.info("miniz", #data, #cdata, endt)
|
|
|
+-- -- end
|
|
|
+-- -- end
|
|
|
+-- if mqttc:ready() then
|
|
|
+-- local tmp = msgs
|
|
|
+-- if #tmp > 0 then
|
|
|
+-- log.info("mqtt", "ready, send buff", #tmp)
|
|
|
+-- msgs = {}
|
|
|
+-- for k, msg in pairs(tmp) do
|
|
|
+-- mqttc:publish(msg.topic, msg.data, 0)
|
|
|
+-- end
|
|
|
+-- end
|
|
|
+-- mqttc:publish(topic, data, qos)
|
|
|
+-- else
|
|
|
+-- log.info("mqtt", "not ready, insert into buff")
|
|
|
+-- if #msgs > 60 then
|
|
|
+-- table.remove(msgs, 1)
|
|
|
+-- end
|
|
|
+-- table.insert(msgs, {
|
|
|
+-- topic = topic,
|
|
|
+-- data = data
|
|
|
+-- })
|
|
|
+-- end
|
|
|
+-- end
|
|
|
+-- end
|
|
|
+-- end)
|
|
|
|
|
|
--- 适配GNSS测试设备的GPIO
|
|
|
-sys.taskInit(function()
|
|
|
- while 1 do
|
|
|
- local vbat = adc.get(adc.CH_VBAT)
|
|
|
- log.info("vbat", vbat)
|
|
|
- if vbat < 3400 then
|
|
|
- gpio.set(LED_VBAT, 1)
|
|
|
- sys.wait(100)
|
|
|
- gpio.set(LED_VBAT, 0)
|
|
|
- sys.wait(900)
|
|
|
- else
|
|
|
- sys.wait(1000)
|
|
|
- end
|
|
|
- end
|
|
|
-end)
|
|
|
+-- -- 适配GNSS测试设备的GPIO
|
|
|
+-- sys.taskInit(function()
|
|
|
+-- while 1 do
|
|
|
+-- local vbat = adc.get(adc.CH_VBAT)
|
|
|
+-- log.info("vbat", vbat)
|
|
|
+-- if vbat < 3400 then
|
|
|
+-- gpio.set(LED_VBAT, 1)
|
|
|
+-- sys.wait(100)
|
|
|
+-- gpio.set(LED_VBAT, 0)
|
|
|
+-- sys.wait(900)
|
|
|
+-- else
|
|
|
+-- sys.wait(1000)
|
|
|
+-- end
|
|
|
+-- end
|
|
|
+-- end)
|
|
|
|
|
|
-- sys.subscribe("NTP_UPDATE", function()
|
|
|
-- if not libgnss.isFix() then
|