实操案例:基于Shineblink和机智云的4G气象站

描述

 

ShineBlink 是一款零门槛、零开发环境、低代码的万能物联网智能硬件开发板

机智云 为开发者提供傻瓜式硬件上云、接App/小程序的能力

结合 ShineBlink 和 机智云 开发者即使不懂嵌入式物联网开发、云和App开发,也能很快实现一款包含硬件、云和App的物联网智能硬件。 

 

一、本章实现功能介绍

Shinelink开发板通过采集PM2.5传感器、紫外线传感器、风速传感器、雨滴感应传感器、SHT温湿度传感器、气压传感器采集数据,数据通过ML302(4G通信模块)将数据上传至机智云,之后我们就可以在远程通过手机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.5秒执行一次
    if A0_full_flag == 1 then
        SUM = 0
        for i = 1, #A0_tab do --此处#A0_tab的值是50,表示A0_tab表内的元素个数
            SUM = SUM + A0_tab[i]
        end
        AVER = SUM / #A0_tab --计算平均采样值
        --将A0通道的AD值转换成实际电压打印出来
        out_voltage = AVER*3.6/4096.0
        --打印出传感器输出的电压值,保留小数点后两位,单位V
        print(string.format("wind voltage=%.2fV\r\n", out_voltage))
        --向机智云服务器发送(风速)浮点型小数值(范围应是-1000.0~5000.0)
        LIB_SendToGizCloud("Rf2", out_voltage)
    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值转换成实际电压打印出来
        vol_mv = AVER*3600/4096.0
        --打印出传感器输出的电压值,保留小数点后两位,单位mV
        print(string.format("ultraviolet voltage=%.2fmV\r\n", vol_mv))
        uv_index = GetUvIndex(vol_mv)--将电压转换成紫外等级指数
        --打印紫外线等级,0~11
        print(string.format("ultraviolet level=%d\r\n", uv_index))
        --向机智云服务器发送紫外线等级,短整数型
        LIB_SendToGizCloud("Rs3", uv_index)
    end
    --查询是否读到A2端口的电压采集值(雨滴感应)
    A2_full_flag, A2_tab = LIB_ADCheckBufFull("A2")
    --每当A2通道的缓存满以后,计算缓存内的50个元素的平均值,并换算成电压值
    --由LIB_ADConfig(50,10000)可以算出,此处大概是50X10000us=0.5秒执行一次
    if A2_full_flag == 1 then
        SUM = 0
        for i = 1, #A2_tab do --此处#A2_tab的值是50,表示A2_tab表内的元素个数
            SUM = SUM + A2_tab[i]
        end
        AVER = SUM / #A2_tab --计算平均采样值
        --将A0通道的AD值转换成实际电压打印出来
        vol = AVER*3.6/4096.0
        --打印雨滴传感器输出的电压值,保留小数点后两位,单位V
        print(string.format("rain voltage=%.2fV\r\n", vol))
        --向机智云服务器发送(雨滴值)浮点型小数值(范围应是-100.00~500.00)
        LIB_SendToGizCloud("Rf3", vol)
    end
end

物联网五、机智云接入和App开发

无论使用哪种方法实现APP控制,都必须先定义数据点。

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

物联网

 

 

 

方法一:使用机智云测试APP
 

先在机智云开发者中心定义好数据点

随后下载机智云测试APP 
 

使用机智云测试APP扫描4G模块二维码
 

即可实现APP控制设备了。
 

具体过程可参考:

http://www.shineblink.com/html/gizwits/9_3_4GJoin/4GJoin.html

 

方法二:使用赛博坦工具零代码定制版App

在机智云开发者中心定义好数据点后,

创建一个移动应用,定义相应的页面信息

再关联相应的智能产品,

即可实现定制版App访问设备。

开发好以后的页面如下:

物联网

 

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分