编辑代码

--机智云产品识别
PK = "892afc3c276a4ff1a663e357399e2a07" 
PS = "9903013992a1447c925675b10abbb33c"--大棚
--配置D0为普通输出,控制水阀继电器
LIB_GpioOutputConfig("D0","STANDARD")
LIB_GpioWrite("D0",1)--关闭继电器
--配置D1为普通输出,控制二氧化碳继电器
LIB_GpioOutputConfig("D1","STANDARD")
LIB_GpioWrite("D1",1)--关闭继电器
--配置D2为普通输出,控制加热继电器
LIB_GpioOutputConfig("D2","STANDARD")
LIB_GpioWrite("D2",1)--关闭继电器
--配置D3为普通输出,控制补光继电器
LIB_GpioOutputConfig("D3","STANDARD")
LIB_GpioWrite("D3",1)--关闭继电器
--初始化Wifi模块
LIB_GizWifiConfig(PK,PS,2000,120,"UART0","D5","D10","D8")
--配置A0-A3这四个电压采集通道同时开始工作,当每个通道采集满50个点时缓存满,每个点的采集时间间隔为10ms
LIB_ADConfig(50,10000)
--设置Z19二氧化碳传感器占用TX1和RX1引脚,并启动传感器,关闭自动校准("AUTO_CALI_DIS")
LIB_Z19CConfig("UART1","AUTO_CALI_DIS")
--设置sht3x传感器占用SCL0和SDA0引脚,并启动传感器以每秒出10个数据的频率工作,repeatability="HIGH"时精度最高
LIB_Sht3xConfig("IIC0","10","HIGH")
--设置BH1750光照强度传感器占用SCL1和SDA1引脚,并启动传感器以每秒输出5组数据的频率工作
LIB_BH1750Config("IIC1")
--开始大循环
while(GC(1) == true)
do
    LIB_DelayMs(50)
    --查询机智云是否下发了写"Sw1"数据点(手动/自动灌溉模式设置)
    flag,recv_data = LIB_RecvFromGizCloud("Sw1")
    if flag == 1 then
        if recv_data == 1 then -- 云下发了1
            Auto = 1 --开启自动模式
        else -- 云下发了0
            Auto = 0 --开启手动模式
        end
    end
    --查询是否读到温湿度数据
    sht3x_flag,sht3x_temp,sht3x_humi = LIB_Sht3xGetResult()
    if sht3x_flag == 1 then
        --向机智云服务器发送(温湿度)短整数型数值(舍去小数部分)
        LIB_SendToGizCloud("Rs1", math.floor(sht3x_temp))
        LIB_SendToGizCloud("Rs2", math.floor(sht3x_humi))
        if Auto == 1 then --自动模式下
            if sht3x_temp > 30 then --判断温度是否高于加热阈值
                LIB_GpioWrite("D2",1)--关闭加热继电器
            elseif sht3x_temp < 20 then
                LIB_GpioWrite("D2",0)--打开加热继电器
            end
        end
    end
    --查询是否读到CO2传感器值
    flag,co2_val = LIB_Z19CGetCO2()
    if flag == 1 then
        --打印读到的co2值
        --print(string.format("CO2:%d PPM", co2_val))
        --向机智云服务器发送(co2)整数型数值,短整数型
        LIB_SendToGizCloud("Rs5", co2_val)
        if Auto == 1 then --自动模式下
            if co2_val < 400 then --判断二氧化碳浓度是否到达阈值
                LIB_GpioWrite("D1",0)--关闭加热继电器
            elseif co2_val > 450 then
                LIB_GpioWrite("D1",1)--打开加热继电器
            end
        end
    end 
    --查询是否读到A1端口的电压采集值(土壤湿度)
    A1_full_flag, A1_tab = LIB_ADCheckBufFull("A1")
    --每当A1通道的缓存满以后,计算缓存内的50个元素的平均值,并换算成电压值
    --由LIB_ADConfig(50,10000)可以算出,此处大概是50X10000us=0.5秒执行一次
    if A1_full_flag == 1 then
        SUM = 0
        for i = 1, #A1_tab do --此处#A1_tab的值是50,表示A1_tab表内的元素个数
            SUM = SUM + A1_tab[i]
        end
        AVER = SUM / #A1_tab --计算平均采样值
        --将A0通道的AD值转换成实际电压打印出来
        val = AVER*3.6/4096.0
        val = 100-100*val/3.3
        --向机智云服务器发送土壤湿度传感器电压值,2位小数浮点型
        LIB_SendToGizCloud("Rf3", val)
        if Auto == 1 then --自动模式下
            if val < 20 then --土壤越干,传感器电压值越高,3.3V时最高
                LIB_GpioWrite("D0",0)--打开水阀继电器开始灌溉
            elseif val > 30 then
                LIB_GpioWrite("D0",1)--关闭水阀继电器
            end
        end
    end
    --查询光照强度传感器是否出数
    flag, illumination = LIB_BH1750GetResult()
    if flag == 1 then
        --光照强度值去掉小数部分,单位:勒克斯(Lx)
        print(string.format("illumination: %.0f (Lx)", illumination))
        --向机智云服务器发送短整数型光照强度数值(舍去小数部分),单位:Lx
        LIB_SendToGizCloud("Rs4", math.floor(illumination))
        if illumination > 700 then --判断是否重新进入白天
            baitian = 1
        end
        if baitian == 1 then
            if Auto == 1 then --自动模式下
                if val < 300 then --判断光强是否小于阈值
                    baitian = 0 
                    LIB_GpioWrite("D3",0)--打开补光继电器
                else
                    LIB_GpioWrite("D3",1)--关闭补光继电器
                end
            end
        end
    end
    if Auto == 0 then--手动模式下
        --查询机智云是否下发了写"Sw2"数据点(手动控制水阀继电器开关)
        flag,recv_data = LIB_RecvFromGizCloud("Sw2")
        if flag == 1 then
            if recv_data == 1 then -- 云下发了1
                LIB_GpioWrite("D0",0)--打开继电器
            else -- 云下发了0
                LIB_GpioWrite("D0",1)--关闭继电器
            end
        end
        --查询机智云是否下发了写"Sw3"数据点(手动控制二氧化碳继电器开关)
        flag,recv_data = LIB_RecvFromGizCloud("Sw3")
        if flag == 1 then
            if recv_data == 1 then -- 云下发了1
                LIB_GpioWrite("D1",0)--打开继电器
            else -- 云下发了0
                LIB_GpioWrite("D1",1)--关闭继电器
            end
        end         
        --查询机智云是否下发了写"Sw4"数据点(手动控制加热继电器开关)
        flag,recv_data = LIB_RecvFromGizCloud("Sw4")
        if flag == 1 then
            if recv_data == 1 then -- 云下发了1
                LIB_GpioWrite("D2",0)--打开继电器
            else -- 云下发了0
                LIB_GpioWrite("D2",1)--关闭继电器
            end
        end
        --查询机智云是否下发了写"Sw6"数据点(手动补光)
        flag,recv_data = LIB_RecvFromGizCloud("Sw6")
            if recv_data == 1 then -- 云下发了1
                LIB_GpioWrite("D4",0)--打开补光继电器
            else -- 云下发了0
                LIB_GpioWrite("D4",1)--关闭补光继电器
            end
        end
    end