Browse Source

Merge branch 'master' of https://gitee.com/openLuat/LuatOS

alienwalker 2 years ago
parent
commit
2c8f6d5d0f

+ 4 - 4
components/network/libsntp/luat_sntp.c

@@ -245,12 +245,12 @@ int l_sntp_get(lua_State *L){
         if (count > SNTP_SERVER_COUNT){
             count = SNTP_SERVER_COUNT;
         }
-		for (size_t i = 0; i <= count; i++){
-			lua_geti(L, 1, i+1);
+		for (size_t i = 1; i <= count; i++){
+			lua_geti(L, 1, i);
 			const char * server_addr = luaL_checklstring(L, -1, &len);
             if (len < SNTP_SERVER_LEN_MAX){
-                memcpy(sntp_server[i], server_addr, len);
-                sntp_server[i][len] = 0x00;
+                memcpy(sntp_server[i-1], server_addr, len);
+                sntp_server[i-1][len] = 0x00;
             }else{
                 LLOGE("server_addr too lang");
             }

+ 6 - 40
demo/uart_传感器/ZE08G-CH2O/main.lua

@@ -10,50 +10,16 @@ log.info("main", PROJECT, VERSION)
 sys = require("sys")
 
 local uartid = 1 -- 根据实际设备选取不同的uartid
-
-local rbuff
-local ppb = 0
---初始化
-local result = uart.setup(
-    uartid,--串口id
-    9600,--波特率
-    8,--数据位
-    1--停止位
-)
-
--- 获取PPB值
--- 气体浓度值 (PPB)=( 气 体 浓 度 高 位 *256+ 气 体 浓 度 低 位 )
-function GetPPB()
-    if not rbuff then return nil end
-    ppb = rbuff:byte(5)*255 + rbuff:byte(6)
-    return ppb
-end
-
--- 获取PPM值
---百万分比浓度(PPM)= PPB / 1000
-function GetPPM()
-    return ppb / 1000
-end
-
-
--- 收取数据会触发回调, 这里的"receive" 是固定值
-uart.on(uartid, "receive", function(id, len)
-    local s = ""
-    s = uart.read(id, len)
-    if #s == 0 then return end
-
-    local hexStr, hexLen = s:toHex()
-    log.info("CH2O", "receive", hexStr, hexLen)
-    
-    if string.sub(hexStr,1,2) == "FF" and hexLen == 18 then
-        rbuff = s
-    end
-end)
+local ch2o = require "ze08g_ch2o"
 
 sys.taskInit(function ()
+    local result = ch2o.init(uartid)
+    if not result then return end
+
     while true do
         sys.wait(1000)
-        log.info("ppb:  ", GetPPB(), "ppm:    ", GetPPM(), string.format("USART_PM25:   %s mg/m3.", GetPPM() * 1.25))
+        log.info("气体浓度值 PPB:", ch2o.getPPB())
+        log.info("百万分比浓度 PPM:", ch2o.getPPM())
     end
 end)
 

+ 7 - 49
demo/uart_传感器/ZH07/main.lua

@@ -8,61 +8,19 @@ log.info("main", PROJECT, VERSION)
 
 -- 引入必要的库文件(lua编写), 内部库不需要require
 sys = require("sys")
+local zh07 = require "zh07"
 
 local uartid = 1 -- 根据实际设备选取不同的uartid
 
-local rbuff
---初始化
-local result = uart.setup(
-    uartid,--串口id
-    9600,--波特率
-    8,--数据位
-    1--停止位
-)
-
--- PM1.0
-function GetPM_1()
-    if not rbuff then return nil end
-
-    return rbuff:byte(11)*256 + rbuff:byte(12)
-end
-
--- PM2.5
-function GetPM_25()
-    if not rbuff then return nil end
-
-    return rbuff:byte(13)*256 + rbuff:byte(14)
-end
-
---PM10
-function GetPM_10()
-    if not rbuff then return nil end
-
-    return rbuff:byte(15)*256 + rbuff:byte(16)
-end
-
-
--- 收取数据会触发回调, 这里的"receive" 是固定值
-uart.on(uartid, "receive", function(id, len)
-    local s = ""
-    s = uart.read(id, len)
-    if #s == 0 then return end
-
-    local hexStr, hexLen = s:toHex()
-    log.info("ZH07", "receive", hexStr, hexLen)
-
-    if string.sub(hexStr,1,2) == "42" and hexLen == 64 then
-        rbuff = s
-    end
-
-end)
-
 sys.taskInit(function ()
+    local result = zh07.init(uartid)
+    if not result then return end
+
     while true do
         sys.wait(1000)
-        log.info(string.format("pm1.0  %sμg/m³", GetPM_1()))
-        log.info(string.format("pm2.5  %sμg/m³", GetPM_25()))
-        log.info(string.format("pm10   %sμg/m³", GetPM_10()))
+        log.info(string.format("pm1.0  %sμg/m³", zh07.getPM_1()))
+        log.info(string.format("pm2.5  %sμg/m³", zh07.getPM_2_5()))
+        log.info(string.format("pm10   %sμg/m³", zh07.getPM_10()))
     end
 end)
 

+ 102 - 0
script/libs/ze08g_ch2o.lua

@@ -0,0 +1,102 @@
+--[[
+@module ze08g_ch2o
+@summary ZE08G-CH2O 电化学甲醛模组
+@version 1.0
+@date    2023.03.09
+@author  BaiShiyu
+@usage
+--注意:因使用了sys.wait()所有api需要在协程中使用
+-- 用法实例
+sys = require("sys")
+local ch2o = require "ze08g_ch2o"
+local uartid = 1 -- 根据实际设备选取不同的uartid
+
+sys.taskInit(function ()
+    local result = ch2o.init(uartid)
+    if not result then return end
+
+    while true do
+        sys.wait(1000)
+        log.info("气体浓度值 PPB:", ch2o.getPPB())
+        log.info("百万分比浓度 PPM:", ch2o.getPPM())
+    end
+end)
+]]
+
+
+local ze08g_ch2o = {}
+
+local uartid    -- 根据实际设备选取不同的uartid
+local rbuff
+local ppb = 0
+
+--[[
+ze08g_ch2o初始化
+@api ze08g_ch2o.init(uart_id)
+@number uart_id uartid
+@return bool   成功返回true
+@usage
+ze08g_ch2o.init(1)
+]]
+function ze08g_ch2o.init(uart_id)
+    uartid = uart_id
+    --初始化
+    local result = uart.setup(
+        uartid,--串口id
+        9600,--波特率
+        8,--数据位
+        1--停止位
+    )
+
+    if result ~= 0 then
+        log.info("ze08g_ch2o init_fail")
+        return false
+    end
+
+    -- 收取数据会触发回调, 这里的"receive" 是固定值
+    uart.on(uartid, "receive", function(id, len)
+        local s = ""
+        s = uart.read(id, len)
+        if #s == 0 then return end
+    
+        local hexStr, hexLen = s:toHex()
+        log.info("CH2O", "receive", hexStr, hexLen)
+        
+        if string.sub(hexStr,1,2) == "FF" and hexLen == 18 then
+            rbuff = s
+        end
+    end)
+
+    log.info("ze08g_ch2o init_ok")
+    return true
+end
+
+
+--[[
+获取ze08g_ch2o PPB数据
+@api ze08g_ch2o.getPPB()
+@return number 气体浓度值
+@usage
+local ppb = ze08g_ch2o.getPPB()
+log.info("气体浓度值 PPB:", ppb))
+]]
+function ze08g_ch2o.getPPB()
+    if not rbuff then return 0 end
+    ppb = rbuff:byte(5)*255 + rbuff:byte(6)
+    return ppb
+end
+
+--[[
+获取ze08g_ch2o PPM数据
+@api ze08g_ch2o.getPPM()
+@return number 百万分比浓度
+@usage
+local ppm = ze08g_ch2o.getPPM()
+log.info("百万分比浓度 PPM:", ppm))
+]]
+function ze08g_ch2o.getPPM()
+    return ppb / 1000
+end
+
+return ze08g_ch2o
+

+ 119 - 0
script/libs/zh07.lua

@@ -0,0 +1,119 @@
+--[[
+@module zh07
+@summary ZH07 激光粉尘传感器
+@version 1.0
+@date    2023.03.09
+@author  BaiShiyu
+@usage
+--注意:因使用了sys.wait()所有api需要在协程中使用
+-- 用法实例
+sys = require("sys")
+local zh07 = require "zh07"
+local uartid = 1 -- 根据实际设备选取不同的uartid
+
+sys.taskInit(function ()
+    local result = zh07.init(uartid)
+    if not result then return end
+
+    while true do
+        sys.wait(1000)
+        log.info(string.format("pm1.0  %sμg/m³", zh07.getPM_1()))
+        log.info(string.format("pm2.5  %sμg/m³", zh07.getPM_2_5()))
+        log.info(string.format("pm10   %sμg/m³", zh07.getPM_10()))
+    end
+end)
+]]
+
+
+local zh07 = {}
+-- local sys = require "sys"
+
+local uartid    -- 根据实际设备选取不同的uartid
+local rbuff
+
+--[[
+zh07初始化
+@api zh07.init(uart_id)
+@number uart_id uartid
+@return bool   成功返回true
+@usage
+zh07.init(1)
+]]
+function zh07.init(uart_id)
+    uartid = uart_id
+    --初始化
+    local result = uart.setup(
+        uartid,--串口id
+        9600,--波特率
+        8,--数据位
+        1--停止位
+    )
+
+    if result ~= 0 then
+        log.info("zh07 init_fail")
+        return false
+    end
+
+    -- 收取数据会触发回调, 这里的"receive" 是固定值
+    uart.on(uartid, "receive", function(id, len)
+        local s = ""
+        s = uart.read(id, len)
+        if #s == 0 then return end
+
+        local hexStr, hexLen = s:toHex()
+        log.info("ZH07", "receive", hexStr, hexLen)
+
+        if string.sub(hexStr,1,2) == "42" and hexLen == 64 then
+            rbuff = s
+        end
+    end)
+
+    log.info("zh07 init_ok")
+    return true
+end
+
+
+--[[
+获取zh07 PM1.0数据
+@api zh07.getPM_1()
+@return number PM1.0数据
+@usage
+local zh07_pm1 = zh07.getPM_1()
+log.info(string.format("pm1.0  %sμg/m³", zh07_pm1))
+]]
+function zh07.getPM_1()
+    if not rbuff then return 0 end
+
+    return rbuff:byte(11)*256 + rbuff:byte(12)
+end
+
+--[[
+获取zh07 PM2.5数据
+@api zh07.getPM_2_5()
+@return number PM2.5数据
+@usage
+local zh07_pm25 = zh07.getPM_2_5()
+log.info(string.format("pm2.5  %sμg/m³", zh07_pm25))
+]]
+function zh07.getPM_2_5()
+    if not rbuff then return 0 end
+
+    return rbuff:byte(13)*256 + rbuff:byte(14)
+end
+
+--[[
+获取zh07 PM10数据
+@api zh07.getPM_10()
+@return number PM10数据
+@usage
+local zh07_pm10 = zh07.getPM_10()
+log.info(string.format("pm10  %sμg/m³", zh07_pm10))
+]]
+function zh07.getPM_10()
+    if not rbuff then return 0 end
+
+    return rbuff:byte(15)*256 + rbuff:byte(16)
+end
+
+return zh07
+