--机智云产品识别
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