4G气象站的设计与实现

电子说

1.3w人已加入

描述

 

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

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

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

 

 一、本章实现功能介绍  

Shinelink开发板通过采集PM2.5传感器、紫外线传感器、风速传感器、雨滴感应传感器、SHT温湿度传感器、气压传感器采集数据,数据通过ML302(4G通信模块)将数据上传至机智云,之后我们就可以在远程通过手机App或者Web网页端来访问这个气象站测量的所有传感器数据。

 

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

气象站

 

气象站

二、硬件端接线图  

气象站

注意:上面的电路传感器比较多,要求给 ShineBlink 开发板提供5V的电源带载能力至少大于1A。

 

 三、材料清单  

 

气象站

 

 四、硬件端完整源代码  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
--定义函数:将传感器输出电压(单位:mv)转换成紫外线指数indexfunction 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 indexend--使能USB print输出打印LIB_UsbConfig("CDC")--机智云平台为每个产品类别分配的唯一PK和PS,一定要改成您自己的PK和PSPK = "7ebaec64beaf4e389a2957f38711fcda"PS = "b4a4ef17dbf74463b0f1b3c525a8b8de"--初始化4G模块LIB_Giz4GConfig(PK,PS,1000,120,"UART0","D5","HIGH","D6","HIGH")--配置A0-A3这四个电压采集通道同时开始工作,当每个通道采集满50个点时缓存满,每个点的采集时间间隔为10msLIB_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
humi: %.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
", 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
", vol_mv))        uv_index = GetUvIndex(vol_mv)--将电压转换成紫外等级指数        --打印紫外线等级,0~11        print(string.format("ultraviolet level=%d
", 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
", vol))        --向机智云服务器发送(雨滴值)浮点型小数值(范围应是-100.00~500.00)        LIB_SendToGizCloud("Rf3", vol)    endend
 五、机智云接入和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访问设备。

开发好以后的页面如下:

气象站

具体过程可参考:

http://www.shineblink.com/html/gizwits/9_4_4GJoinSaiBoTan/4GJoinSaiBoTan.html

 

 

  审核编辑:汤梓红

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

全部0条评论

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

×
20
完善资料,
赚取积分