这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 活动中心 » 板卡试用 » GIGA_R1_WiFi开发【室内环境WiFi监控站】

共1条 1/1 1 跳转至

GIGA_R1_WiFi开发【室内环境WiFi监控站】

助工
2026-02-20 17:39:41   被打赏 50 分(兑奖)     打赏

【摘要】介绍本次开发项目的主要功能及实现方法:GIGA R1 WIFI开发板通过采集模块获取室内环境数据,并通过PC端或移动端的网页UI界面对室内环境数据进行监测、控制等;


一、硬件介绍

1、产品特点

Arduino GIGA R1 WiFi 开发板,提供76个GPIO引脚(其中12个为模拟端口、12个PWM、4个串行端口、3个I2C、2个SPI、1个FDCAN、1个SAI);

采用双核STM32H747XI微控制器(480MHz的Cortex-M7内核和240 MHz的Cortex-M4内核);


配备2MB闪存、1MB内存,以及6MB外部闪存和8MB SDRAM;

通过板载Murata 1DX模块实现WiFi和低功耗蓝牙连接;

还有输入/输出3.5mm音频插孔、JTAG连接器、20Pin的Arducam相机连接器等;


image-20260125205601548

image-20260125205601548.png


主要特性


  • 微控制器:STMicro STM32H747XI Cortex-M7@480 MHz + M4 @ 240 MHz MCU(2MB 双组闪存、1MB RAM)

  • 内存:8MB SDRAM

  • 存储:16MB QSPI NOR 闪存

  • 无线功能:2.4GHz WiFi 802.11b/g/n和蓝牙 5.1 BR/EDR/LE(Murata 1DX 模块)


接口

  • 显示屏:20pin接口

  • 摄像头:20pin Arducam摄像头接口

  • USB1x USB Type-C 端口用于编程和 HID1x USB 2.0 主机 Type-A 端口

  • 音频:3.5 毫米音频插孔

  • 调试:JTAG 连接器

  • 电源:通过VIN引脚提供6 ~ 24V输入

  • VRT(为RTC供电)和 OFF(关闭电路板电源)引脚


  • 复位按钮、BOOT0按钮、RGB_LED、电源LED

  • 安全功能:Microchip ATECC608A

  • 每个 I/O 引脚 8mA


二、功能实现

1、硬件介绍

GIGA R1 WiFi 上的无线功能(2.4GHz Wi-Fi / 蓝牙)模块是 LBEE5KL1DX-883,芯片为Infineon(CYW4343W),该模块需使用外部天线;


image-20260207193916101.png

主要原理图

image-20260207194053517.png

2、多功能环境采集模块

采集模块为Arduino Nicla Sense ME,主控为nRF52832 (64 MHz) ,配备了Bosch Sensortec的具有高线性、高精度,可探测气压、湿度、和温度的 BME688 四合一气体传感器,可检测挥发性有机化合物 (VOC) 等;



image-20260116162509381.png

image-20260116162509381

特性

image.png


引脚图

image-20260210211955019.png

系统框图

image-20260116162546086.png


3、功能效果


功能效果:开发板与采集模块通过串口连接,开发板通过WIFI连接局域网内的IP地址,并通过网页UI界面来无线监测 / 控制当前室内的相关环境数据;



主要功能如下:

室内环境信息采:通过采集模块获取室内环境信息(温湿度、气压、CO2、IAQ、VOC等),然后将数据通过串口传输至开发板上;

数据监测 / 控制:将获取到的相关数据处理后,并通过板载的WIFI功能,在网页UI界面上对相关数据进行监测 / 控制等;



主要分为以下三大部分:数据采集、UI界面显示、数据交互


3.1、数据采集


GIGA R1 WIFI开发板,通过串口功能接收采集模块传输采集到的室内环境信息(温湿度、气压、CO2、IAQ、VOC);


采集模块将每秒采集到的数据,通过串口TX传输到连接的开发板串口RX上

接收到的数据格式如下:Temp:22.26, Hum:68, Press:101275等,用于后续UI界面数据等显示;


image-20260217231637223.png



3.2、UI界面显示


整体UI界面效果图如下:

可使用移动端 / PC端进行访问及控制;



移动端UI界面:



phone_new.jpg
































































































































































































































































































































PC端UI界面:


image.png


image-20260215231233967.png


3.3、数据交互


以下主要介绍环境数据监控、历史环境数据变化趋势图等功能;

3.3.1、环境数据监控

主要分为两大功能:监测、控制


监测:显示当前实时的环境数据;


以温度为例

左侧依次为当前监测项的名称【温度】、数值【23.0°C】、数值百分比UI进度条【0~100%】;

(其中下方的IAQ、CO2、TVOV的数值下方还会显示当前监测值的状态【优秀】)

右侧为当前监测项对应的UI图标;


控制:对监测项数据进行监测控制;

(温度、湿度、大气压力均可自定义设置不同的监测阈值,当数值超过设定的阈值时,将会显示警报状态,直至小于设定阈值)



image-20260215211145484.png


数据监测控制:点击温度、湿度、气压卡片即可设置监测阈值;

(温度、湿度、大气压力均可自定义设置不同的监测阈值,当数值超过设定的阈值时,将会显示警报状态,直至小于设定阈值)



image-20260215215006510.png

image-20260215215339613.png

数据状态显示:空气质量指数(IAQ)、二氧化碳含量、挥发性有机物(VOC)会根据不同的标准范围值,显示不同的UI效果状态【良好 / 一般 / 较差】等;



image-20260215214337785.png

范围值标准主要如下

image.png


3.3.2、环境数据变化趋势图

image.png


整体数据曲线变化显示

image-20260215215502575.png


指定数据(温度)曲线变化显示

image-20260215220733993.png


3.4、实物效果

引脚连接

image.png

实物搭建效果图

image-20260210223624463.png


主要运行流程图

image-20260219205753063.png


三、代码编写

1、采集模块

采集模块通过UART功能(TX),每秒发送采集到的相关数据到连接的GIGA R1 WIFI设备上  


采集到的数据  示例:

image-20260210215621199.png


主要相关代码

#include "Nicla_System.h"
#include "Arduino_BHY2.h"


// 传感器对象初始化
Sensor temperature(SENSOR_ID_TEMP);
Sensor humidity(SENSOR_ID_HUM);
Sensor pressure(SENSOR_ID_BARO);
Sensor gas(SENSOR_ID_GAS);
SensorBSEC bsec(SENSOR_ID_BSEC);


unsigned long lastPrintTime = 0;
const unsigned long printInterval = 1000; // 1000ms

void setup() {
  Serial.begin(115200);
  Serial1.begin(115200);
  while (!Serial1); 

  nicla::begin();

  if (!BHY2.begin()) {
    Serial.println("初始化失败");
    while (1);
  }

  // 启动传感器
  temperature.begin();
  humidity.begin();
  pressure.begin();
  bsec.begin();
}

void loop() {
  BHY2.update();
  // 每秒输出数据
  if (millis() - lastPrintTime >= printInterval) {
    lastPrintTime = millis();
    Serial1.print("Temp: "); Serial1.println(temperature.value());   // ℃
    Serial1.print("Hum: "); Serial1.println((int)humidity.value());  // %
    Serial1.print("Press: "); Serial1.println((int)pressure.value());  // pa
    Serial1.print("IAQ: "); Serial1.println(bsec.iaq()); 
    Serial1.print("CO2: "); Serial1.println(bsec.co2_eq());   // ppm
    Serial1.print("VOC: "); Serial1.println(bsec.b_voc_eq()); //mg/m3
  }
}


2、GIGA R1 WIFI部分

串口打印当前的IP地址

image-20260216122814528.png

主要相关代码

#define MY_SSID "WIFI名称"
#define MY_PASS "WIFI密码"

#include "web_ui.h"		// 网页UI界面

const char* ssid = MY_SSID;
const char* pass = MY_PASS;

WiFiServer server(80);

// 传感器数值
float Temp = 0.0f, Press = 0.0f, VOC = 0.0f;
int Hum = 0, IAQ = 0, CO2 = 0;

float Temp_last = 0.0f, Press_last = 0.0f, VOC_last = 0.0f;
int Hum_last = 0, IAQ_last = 0, CO2_last = 0;


// 传感器数据获取
void getData() {
  while (Serial1.available()) {
    String input = Serial1.readStringUntil('\n');
    input.trim();
    if (input.length() == 0) continue;

    if (input.startsWith("Temp:")) {
      float value = input.substring(5).toFloat();
      if (value != 0) { Temp = value; Temp_last = value; }
    } else if (input.startsWith("Hum:")) {
      int value = input.substring(4).toInt();
      if (value != 0) { Hum = value; Hum_last = value; }
    } else if (input.startsWith("Press:")) {
      float pa = input.substring(6).toFloat();
      float kpa = pa / 1000.0f;
      if (pa != 0) { Press = kpa; Press_last = kpa; }
    } else if (input.startsWith("IAQ:")) {
      int value = input.substring(4).toInt();
      if (value != 0) { IAQ = value; IAQ_last = value; }
    } else if (input.startsWith("CO2:")) {
      int value = input.substring(4).toInt();
      if (value != 0) { CO2 = value; CO2_last = value; }
    } else if (input.startsWith("VOC:")) {
      float value = input.substring(4).toFloat();
      if (value != 0) { VOC = value; VOC_last = value; }
    }
  }

  if (Temp == 0) Temp = Temp_last;
  if (Hum == 0) Hum = Hum_last;
  if (Press == 0) Press = Press_last;
  if (IAQ == 0) IAQ = IAQ_last;
  if (CO2 == 0) CO2 = CO2_last;
  if (VOC == 0) VOC = VOC_last;
}


static void reqHeaders(WiFiClient& client) {
  while (client.connected()) {
    String line = client.readStringUntil('\n');
    if (line == "\r" || line.length() == 0) break;
  }
}

void sendHeader200(WiFiClient& client, const char* contentType) {
  client.println("HTTP/1.1 200 OK");
  client.println("Connection: close");
  client.println("Cache-Control: no-store");
  client.println("Access-Control-Allow-Origin: *");
  client.print("Content-Type: ");
  client.println(contentType);
  client.println();
}

void setup() {
  Serial.begin(115200);
  Serial1.begin(115200);  // 接收数据

  // 连接 WIFI
  WiFi.begin(ssid, pass);
  while (WiFi.status() != WL_CONNECTED) {
    delay(3000);
    Serial.print(".");
  }
  Serial.println();
  
  // 打印当前IP地址
  server.begin();
  Serial.print("IP: ");
  Serial.println(WiFi.localIP());
}


void loop() {
  getData();

  // 服务器连接
  WiFiClient client = server.available();
  if (!client) return;

  // HTTP请求
  String reqLine = client.readStringUntil('\n');
  reqLine.trim();
  reqHeaders(client);
  String path = "/";
  if (reqLine.startsWith("GET ")) {
    int sp1 = reqLine.indexOf(' ');
    int sp2 = reqLine.indexOf(' ', sp1 + 1);
    if (sp1 >= 0 && sp2 > sp1) path = reqLine.substring(sp1 + 1, sp2);
  }


  // 发送页面内容 / json数据
  if (path == "/") {
    sendIndex(client); 
  } else if (path == "/data") {    //json数据路径
    String json = "{";
    json += "\"temperature\":" + String(Temp, 1) + ",";
    json += "\"humidity\":" + String(Hum) + ",";
    json += "\"pressure\":" + String(Press, 2) + ",";
    json += "\"iaq\":" + String(IAQ) + ",";
    json += "\"co2\":" + String(CO2) + ",";
    json += "\"voc\":" + String(VOC, 2);
    json += "}";
    sendHeader200(client, "application/json; charset=utf-8");
    client.print(json);
  }

  delay(1);
  client.stop();    // 释放
}


网页UI界面: web_ui.h 相关代码

image-20260216185508418.png


四、程序烧录

1、连接USB数据线至开发板;

2、选择端口号对应的开发板;

3、点击 上传 烧录程序到开发板上;

image-20260127231208397.png


五、效果演示

通过采集模块获取室内环境数据(温湿度、气压、CO2、IAQ、VOC),并在网页UI界面上对相关数据进行监测 / 控制等;

完整效果演示

GIga.gif


六、总结

在本次开发中,采集模块与GIGA R1 WIFI开发板采用UART方式进行通信,并通过PC端或移动端的网页UI界面进行监测、控制等;

不过GIGA R1 WIFI具有双核STM32H747XI微控制器,以及无线模块支持蓝牙功能,后续或许可以通过M4核的蓝牙功能进行数据传输,然后再通过M7核进行数据界面UI显示等;

这样就可以将采集模块置于任何地方(单独供电 / 相互独立),只要在蓝牙范围内就可以采集指定地方的环境数据了,然后再通过手机端进行远程的数据查看 / 控制等;





关键词: GIGA R1 WiFi    

共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]