Переглянути джерело

update: gnss的脚本加上室内无信号的提示

Wendal Chen 3 роки тому
батько
коміт
270a2c4486

+ 4 - 37
demo/libgnss/main.lua

@@ -3,7 +3,10 @@ PROJECT = "gnss"
 VERSION = "1.0.0"
 
 --[[
-本demo是演示定位数据处理的
+本demo是演示定位数据处理的. script/turnkey目录有更完整的应用.
+本demo需要V1103及以上的固件!!
+注意: 室内无信号!! 无法定位!!! 到室外去, 起码天线要在室外.
+窗口只有少许信号, 无法保证定位成功
 ]]
 
 -- sys库是标配
@@ -15,43 +18,7 @@ local mqttc = nil
 
 libgnss.clear() -- 清空数据,兼初始化
 
-uart.setup(
-    uart.VUART_0,-- USB虚拟串口id
-    115200,--波特率
-    8,--数据位
-    1--停止位
-)
--- uart.on(uart.VUART_0, "recv", function(id, len)
---     log.info("uart", id, len);
---     -- while 1 do
---         -- local data = uart.read(uart.VUART_0, 1024)
---         -- if data and #data > 0 then
---         --     uart.write(gps_uart_id, data)
---         -- else
---         --     -- break
---         -- end
---     -- end
--- end)
-
-
 uart.setup(gps_uart_id, 115200)
--- uart.on(2, "sent", function(id, len)
---     log.info("uart", "event", "sent", id)
---     -- sys.publish("UART2_SEND", 2)
--- end)
-
-sys.taskInit(function()
-    while 1 do
-        local data = uart.read(uart.VUART_0, 1024)
-        if data and #data > 0 then
-            log.info("vuart", #data)
-            log.info("vuart", data:toHex())
-            uart.write(gps_uart_id, data)
-        else
-            sys.wait(30)
-        end
-    end
-end)
 
 function exec_agnss()
     if http then

+ 2 - 0
script/turnkey/air780eg_gnss_qcloud/main.lua

@@ -4,6 +4,7 @@ VERSION = "1.0.1"
 
 --[[
 Air780EG 对接 腾讯连连
+注意: 室内无信号!! 无法定位!!!
 ]]
 
 -- sys库是标配
@@ -170,6 +171,7 @@ sys.taskInit(function()
     -- 绑定uart,底层自动处理GNSS数据
     -- 这里延后到设置命令发送完成后才开始处理数据,之前的数据就不上传了
     libgnss.bind(gps_uart_id)
+    log.debug("提醒", "室内无GNSS信号,定位不会成功, 要到空旷的室外,起码要看得到天空")
     exec_agnss()
 end)
 

+ 172 - 170
script/turnkey/air780eg_gnsstest/main.lua

@@ -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