十分钟开发物联网:智能气象站(4G版)

317 阅读5分钟

本文实现的气象站集成了各种常用的气象测量传感器(包含:温度、湿度、气压、紫外线、PM2.5、风速、雨水感应),ShineBlink万能核心板采集这些传感器数据,并将它们上传至机智云,然后我们就可以在远程通过手机App或者Web网页端来访问这个气象站测量的所有传感器数据。

视频教程及实物展示

视频演示教程:

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


硬件端接线图

​需要注意的是:由于连接的电路传感器比较多,因此给 ShineBlink 开发板提供5V的电源带载能力至少要大于1A。

材料清单

硬件端完整源码

​--定义函数:将传感器输出电压(单位:mv)转换成紫外线指数index

function GetUvIndex(v)

if v < 50.0 then

index = 0

elseif v < 227.0 then

index = 1;

elseif v < 318.0 then

index = 2;

elseif v < 408.0 then

index = 3;

elseif v < 503.0 then

index = 4;

elseif v < 606.0 then

index = 5;

elseif v < 696.0 then

index = 6;

elseif v < 795.0 then

index = 7;

elseif v < 881.0 then

index = 8;

elseif v < 976.0 then

index = 9;

elseif v < 1079.0 then

index = 10;

else

index = 11

end

return index

end

--使能USB print输出打印

LIB_UsbConfig("CDC")

--机智云平台为每个产品类别分配的唯一PK和PS,一定要改成您自己的PK和PS

PK = "7ebaec64beaf4e389a2957f38711fcda"

PS = "b4a4ef17dbf74463b0f1b3c525a8b8de"

--初始化4G模块

LIB_Giz4GConfig(PK,PS,1000,120,"UART0","D5","HIGH","D6","HIGH")

--配置A0-A3这四个电压采集通道同时开始工作,当每个通道采集满50个点时缓存满,每个点的采集时间间隔为10ms

LIB_ADConfig(50,10000)

--设置PM2.5传感器占用TX1和RX1引脚

LIB_ZPH04Config("UART1")

--设置sht3x传感器占用SCL0和SDA0引脚,并启动传感器以每秒出10个数据的频率工作,repeatability="HIGH"时精度最高

LIB_Sht3xConfig("IIC0","10","HIGH")

--设置BMP280气压计传感器占用SCL1和SDA1引脚,并启动传感器以每秒输出26.32组数据的频率工作

LIB_BMP280Config("IIC1")

--开始大循环

while(GC(1) == true)

do

LIB_DelayMs(50)

--查询是否读到温湿度数据产生

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, temprature, pressure = LIB_BMP280GetResult()

if flag == 1 then --如果传感器此时有数据

--温度值保留两位小数,气压值去掉小数部分

print(string.format("temprature: %.2f pressure: %.0f Pa", temprature, pressure))

--向机智云服务器发送长整数型气压数值,单位:Pa

LIB_SendToGizCloud("RL7", math.floor(pressure))

end

--查询是否读到传感器PM2.5值

flag, pm25_val = LIB_ZPH04GetPM25()

if flag == 1 then

--打印读到的PM2.5值,保留1位小数,单位:ug/m^3

print(string.format("PM2.5:%.1f", pm25_val))

--向机智云服务器发送(PM2.5)浮点型小数值(范围应是-1000.0~5000.0)

LIB_SendToGizCloud("Rf1", pm25_val)

end

--查询是否读到A0端口的电压采集值(风速)

A0_full_flag, A0_tab = LIB_ADCheckBufFull("A0")

--每当A0通道的缓存满以后,计算缓存内的50个元素的平均值,并换算成电压值

--由LIB_ADConfig(50,10000)可以算出,此处大概是50X10000us=0.

上面代码中出现的"LIB_"开头的库函数的详细介绍可以在shineblink.com网站上的API文档中查询。

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

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

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

本例中我们使用了"Rf1","Rf2","Rf3","Rs1","Rs2","Rs3","RL7"这七个数据点分别作为PM2.5,风速,雨滴,温度,湿度,紫外线等级,大气压强这七个传感器值上传数据通道,记得在机智云平台修改相应的数据点的名称。



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

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

开发好以后的页面如下:

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

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

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

如果开发者希望开发一个专属的微信小程序应用, 可点击了解微信应用开发 - 机智云了解相关开发教程。