【Funpack3-5】基于Arduino UNO R4 WiFi板的温湿度传感器采集以及云端显示
该项目使用了Arduino、SHT40,实现了温湿度云端采集显示的设计,它的主要功能为:采集SHT40传感器数据,并通过串口打印,最后将数据上传到HA平台进行显示。
标签
Funpack活动
FunPack3-5
无言的朝圣
更新2025-01-14
12

一、项目介绍

本次活动是Funpack活动第五期,是由硬禾学堂联合DigiKey发起的“玩成功就全额退”活动,本次提供了三款板卡供大家选择,本人选择的是Arduino UNO R4 WiFi 板,根据活动要求,将通过这个板卡实现搭配传感器通过网络连接到智能云端,可以从远程获取传感器的信息。这个板卡也非常适合我们的设计需求。

进入本活动的开发板使用之旅,深入体验Arduino的快速原型设计,完成了一系列的任务与挑战从基础配置到进阶应用,全面体验了物联网开发的乐趣。本次选用的传感器是SHT40温湿度传感器,主要实现的是基于Arduino UNO R4 WiFi板的温湿度传感器采集以及云端显示。

本次使用的硬件包括:

Arduino UNO R4 WiFi板:Arduino UNO R4 WiFi 是一款基于32位Arm® Cortex®-M4 Renesas RA4M1微控制器,具有用于 Wi-Fi® 和蓝牙连接的ESP32模块,具备强大的计算能力和多种连接功能。该板SRAM 32kB,闪存256kB,时钟频率为48MHz,USB端口升级为USB-C,并且最大电源供应电压增加到24V。该板提供了一个CAN总线,允许用户通过连接多个扩展板来最小化布线并执行不同的任务。板载的Qwiic 连接器可以方便地创建即插即用风格的项目。

SHT40温湿度传感器扩展板:SHT4x是一个数字传感器平台,用于测量不同精度等级的相对湿度和温度。其I2C接口提供多个预配置的I2C地址,同时保持超低功耗预算(0.4 μW)。电源修剪的内部加热器可以在三个加热级别使用,从而使传感器在苛刻的环境中运行。四针双平面无引线封装适用于表面贴装技术(SMT)加工,包括可选的封装上专利PTFE[1]膜或可拆卸的保护罩。根据ISO17025的传感器特定校准证书,可通过唯一序列号识别。

二、设计思路

项目的设计思路主要围绕物联网(IoT)的核心概念展开,即通过传感器采集数据,利用开发板进行处理,并通过网络传输至云端或智能家居平台进行远程监控。具体而言,项目分为以下几个阶段:

基础配置与环境搭建:首先,需要配置Arduino IDE开发环境,连接Arduino UNO R4 WiFi开发板,确保能够正常上传代码并进行调试。

传感器数据采集:利用SHT40温湿度传感器,采集温度和湿度数据。

数据处理与显示:在开发板上处理传感器数据,通过串口打印等方式进行初步展示。

网络通信与数据上传:利用开发板的WiFi功能,通过MQTT协议将传感器数据上传至HomeAssistant智能家居平台,实现远程监控。

整体的硬件框图如下:

三、软件流程图及各功能对应的主要代码片段及说明

软件流程图:

初始化:配置开发环境,连接开发板,安装基础库。

传感器数据采集:通过I2C接口读取SHT40传感器的数据。

数据处理:在开发板上处理传感器数据,进行必要的计算或转换。

数据显示:通过串口打印等方式显示传感器数据。

网络通信:配置WiFi和MQTT参数,将传感器数据上传至HomeAssistant平台。

主要代码片段及说明:

初始化代码:

void setup() {
// put your setup code here, to run once:
Serial.begin(115200);

while (!Serial) {
; // wait for serial port to connect. Needed for native USB port only
}

Serial.println("HA com test");
Serial.println("connect to WPA SSID: ");
Serial.println(ssid);
// attempt to connect to WiFi network:
while (WiFi.begin(ssid, pass) != WL_CONNECTED) {
Serial.print("......");
delay(5000);
}

Serial.print("connect wifi succeed!");
Serial.println();
Serial.println(WiFi.localIP());

// You can provide a unique client ID, if not set the library uses Arduino-millis()
// Each client must have a unique client ID
mqttClient.setId("clientId");

// You can provide a username and password for authentication
mqttClient.setUsernamePassword("admin", "admin");

Serial.print("connect to the MQTT broker: ");
Serial.println(broker);

if (!mqttClient.connect(broker, port)) {
Serial.print("MQTT connection failed! Error code = ");
Serial.println(mqttClient.connectError());

while (1);
}

Serial.println("connected to the MQTT succeed!");
Serial.println();

sht4.setPrecision(SHT4X_HIGH_PRECISION);
switch (sht4.getPrecision()) {
case SHT4X_HIGH_PRECISION:
Serial.println(F("SHT40 set to High precision"));
break;
case SHT4X_MED_PRECISION:
Serial.println(F("SHT40 set to Medium precision"));
break;
case SHT4X_LOW_PRECISION:
Serial.println(F("SHT40 set to Low precision"));
break;
}

sht4.setHeater(SHT4X_NO_HEATER);
switch (sht4.getHeater()) {
case SHT4X_NO_HEATER:
Serial.println(F("SHT40 Heater turned OFF"));
break;
case SHT4X_HIGH_HEATER_1S:
Serial.println(F("SHT40 Heater: High heat for 1 second"));
break;
case SHT4X_HIGH_HEATER_100MS:
Serial.println(F("SHT40 Heater: High heat for 0.1 second"));
break;
case SHT4X_MED_HEATER_1S:
Serial.println(F("SHT40 Heater: Medium heat for 1 second"));
break;
case SHT4X_MED_HEATER_100MS:
Serial.println(F("SHT40 Heater: Medium heat for 0.1 second"));
break;
case SHT4X_LOW_HEATER_1S:
Serial.println(F("SHT40 Heater: Low heat for 1 second"));
break;
case SHT4X_LOW_HEATER_100MS:
Serial.println(F("SHT40 Heater: Low heat for 0.1 second"));
break;
}

if (! sht4.begin(&Wire1)) {
Serial.println(F("SHT40 sensor not found!"));
while (1) ;
}
else
{
Serial.print(F("SHT40 detected!\t"));
Serial.print(F("Serial number:\t"));
Serial.println(sht4.readSerial(), HEX);
}
}

初始化部分一共包括三部分,包括串口初始化,这一部分主要属于板卡的基础功能,配置波特率就可以启用;第二部分是网络通信部分的初始化,需要配置wifi以及目标网络等内容;第三部分就是传感器的初始化,需要进行一些基础配置。

传感器数据采集代码:

sensors_event_t humidity, temp;
sht4.getEvent(&humidity, &temp);// populate temp and humidity objects with fresh data

float tem = temp.temperature;
Serial.println("Temp *C = " + String(tem));
float hum = humidity.relative_humidity;
Serial.println("Hum. % = " + String(hum));

由于我们已经实现传感器以及串口的基础配置,这里我们只要进行一些技术的采集就可以轻松实现;

网络通信代码:

  dataObj["hum"] = round(hum);
dataObj["tem"] = round(tem);
String jsonString = JSON.stringify(dataObj);

mqttClient.beginMessage(state_topic);
mqttClient.print(jsonString);
mqttClient.endMessage();

这里主要是生成能够识别的MQTT协议,并启用发送;

四、功能展示及说明

1、串口打印传感器数据:通过串口打印SHT40温湿度传感器的数据:

2、HomeAssistant平台远程监控:将传感器数据通过MQTT协议上传至HomeAssistant智能家居平台,实现远程监控和数据可视化:

整体的动态显示可以查看视频中的效果展示部分。

五、心得体会

通过参与本次Funpack3-5活动,深刻体验了物联网开发的乐趣。从基础配置到进阶应用,每一步都充满了学习的机会和成长的空间。通过实际操作,掌握了Arduino UNO R4 WiFi开发板的使用方法,还学会了如何与传感器进行通信、如何处理数据并上传至云端平台。我们在学习过程中要充分查找学习资源,有利于快速进行代码实现和问题排除。

附件下载
ArduinoAndSHT40_test.zip
团队介绍
评论
0 / 100
查看更多
硬禾服务号
关注最新动态
0512-67862536
info@eetree.cn
江苏省苏州市苏州工业园区新平街388号腾飞创新园A2幢815室
苏州硬禾信息科技有限公司
Copyright © 2024 苏州硬禾信息科技有限公司 All Rights Reserved 苏ICP备19040198号