关闭视频

十分钟开发物联网:农业智慧灌溉(4G版)

发表于:2021年11月17日 15:26更新于:2024年05月03日 21:10

本文实现的智慧灌溉设备集成一些相关农作物关键指标的测量传感器(包含:光照强度、温度、湿度、土壤湿度),ShineBlink开发板板采集传感器数据,并将它们上传至机智云,然后我们就可以在远程通过手机App或者Web网页端来访问农作物的环境数据,并决定是远程人工控制打开灌溉水阀进行灌溉,还是让设备自动根据传感器的环境数据来进行灌溉。

 

视频教程及实物展示

 

视频演示教程:

 

接线实物图和App监测页面:

 

 

硬件端接线图

 

 

材料清单

 

名称 推荐购买源 资料下载
通用版机智云App 免费 https://download.gizwits.com/zh-cn/p/98/99
ShineBlink 万能物联网开发板 淘宝搜索“机智云”或“ShineBlink”店铺有售 shineblink.com
带机智云GAgent固件的ML302 4G模块 淘宝搜索“机智云”或“ShineBlink”店铺有售 gizwits.com
温湿度、光照强度、土壤湿度传感、水阀继电器模块​   淘宝搜索“ShineBlink”店铺有售,或者任意其他店铺(功能相似即可) shineblink.com
黑色底板

该底板只是为了省掉接杜邦线,让外观好看一些,不是必需品,开发者如果没有可以用杜邦线来替代。

如果仍想获取该底板,可通过右边提供的PCB工程资料自己打样PCB制作即可。

https://fe9a58.link.yunpan.360.cn

/lk/surl_y6mpLtWWB9W#/-0

 

 

硬件端完整源码

 

--使能USB print输出打印

LIB_UsbConfig("CDC")
--机智云平台为每个产品类别分配的唯一PK和PS,一定要改成您自己的PK和PS
PK = "5b7f59ee98444ebdad4165d73fb19a53"
PS = "74ab6eb8b0774c3bb3acec017bacfb8d"
--初始化4G模块
LIB_Giz4GConfig(PK,PS,1000,120,"UART0","D5","HIGH","D6","HIGH")
--配置D0为普通输出,控制水阀继电器
LIB_GpioOutputConfig("D0","STANDARD")
LIB_GpioWrite("D0",1)--关闭继电器
--配置A0-A3这四个电压采集通道同时开始工作,当每个通道采集满50个点时缓存满,每个点的采集时间间隔为10ms
LIB_ADConfig(50,10000)
--设置sht3x传感器占用SCL0和SDA0引脚,并启动传感器以每秒出10个数据的频率工作,repeatability="HIGH"时精度最高
LIB_Sht3xConfig("IIC0","10","HIGH")
--设置BH1750光照强度传感器占用SCL1和SDA1引脚,并启动传感器以每秒输出5组数据的频率工作
LIB_BH1750Config("IIC1")
Auto = 0 --默认手动模式
--开始大循环
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
--查询机智云是否下发了写"Sw2"数据点(手动控制水阀继电器开关)
flag,recv_data = LIB_RecvFromGizCloud("Sw2")
if flag == 1 then
if Auto == 0 then --手动模式下,才允许用户远程App控制水阀
if recv_data == 1 then -- 云下发了1
LIB_GpioWrite("D0",0)--打开继电器
else -- 云下发了0
LIB_GpioWrite("D0",1)--关闭继电器
end
end
end
--查询是否读到温湿度数据
sht3x_flag,sht3x_temp,sht3x_humi = LIB_Sht3xGetResult()
if sht3x_flag == 1 then
--打印读到的温湿度值,保留2位小数
print(string.format("temp: %.2f\r\nhumi: %.2f", sht3x_temp, sht3x_humi))
--向机智云服务器发送(温湿度)短整数型数值(舍去小数部分)
LIB_SendToGizCloud("Rs1", math.floor(sht3x_temp))
LIB_SendToGizCloud("Rs2", math.floor(sht3x_humi))
end
--查询光照强度传感器是否出数
flag, illumination = LIB_BH1750GetResult()
if flag == 1 then
--光照强度值去掉小数部分,单位:勒克斯(Lx)
print(string.format("illumination: %.0f (Lx)", illumination))
--向机智云服务器发送短整数型光照强度数值(舍去小数部分),单位:Lx
LIB_SendToGizCloud("Rs3", math.floor(illumination))
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
--USB打印出传感器输出的电压值,保留小数点后两位,单位V
print(string.format("soil voltage=%.2fV\r\n", val))
--向机智云服务器发送土壤湿度传感器电压值,2位小数浮点型
LIB_SendToGizCloud("Rf3", val)
if Auto == 1 then --自动模式下,才允许设备自动根据土壤湿度来控制水阀
if val > 3.00 then --土壤越干,传感器电压值越高,3.3V时最高
LIB_GpioWrite("D0",0)--打开水阀继电器开始灌溉
else
LIB_GpioWrite("D0",1)--关闭水阀继电器
end
end
end
end

 

上面代码中出现的"LIB_"开头的库函数的详细介绍可点击查询。

 

机智云接入和App开发(三个选择)

 

►选择一:机智云+通用版APP访问设备(难度最低

通过《4G设备接入机智云教程》我们可以很快掌握机智云的接入流程,并使用现成的通用版机智云App即可很快的实现手机App远程访问我们的开发板。

本例中我们使用了"Rs1","Rs2","Rs3"这三个数据点分别作为温度,湿度,光照强度这三个传感器短整型值数据点作为上传至机智云的数据通道,记得在机智云平台修改相应的数据点的名称。

本例中我们使用了"Sw1","Sw2"这两个布尔值型数据点,一个作为接收机智云下发的手动/自动模式灌溉的数据通道,一个作为远程手动控制水阀开关继电器的数据通道,记得在机智云平台修改相应的数据点的名称。

本例中我们使用了"Rf3"带两位小数浮点型数据点作为土壤湿度传感器数据上传至机智云的数据通道,记得在机智云平台修改相应的数据点的名称。

► 选择二:机智云+零代码定制版App访问设备(难度较低

在选择二之前,必须完成上面选择一的工作,然后参考《赛博坦零代码App开发(4G版)》教程实现定制版App访问设备。

开发好以后的页面如下:

 

► 选择三:定制化开发APP或微信小程序(难度较高

如果有一定开发能力,开发者可以考虑在机智云免费提供的开源代码上做一定的定制开发形成自己的App。

如果开发者希望开发一个专属的App,机智云也会提供代码开源的安卓和IOS SDK框架,帮助开发者快速完成App开发,开发者仅需关注App的UI和UE设计即可,而相对复杂的协议与错误处理等事项可忽略。关于开源SDK的介绍和获取请进入docs.gizwits.com了解更多内容。

如果开发者希望开发一个专属的微信小程序应用, 可以进入docs.gizwits.com了解相关开发教程。