Funpack3-5: 基于Arduino UNO R4 WiFi开发板的物联网应用
该项目使用了Arduino UNO R4 WiFi开发板、Arduino Cloud,实现了物联网控制设备的设计,它的主要功能为:读取传感器,并通过Arduino Cloud,能够远程获取传感器数据、控制LED矩阵。
标签
Arduino
Funpack活动
WiFi
IoT
温度传感器
clr
更新2025-01-13
9

一、 项目介绍

Arduino uno r4 wifi 开发板集成 ESP32-S3 模块,提供 WiFi 和蓝牙功能,便于实现物联网项目。意法半导体、adafruit等制造商开源了很多硬件相关库,我们可以非常简单地利用这些库调用各种传感器,降低了开发门槛。本项目利用意法半导体的开源库调用LPS22HH传感器,获取温度和气压数据,并通过 Arduino Cloud 远程获取传感器数据,并控制LED矩阵。


项目目标

  1. 使用​ I2C 调用LPS22HH 温度和气压传感器获取温度和气压数据
  2. 控制LED矩阵灯,使其根据亮度螺旋增加或减少点亮的小灯数量。
  3. ​将开发板连接到 Arduino Cloud,并通过 Arduino Cloud 获取传感器数据和调节亮度


设计思路

利用开源库LPS22HHSensor.h通过 I2C 调用LPS22HH 温度和气压传感器获取温度和气压数据;Arduino_LED_Matrix.h控制板载LED矩阵。将开发板连接到 Arduino Cloud 后,Arduino Cloud 会同步关联变量的数值,利用这个特性同步气温、气压和亮度信息,开发板收到 Arduino Cloud 的亮度参数变动后,改变LED矩阵。同样为了节省计算资源,不同亮度的frame提前生成。

image.png


实现过程

初始化I2C、uart通信,初始化传感器;Arduino Cloud 相关代码由Arduino Cloud 自动生成,不需修改。

void setup() {
// Initialize serial and wait for port to open:
Serial.begin(115200);
matrix.begin();
// This delay gives the chance to wait for a Serial Monitor without blocking if none is found
pinMode(LED_BUILTIN, OUTPUT); // Led
// Initialize bus interface
dev_interface.begin();
// Initlialize component
PressTemp.begin();
PressTemp.Enable();
// Defined in thingProperties.h
initProperties();
// Connect to Arduino IoT Cloud
ArduinoCloud.begin(ArduinoIoTPreferredConnection);
/*
The following function allows you to obtain more information
related to the state of network and IoT Cloud connection and errors
the higher number the more granular information you’ll get.
The default is 0 (only errors).
Maximum is 4
*/
setDebugMessageLevel(2);
ArduinoCloud.printDebugInfo();
}


循环获取气压和温度数据,并通过uart打印信息

void loop() {
ArduinoCloud.update();
// Your code here
// Led blinking
digitalWrite(LED_BUILTIN, HIGH);
delay(250);
digitalWrite(LED_BUILTIN, LOW);
delay(250);
// Read pressure from sensor
float pressure, temperature;
PressTemp.GetPressure(&pressure);
PressTemp.GetTemperature(&temperature);

Pressure = pressure; //sync parameter between Arduino Cloud
Temperature = temperature;

SerialPort.print("Pres[hPa]:");
SerialPort.print(pressure, 2);
SerialPort.print(", Temp[C]:");
SerialPort.println(temperature, 2); // print info through uart
}

LED相关参数(亮度和开关)变化时,Arduino Cloud 自动触发此函数;开灯时,根据亮度信息查表获取frame并展示,实现根据亮度螺旋增加或减少点亮的小灯数量。

void onLEDMatrixChange()  {
// Add your code here to act upon LEDMatrix change
int brightness = (int)lEDMatrix.getBrightness();

if(brightness && lEDMatrix.getSwitch()){
if(brightness <= 96){
matrix.loadFrame(frame[brightness]);
SerialPort.print("Brightness:");
SerialPort.println(brightness);
}
else{matrix.loadFrame(frame[96]);}
}
else{matrix.clear();SerialPort.println("closed");}
}


实现效果

网页端:
image.png

手机App端:

image.png



未来的计划建议

Arduino 有非常优秀的社区支持,还有非常多的各种传感器开源库等着我们探索。Arduino Cloud 仪表盘能够根据传感器信息实现更加复杂的逻辑。



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