这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » DIY与开源设计 » 开源硬件 » 树莓派5开发方案创意赛--02过程贴:获取传感器数据

共3条 1/1 1 跳转至

树莓派5开发方案创意赛--02过程贴:获取传感器数据

助工
2025-12-27 15:51:13     打赏
SEK-SEN66 介绍SEK-SEN66 是盛思锐推出的多合一空气质量传感器评估套件,它的核心是 SEN66 传感器模组,它能够同时测量9种关键点额环境参数,为室内空气质量提供全方位的监控:
  • 颗粒物(PM):支持 PM1.0, PM2.5, PM4 和 PM10。【此项目仅在电子墨水屏上显示 PM2.5 浓度】

  • 气态污染物:
    • VOC指数(挥发性有机化合物):反映清洁剂、家具等排放的异味;

    • NOx指数(氮氧化物):反映燃气灶、室外尾气等燃烧产生的污染物;

    • CO2(二氧化碳):精准检测通风状况;

  • 环境温湿度:提供高精度的温度和相对湿度数据。

技术规格
  • 工作电压:3.15V~3.45V;

  • 平均电流:约90mA;

  • 通讯接口:I2C;

  • 寿命:超过10年

应用领域由于其高度集成和长寿命,SEN66 适合以下场景:
  • 智能家居:空气净化器、空调、新风系统;

  • 商业建筑:暖通空调控制、智能办公室监控;

  • 物联网设备:室内空气质量检测仪、环境站;

硬件接口按照官方文档,只需要关注1~4号管脚:
  • VDD

  • GND

  • SDA

  • SCL


image.png

image.png


驱动代码

SEN66 官方驱动放在 github  链接为:https://github.com/Sensirion?q=sen66&type=public&language=&sort=


在树莓派5上仅使用 raspberry-pi-i2c-sen66 驱动即可,这个驱动代码是C语言版本。

https://github.com/Sensirion/raspberry-pi-i2c-sen66.git


image.png


拉取仓库 raspberry-pi-i2c-sen66 到树莓派5 上,代码目录结构如下所示:


(.venv) lintex9527@pi:~/workspace/eepw/elem_rpi5_contest/raspberry-pi-i2c-sen66 $ ll
total 204K
drwxrwxr-x 7 lintex9527 lintex9527 4.0K Nov 29 11:59 .
drwxrwxr-x 7 lintex9527 lintex9527 4.0K Dec  8 10:39 ..
drwxrwxr-x 2 lintex9527 lintex9527 4.0K Nov 28 19:43 build
-rw-rw-r-- 1 lintex9527 lintex9527 1.8K Nov 28 18:06 CHANGELOG.md
-rw-rw-r-- 1 lintex9527 lintex9527  346 Nov 28 18:06 .clang-format
drwxrwxr-x 2 lintex9527 lintex9527 4.0K Dec 27 13:44 example-usage
drwxrwxr-x 8 lintex9527 lintex9527 4.0K Dec  2 16:33 .git
drwxrwxr-x 3 lintex9527 lintex9527 4.0K Nov 28 18:06 .github
-rw-rw-r-- 1 lintex9527 lintex9527   95 Nov 29 11:59 .gitignore
drwxrwxr-x 2 lintex9527 lintex9527 4.0K Nov 28 18:06 images
-rw-rw-r-- 1 lintex9527 lintex9527 1.5K Nov 28 18:06 LICENSE
-rw-rw-r-- 1 lintex9527 lintex9527  967 Nov 28 19:43 Makefile
-rw-rw-r-- 1 lintex9527 lintex9527  194 Nov 28 18:06 metadata.yml
-rw-rw-r-- 1 lintex9527 lintex9527 5.2K Nov 28 18:06 README.md
-rw-rw-r-- 1 lintex9527 lintex9527  34K Nov 28 18:06 sen66_i2c.c
-rw-rw-r-- 1 lintex9527 lintex9527  41K Nov 28 18:06 sen66_i2c.h
-rw-rw-r-- 1 lintex9527 lintex9527 4.2K Nov 28 18:06 sensirion_common.c
-rw-rw-r-- 1 lintex9527 lintex9527 6.8K Nov 28 18:06 sensirion_common.h
-rw-rw-r-- 1 lintex9527 lintex9527 2.8K Nov 28 18:06 sensirion_config.h
-rw-rw-r-- 1 lintex9527 lintex9527  11K Nov 28 18:06 sensirion_i2c.c
-rw-rw-r-- 1 lintex9527 lintex9527  15K Nov 28 18:06 sensirion_i2c.h
-rw-rw-r-- 1 lintex9527 lintex9527 4.5K Nov 28 18:06 sensirion_i2c_hal.c
-rw-rw-r-- 1 lintex9527 lintex9527 4.1K Nov 28 18:06 sensirion_i2c_hal.h


代码结构
  • sen66_i2c.c/h 提供用户API,例如sen66_init(), sen66_device_reset(), sen66_read_device_status(), sen66_start_continuous_measurement(), sen66_stop_measurement() ;

  • sensirion_common.c/h 提供内部数据类型转换的API,例如 sensirion_common_bytes_to_uint32(), sensirion_common_bytes_to_float() 等;

  • sensirion_i2c.c/h 提供 I2C 通信命令操作,如发送命令、读取数据等,sensirion_i2c_write_cmd(), sensirion_i2c_delayed_read_cmd() 等API;

  • sensirion_i2c_hal.c/h 实现与 /dev/i2c-1 设备文件操作,实现 I2C 通信接口抽象层,如 sensirion_i2c_hal_init(), sensirion_i2c_hal_write();


编译 example-usage

在 example-usage 目录下新建 Makefile 文件,内容如下:


src_dir = ..
common_sources = ${src_dir}/sensirion_config.h ${src_dir}/sensirion_common.h ${src_dir}/sensirion_common.c
i2c_sources = ${src_dir}/sensirion_i2c_hal.h ${src_dir}/sensirion_i2c.h ${src_dir}/sensirion_i2c.c
driver_sources = ${src_dir}/sen66_i2c.h ${src_dir}/sen66_i2c.c

i2c_implementation ?= ${src_dir}/sensirion_i2c_hal.c

CFLAGS = -Os -Wall -fstrict-aliasing -Wstrict-aliasing=1 -Wsign-conversion -fPIC -I${src_dir} -I.

ifdef CI
    CFLAGS += -Werror
endif

.PHONY: all clean

all: sen66_i2c_example_usage

sen66_i2c_example_usage: clean
        $(CC) $(CFLAGS) -o $@  ${driver_sources} ${i2c_sources} \
                ${i2c_implementation} ${common_sources} sen66_i2c_example_usage.c

clean:
        $(RM) sen66_i2c_example_usage


输入 make 编译生成 sen66_i2c_example_usage

(.venv) lintex9527@pi:~/workspace/eepw/elem_rpi5_contest/raspberry-pi-i2c-sen66/example-usage $ make
rm -f sen66_i2c_example_usage
cc -Os -Wall -fstrict-aliasing -Wstrict-aliasing=1 -Wsign-conversion -fPIC -I.. -I. -o sen66_i2c_example_usage  ../sen66_i2c.h ../sen66_i2c.c ../sensirion_i2c_hal.h ../sensirion_i2c.h ../sensirion_i2c.c \
        ../sensirion_i2c_hal.c ../sensirion_config.h ../sensirion_common.h ../sensirion_common.c sen66_i2c_example_usage.c


打印传感器数据输入 ./sen66_i2c_example_usage 执行程序,每一条打印都包含9个数值:
  • PM1.0

  • PM2.5

  • PM4.0

  • PM10

  • humidity 相对湿度

  • temperature 温度

  • VOC 指数

  • NOX 指数

  • CO2 


(.venv) lintex9527@pi:~/workspace/eepw/elem_rpi5_contest/raspberry-pi-i2c-sen66/example-usage $ ./sen66_i2c_example_usage 
serial_number: 5E69ACB9865E07D6
mass_concentration_pm1p0: 6553.50 mass_concentration_pm2p5: 6553.50 mass_concentration_pm4p0: 6553.50 mass_concentration_pm10p0: 6553.50 humidity: 28.52 temperature: 23.82 voc_index: 0.00 nox_index: 3276.70 co2: 65535
mass_concentration_pm1p0: 6553.50 mass_concentration_pm2p5: 6553.50 mass_concentration_pm4p0: 6553.50 mass_concentration_pm10p0: 6553.50 humidity: 28.52 temperature: 23.82 voc_index: 0.00 nox_index: 3276.70 co2: 65535
mass_concentration_pm1p0: 0.00 mass_concentration_pm2p5: 0.00 mass_concentration_pm4p0: 0.00 mass_concentration_pm10p0: 0.00 humidity: 28.52 temperature: 23.82 voc_index: 0.00 nox_index: 3276.70 co2: 65535
mass_concentration_pm1p0: 0.00 mass_concentration_pm2p5: 0.00 mass_concentration_pm4p0: 0.00 mass_concentration_pm10p0: 0.00 humidity: 28.52 temperature: 23.82 voc_index: 0.00 nox_index: 3276.70 co2: 65535
mass_concentration_pm1p0: 0.80 mass_concentration_pm2p5: 1.00 mass_concentration_pm4p0: 1.10 mass_concentration_pm10p0: 1.10 humidity: 28.52 temperature: 23.82 voc_index: 0.00 nox_index: 3276.70 co2: 545
mass_concentration_pm1p0: 1.10 mass_concentration_pm2p5: 1.30 mass_concentration_pm4p0: 1.40 mass_concentration_pm10p0: 1.50 humidity: 28.52 temperature: 23.82 voc_index: 0.00 nox_index: 3276.70 co2: 545
mass_concentration_pm1p0: 1.20 mass_concentration_pm2p5: 1.40 mass_concentration_pm4p0: 1.60 mass_concentration_pm10p0: 1.60 humidity: 28.52 temperature: 23.82 voc_index: 0.00 nox_index: 3276.70 co2: 545
mass_concentration_pm1p0: 1.20 mass_concentration_pm2p5: 1.40 mass_concentration_pm4p0: 1.60 mass_concentration_pm10p0: 1.60 humidity: 28.52 temperature: 23.82 voc_index: 0.00 nox_index: 0.00 co2: 545
mass_concentration_pm1p0: 1.20 mass_concentration_pm2p5: 1.40 mass_concentration_pm4p0: 1.60 mass_concentration_pm10p0: 1.60 humidity: 28.52 temperature: 23.82 voc_index: 0.00 nox_index: 0.00 co2: 545
mass_concentration_pm1p0: 1.20 mass_concentration_pm2p5: 1.40 mass_concentration_pm4p0: 1.60 mass_concentration_pm10p0: 1.60 humidity: 28.52 temperature: 23.82 voc_index: 0.00 nox_index: 0.00 co2: 551
mass_concentration_pm1p0: 1.40 mass_concentration_pm2p5: 1.60 mass_concentration_pm4p0: 1.70 mass_concentration_pm10p0: 1.80 humidity: 28.52 temperature: 23.82 voc_index: 0.00 nox_index: 0.00 co2: 557
mass_concentration_pm1p0: 1.40 mass_concentration_pm2p5: 1.60 mass_concentration_pm4p0: 1.70 mass_concentration_pm10p0: 1.80 humidity: 28.52 temperature: 23.82 voc_index: 0.00 nox_index: 0.00 co2: 563
mass_concentration_pm1p0: 1.40 mass_concentration_pm2p5: 1.60 mass_concentration_pm4p0: 1.70 mass_concentration_pm10p0: 1.80 humidity: 28.52 temperature: 23.82 voc_index: 0.00 nox_index: 0.00 co2: 569
mass_concentration_pm1p0: 1.40 mass_concentration_pm2p5: 1.60 mass_concentration_pm4p0: 1.70 mass_concentration_pm10p0: 1.80 humidity: 28.52 temperature: 23.82 voc_index: 0.00 nox_index: 0.00 co2: 576
mass_concentration_pm1p0: 1.50 mass_concentration_pm2p5: 1.80 mass_concentration_pm4p0: 1.90 mass_concentration_pm10p0: 2.00 humidity: 28.52 temperature: 23.82 voc_index: 0.00 nox_index: 0.00 co2: 580
mass_concentration_pm1p0: 1.50 mass_concentration_pm2p5: 1.80 mass_concentration_pm4p0: 1.90 mass_concentration_pm10p0: 2.00 humidity: 28.52 temperature: 23.82 voc_index: 0.00 nox_index: 0.00 co2: 584
mass_concentration_pm1p0: 1.50 mass_concentration_pm2p5: 1.80 mass_concentration_pm4p0: 1.90 mass_concentration_pm10p0: 2.00 humidity: 28.53 temperature: 23.82 voc_index: 0.00 nox_index: 0.00 co2: 588
mass_concentration_pm1p0: 1.50 mass_concentration_pm2p5: 1.80 mass_concentration_pm4p0: 1.90 mass_concentration_pm10p0: 2.00 humidity: 28.53 temperature: 23.82 voc_index: 0.00 nox_index: 0.00 co2: 592
mass_concentration_pm1p0: 1.50 mass_concentration_pm2p5: 1.80 mass_concentration_pm4p0: 1.90 mass_concentration_pm10p0: 2.00 humidity: 28.53 temperature: 23.82 voc_index: 0.00 nox_index: 0.00 co2: 596
mass_concentration_pm1p0: 1.70 mass_concentration_pm2p5: 1.90 mass_concentration_pm4p0: 2.10 mass_concentration_pm10p0: 2.10 humidity: 28.53 temperature: 23.82 voc_index: 0.00 nox_index: 0.00 co2: 598


从以上采样值来看:
  • 传感器前几次采样值, NOX 不准确,飙到 3276.70,几次之后恢复到0

  • 办公室环境下相对湿度、温度比较准确,二氧化碳数值598也正常,周末办公室没几个人;如果是工作日 CO2 数值达到1500 左右;

  • PM 数值稳定,接近于0,办公室环境下正常;







关键词: 树莓派5    

院士
2025-12-27 20:08:10     打赏
2楼

这个驱动添加貌似没有遇到任何问题啊!

话说,楼主的办公室真是舒服啊


专家
2025-12-28 08:49:09     打赏
3楼

谢谢分享


共3条 1/1 1 跳转至

回复

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