回到首页 返回首页
回到顶部 回到顶部
返回上一页 返回上一页

微型气象站 简单

头像 tiger_zc 2020.07.23 1776 0

拿到DF的SHT31测试样品好久了,由于一直在外面出差,手里没有趁手的器材,只是简单写了一个开箱测试,没有好好做对比测试研究。昨天终于拿起来,完成了SHT31和DHT11的对比测试。做一个简单的微型环境气象站,并且通过物联网记录数据变化,并在掌控板上显示实时数值。

步骤1 项目主要内容

通过传感器获取环境的温湿度,通过WIFI网络发送到EasyIOT服务器,电脑和微信上用曲线图展示过去24小时的温度变化。

步骤2 所需材料清单

材料清单

步骤3 硬件介绍及连接

project-image

SHT31-F温湿度传感器

       SHT31-F数字温湿度传感器采用业内知名的瑞士Sensirion公司推出的新一代SHT31-F温湿度传感器芯片。得益于Sensirion的CMOSens®技术,高集成度电容式测湿元件和能隙式测温元件,SHT31-F能够提供极高的可靠性和出色的长期稳定性,具有功耗低、反应快、抗干扰能力强等优点。IIC通讯,兼容3.3V/5V,可以非常容易的集成到智能楼宇、天气站、仓库存储、养殖、孵化等应用场景中。 SHT31-F在SHT3x系列中属于标准版,相比上一代精度更高。传感器在0%RH~100%RH(25℃时)误差仅为±2%RH,传感器在0℃-90℃(典型值)误差仅为±0.2℃。 这款芯片上面还有一层IP67的PTFE膜,可防止传感器开孔接触灰尘,因此允许传感器在恶劣环境条件下使用,如密切接触灰尘可能对传感器的精准性具有影响的地方。由于最小封装和膜的高水气渗透性,相对湿度和温度信号的响应时间与没加膜的传感器所实现的相同。虽然,保护膜可完美防止灰尘的进入,但在一般情况下它不能防止挥发性化学物质的污染。

特性 

高精度,内部自动校准,

数字输出 低功耗、响应速度快、抗干扰能力强

 IP67防尘保护膜 兼容3.3V/5V控制器 

应用场景 

 智能楼宇、家具、 天气站、仓库存储、 动物、植物养殖 、动物孵化箱 、植物种子发芽箱 

 技术规格 

工作电压:2.15~5.5V  

project-image

       掌控板由创客教育专家委员会推出,是教学用开源硬件主控板,可进行物联网及python编程学习目前“掌控”可以实现STEAM教学、物联网、智能控制类作品、DIY创意作品等多方面的应用。包含如下: 

 1、教学应用:

 支持图形化和代码编程,可供不同阶段学生学习编程; 

体积小,空间利用率高,方便收纳、携带、管理及作品制作; 

内置多种输入输出,在不外接设备的情况下也能完成多种创意作品; 

方便拓展,兼容性强,有丰富的智能电子硬件、结构件等周边资源;

无线群组功能,能实现相互之间的控制,团队协作,共同完成项目; 

物联网功能,能够完成现实应用案例,让学生真正做到学以致用。

 2、物联网应用:

WiFi+蓝牙,物联网节点,掌控未来科技。 

 双模wifi: 内置无线网卡,可连接wifi网络;

 可作为路由器,设为wifi热点;

 双模蓝牙: 支持蓝牙4.0,连接蓝牙设备;

 BLE无线广播,实现群组功能; 

3、智能控制类作品应用:

超高性能主控,强大的驱动能力和拓展能力,轻松实现各类智能控制作品。 

高性能:ESP32双核芯片,240MHz主频; 

超大内存:520KB SRAM运行内存,4MB Flash动态内存;

 拓展能力:20路数字通道,5路模拟通道,支持I2C接口、UART接口、SPI接口。

 4、DIY创意作品应用:

迷你主板结合内置输入输出设备,快速实现多种DIY创意作品应用。 

外观尺寸:约信用卡一半大小,磁吸、魔术贴多种固定方式,配套各种皮肤;

 输入设备:三轴加速度计、地磁传感器、温度传感器、湿度传感器、气压传感器、光线传感器、麦克风、物理按键*2(A/B)、触摸按键*6;

 输出设备:无源蜂鸣器、RGB灯*3、1.3英寸OLED屏(支持中英文字符显示)。

project-image

把掌控板插在IO扩展板上,然后把SHT31-F温湿度传感器接在IIC接口,注意线序。

步骤4 程序编写

project-image

上图中,WIFI热点和密码填写自己的。MQTT配置我用到了DF的EasyIOT。里面所有的参数需要根据自己注册后的参数进行填写,直接照抄我的参数是不行的哦,哈哈

具体步骤我下面单独讲一下。

project-image

步骤5 Easy IOT的配置

project-image

Easy IOT是DF团队开发的一个简单易用的物联网平台,网址http://iot.dfrobot.com.cn

该平台具有以下特点:

配置简单即联即用

支持OBLOQ 串口数据传输

实时监控 数据分析

创建项目步骤如下:

1、创建项目设备:设备一 登录IoT网站,注册账号。

2、进入工作间。新建一个设备,默认名字“设备一”。( 一个账号,默认一共有10000条信息的储存容量。这些容量共所有设备共享。)例如,图中设备上方显示“0/1000”,那么此设备最大可储存1000条信息,已使用0条信息的储存空间。如果此设备收发的信息超过1000条,新信息将不再存入。 每个设备默认每隔1s储存一次消息。 观察到设备唯一识别码Topic以及左侧的用户信息,点击眼睛图标可以将隐藏的Iot_id和Iot_pwd显示出来。

为了稍后编程需要,记下相关账号:

iot_id:

iot_pwd:

topic0:

topic1:

topic2:

3、上传程序

4、查看结果


project-image
project-image
project-image

步骤6 展示结果

配置完成,上传程序,就能通过PC端和或者微信小程序查看上传的值。数据还能通过正序或者倒序查看,还能生成EXCEL表格保存。这里需要注意,数据量保存的量是有限的。我测试的 时候设置的是1秒,数据正常后,可以根据自己的实际情况调整时间。我的程序里是采集温度、湿度、照度三个值,故添加了三个设备。时间设置为半小时采集一次数据,这样可以延长存储量。大家可以根据自己的情况实际调整,灵活运用。

project-image

下图为PC端的数据界面

project-image

下图为微信小程序的显示界面

project-image
代码
/*!
 * MindPlus
 * mpython
 *
 */
#include <MPython.h>
#include <DFRobot_Iot.h>
#include <DFRobot_SHT3x.h>
// 函数声明
void obloqMqttEventT0(String& message);
void obloqMqttEventT1(String& message);
void obloqMqttEventT2(String& message);
// 静态常量
const String topics[5] = {"V5LJcA_ZR","3ogzhjnGR","6ynudqnMR","",""};
const MsgHandleCb msgHandles[5] = {obloqMqttEventT0,obloqMqttEventT1,obloqMqttEventT2,NULL,NULL};
// 创建对象
DFRobot_Iot   myIot;
DFRobot_SHT3x sht3x(&Wire,0x44,4);


// 主程序开始
void setup() {
	mPython.begin();
	myIot.setMqttCallback(msgHandles);
	while (sht3x.begin() != 0);
	display.setCursor(42, 22);
	display.print("微型气象站");
	rgb.write(-1, 0x0000FF);
	myIot.wifiConnect("nova 5 Pro", "tiger183");
	while (!myIot.wifiStatus()) {yield();}
	display.setCursor(0, 0);
	display.print("WIFI Connected");
	rgb.write(-1, 0x33FF33);
	buzz.play(DADADADUM, Once);
	myIot.init("iot.dfrobot.com.cn","wgJo50lZR","","QgJocA_Wgz",topics,1883);
	myIot.connect();
	while (!myIot.connected()) {yield();}
	display.setCursor(0, 22);
	display.print("MQTT Connected");
}
void loop() {
	display.fillScreen(0);
	display.setCursor(0, 0);
	display.print("SHT31温度");
	display.setCursor(70, 0);
	display.print((sht3x.getTemperatureC()));
	display.setCursor(0, 22);
	display.print("SHT31湿度");
	display.setCursor(70, 22);
	display.print((sht3x.getHumidityRH()));
	display.setCursor(0, 44);
	display.print("光照度");
	display.setCursor(70, 44);
	display.print((light.read()));
	myIot.publish(topic_0, (sht3x.getTemperatureC()));
	myIot.publish(topic_1, (sht3x.getHumidityRH()));
	myIot.publish(topic_2, (light.read()));
	delay(60000);
}


// 事件回调函数
void obloqMqttEventT0(String& message) {
	if (((sht3x.getTemperatureC())>25)) {
		rgb.write(0, 0xFF0000);
	}
	else {
		rgb.write(0, 0x00FF00);
	}
}
void obloqMqttEventT1(String& message) {
	if (((sht3x.getHumidityRH())>60)) {
		rgb.write(1, 0xFF0000);
	}
	else {
		rgb.write(1, 0x00FF00);
	}
}
void obloqMqttEventT2(String& message) {
	if (((light.read())<200)) {
		rgb.write(2, 0xFF0000);
	}
	else {
		rgb.write(2, 0x00FF00);
	}
}

评论

user-avatar