Funpack3-5基于ArduinoR4的传感器云端远程获取
该项目使用了ArduinoR4、BH1750FVI传感器,实现了传感器云端远程获取的设计,它的主要功能为:将BH1750FVI传感器的数据通过wifi传输到HA平台。
标签
Arduino
Funpack活动
FunPack3-5
BH1750
金玉其中
更新2025-01-14
10

一、项目介绍

感谢本次Funpack第五期的成功举办,本次活动为大家提供了三种板卡进行选择,大家根据自身情况和兴趣选择合适的板卡进行学习,考虑本人的个人情况和能力,本次选择了Arduino UNO R4 WiFi板作为本次的学习对象,之前一直知道Arduino板子的快速原型验证能力,这一次也是拥有一个属于自己的Arduino。

本次任务也是很有人性化的,可以任选,结合手中的资源,选择“任务2:搭配传感器,并通过网络连接到智能云端,可以从远程获取传感器的信息”作为本次的目标任务。

二、硬件介绍

介绍一下本次用到的板卡和传感器:

Arduino UNO R4 WiFi板:这款卓越的开发板搭载了32位Arm® Cortex®-M4 Renesas RA4M1微控制器,并集成了ESP32模块,实现了Wi-Fi®与蓝牙的无缝连接。其强大的计算能力结合多样的连接选项,让创意无限延伸。配备32kB的SRAM与256kB的闪存,时钟频率高达48MHz,性能卓越。USB端口已升级为先进的USB-C接口,电源供应电压更是提升至24V,满足更多应用场景需求。板载的Qwiic连接器则为用户提供了即插即用的便捷体验,让项目创建更加轻松快捷。这款板卡可以说是最新Arduino板卡。

BH1750FVI传感器模块是一种数字环境光传感器模块,旨在提供精确的光感测能力。它采用BH1750FVI传感器,通过I2C接口进行通信,并具有16位模数转换器(ADC)。集成在DLight Unit中的BH1750FVI传感器提供宽范围的光灵敏度,并提供高分辨率测量。它可以检测范围从1到65535勒克斯的光强度,允许精确和详细的读数。16位ADC确保将模拟光信号精确转换为数字值。DLight Unit体积小巧,易于集成到各种项目和设备中。它的小尺寸允许灵活的放置和安装,使其能够在空间有限的环境中使用。此外,DLight Unit在设计时考虑到低功耗。这确保了高效的操作,并延长了系统的电池寿命。DLight Unit适用于需要精确可靠测量环境光的各种光传感应用。它可用于自动照明系统、智能家居、环境监测设备以及其他依赖于光强数据的应用。

简单看一下传感器原理图:
0

三、设计思路

整体的设计思路是通过上传光照强度来实现项目目标,无线通信方式是通过板载的wifi模块,物联网平台选择的是HA平台,基本框图如下:

image.png

模块需要一个5V供电,不过IIC接口通信电平是3.3V的,接口插座和板卡有点不匹配,我们只能通过杜邦线进行连接实际连接效果如下:
0

四、代码介绍

接下来我们进行了一下传感器接口测试:

#include <BH1750.h>
#include <Wire.h>

BH1750 lightMeter;
uint16_t lux;

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

Serial.println(F("BH1750 Test begin"));

}

void loop() {
// put your main code here, to run repeatedly:
float lux = lightMeter.readLightLevel();
Serial.print("Light: ");
Serial.print(lux);
Serial.println(" lx");
delay(5000);
}

可以看到串口不断的在发送光强数据:
0

接下来就是实现wifi连接,然后进行物联网数据上传功能,这一部分其实并不难,主要用的是板载的ESP32-S3:


0

软件方面如下:

#include <ArduinoMqttClient.h>
#include <WiFiS3.h>
#include <WiFiClient.h>
#include <Arduino_JSON.h>

WiFiClient wifiClient;
MqttClient mqttClient(wifiClient);

char ssid[] = "xxxxxx";
char pass[] = "xxxxxx";

const char broker[] = "xxxxxx";
int port = 1883;
const char state_topic[] = "homeassistant/sensor/sensorBH1750/state";

JSONVar JSONdata;

void setup() {
// put your setup code here, to run once:
while (!Serial) {
; // wait for serial port to connect. Needed for native USB port only
}
while (WiFi.begin(ssid, pass) != WL_CONNECTED) {
Serial.print("......");
delay(5000);
}

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

mqttClient.setId("clientId");
mqttClient.setUsernamePassword("xxxxxx", "xxxxxx");

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);
}
}

这样我们就实现了wifi和mqtt的配置,最后我们整合一下采集到的数据发送就可以了:

void loop() {
// put your main code here, to run repeatedly:
mqttClient.poll();

float lux = lightMeter.readLightLevel();
Serial.print("Light: ");
Serial.print(lux);
Serial.println(" lx");

JSONdata["Light"] = lux;
String jsonString = JSON.stringify(JSONdata);

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

delay(1000);
}

最终的HA平台看到的效果:
0

五、心得体会

在这次精彩的Funpack活动中,不仅可以掌握Arduino UNO R4 WiFi板的操作技巧,还还可以实践与传感器的无缝通信、数据处理及云端上传的重要物联网活动。期间,尽管面临重重挑战与困境,但这些磨砺却成为了我成长道路上不可或缺的阶梯。展望未来,可以深耕物联网领域,探索新技术与新应用的无限可能,旨在为我们的日常生活增添更多便捷与惊喜。

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