【欧时RS x Arduino】5、Arduino UNO Q 读取STCC4数据
Arduino UNO Q板载的MCU和MPU通过RPC协议传输数据,MCU侧读取传感器数据通过RPC协议将传感器数据传输到MPU侧,Arduino UNO Q的Arduino接口的I2C接口上连接STCC4 CO2传感。!(//m.qjumbo.com/forum/data/attachment/forum/202611/01/202152n2amfmmmsafccbar.png)
官方提供很多示例应用用于参考,在示例代码的基础上进行修改,添加自定义的代码实现STCC4 CO2传感器数据的读取,首先复制一个示例工程到用户目录。
!(//m.qjumbo.com/forum/data/attachment/forum/202611/01/202200bnghp6ipk6pchfgz.png)
设定应用的名称
!(//m.qjumbo.com/forum/data/attachment/forum/202611/01/202206u1a1oxauc1x1qccc.png)
工程的目录结构以及使用的文件和功能如下
!(//m.qjumbo.com/forum/data/attachment/forum/202611/01/202213j9dhw51oy3y53wey.png)
# MCU通过I2C接口读取
MCU中运行的是Arduino应用代码,`sketch.yaml`为程序的依赖库,命令行中切换到应用文件夹,使用Vim编辑`sketch.yaml`的内容
```
cd ArduinoApps/eefocus2026_stcc4
vim sketch/sketch.yaml
```
其中指定程序依赖的平台、驱动库和相应的版本,用于驱动STCC4传感器的数据读取
```
profiles:
default:
platforms:
- platform: arduino:zephyr
libraries:
- Sensirion I2C STCC4 (1.0.0)
- Sensirion Core (0.7.2)
default_profile: default
```
sketch.ino中读取传感器数据,并调用`Bridge.notify`将数据传输到MPU侧,代码如下
```
#include <Arduino.h>
#include <SensirionI2cStcc4.h>
#include <Wire.h>
#include <Arduino_RouterBridge.h>
static int16_t error;
SensirionI2cStcc4 sensor;
void setup() {
Bridge.begin();
Wire.begin();
sensor.begin(Wire, STCC4_I2C_ADDR_64);
uint32_t productId = 0;
uint64_t serialNumber = 0;
error = sensor.stopContinuousMeasurement();
error = sensor.getProductId(productId, serialNumber);
error = sensor.startContinuousMeasurement();
}
void loop() {
int16_t co2Concentration = 0;
float temperature = 0.0;
float relativeHumidity = 0.0;
uint16_t sensorStatus = 0;
delay(1000);
error = sensor.readMeasurement(co2Concentration, temperature,
relativeHumidity, sensorStatus);
Bridge.notify("record_sensor_samples", co2Concentration, temperature,
relativeHumidity,sensorStatus);
}
```
# MPU侧数据读取
MPU侧的应用依赖项由`app.yaml`设置,工程默认支持的apputil模块支持Python数据打印,不需要额外的依赖项,使用默认的Python默认功能即可。
```
name: EEFocus2026_STCC4
description: Read STCC4 data send to MPU using Bridge,print to conosle
icon: 🎛️
```
`main.py`实现RPC库Bridge模块的回调函数注册,并在回调函数打印接口的STCC4传感器数据,代码如下
```python
import numpy as np
from arduino.app_utils import App, Bridge
def record_sensor_samples(co2Concentration: np.int16, temperature: float,relativeHumidity: float,sensorStatus: np.uint16):
print(f"co2Concentration: {co2Concentration} (int16)")
print(f"temperature: {temperature}")
print(f"relativeHumidity: {relativeHumidity}")
print(f"sensorStatus: {sensorStatus} (uint16)")
print("Registering 'record_sensor_samples' callback.")
Bridge.provide("record_sensor_samples", record_sensor_samples)
print("Starting App...")
App.run()
```
运行应用程序,在App Lab的Python对话框中,能看到采集的STCC4传感器数据
!(//m.qjumbo.com/forum/data/attachment/forum/202611/01/202402yz8yqj0tmmbzytt0.png)
页:
[1]