当前位置: 首页 > news >正文

物联网AI MicroPython传感器学习 之 CCS811空气质量检测传感器

学物联网,来万物简单IoT物联网!!在这里插入图片描述

一、产品简介

通过CCS811传感器模块可以测量环境中TVOC(总挥发性有机物质)浓度和eCO2(二氧化碳)浓度,作为衡量空气质量(IAQ)的指标。
image.png
引脚定义

  • VCC:3.3V
  • GND:接地
  • SCL:I2C时钟
  • SDA:I2C数字
  • WAK:接地
  • INT:NC(阈值中断引脚)
  • RST:NC(复位引脚)
  • ADD:NC

二、技术参数

  • 供电电压:3.3V
  • 接口:I2C接口
  • 分辨率:14位
  • 工作电流:20mA
  • 睡眠模式的电流:3uA
  • 模块尺寸:15mm * 21mm

三、软件接口

CCS811(i2cObj) - 创建CCS811驱动对象

  • 函数原型:

ccs811Obj = CCS811(i2cObj)

  • 参数说明:
参数类型必选参数?说明
i2cObjI2C传入i2c对象
  • 返回值:
    CCS811对象创建成功,返回CCS811对象;CCS811对象创建失败,抛出Exception
  • 示例代码:
from machine import I2C,Pin          # 驱动库
import ccs811                        # CCS811空气质量传感器驱动库# 初始化I2C类型的设备
i2cObj = I2C(1, scl=Pin(22), sda=Pin(21), freq=400000)
print("ccs811 inited!")
ccs811Obj = ccs811.CCS811(i2cObj)
  • 输出:
ccs811 inited!

geteCO2 - 获取空气中二氧化碳浓度

  • 函数功能:
    获取空气中二氧化碳浓度
  • 函数原型:

CCS811.geteCO2()

  • 参数说明:

  • 返回值:
    | 返回值 | 类型 | 说明 |
    | — | — | — |
    | status | 整型 | 0-无效数值;
    1-有效数值 |
    | eco2 | 整型 | 单位:ppm,>=400 |

  • 示例:

from machine import I2C,Pin          # 驱动库
import ccs811                        # CCS811空气质量传感器驱动库
import utime# 初始化I2C类型的设备
i2cObj = I2C(1, scl=Pin(22), sda=Pin(21), freq=400000)
print("ccs811 inited!")
ccs811Obj = ccs811.CCS811(i2cObj)
while True:status,eco2 = ccs811Obj.geteCO2()if status == 1:print('eCO2: %d ppm' %(eco2))utime.sleep(1)
  • 输出:
ccs811 inited!
eCO2: 400 ppm
eCO2: 868 ppm
eCO2: 400 ppm
eCO2: 400 ppm

getTVOC - 获取空气中挥发有机物的浓度

  • 函数功能:
    获取空气中挥发有机物的浓度
  • 函数原型:

CCS811.getTVOC()

  • 参数说明:
  • 返回值:
返回值类型说明
status整型0 - 无效数值
1 - 有效数值
tvoc整型单位:ppb
  • 示例:
from machine import I2C,Pin          # 驱动库
import ccs811                        # CCS811空气质量传感器驱动库
import utime# 初始化I2C类型的设备
i2cObj = I2C(1, scl=Pin(22), sda=Pin(21), freq=400000)
print("ccs811 inited!")
ccs811Obj = ccs811.CCS811(i2cObj)
while True:status,tvoc = ccs811Obj.getTVOC()if status == 1:print('TVOC: %d ppb' %(tvoc))utime.sleep(1)
  • 输出:
ccs811 inited!
TVOC: 0 ppb
TVOC: 0 ppb
TVOC: 0 ppb
TVOC: 3 ppb
TVOC: 734 ppb
TVOC: 68 ppb
TVOC: 129 ppb
TVOC: 62 ppb
TVOC: 25 ppb

geteCO2TVOC - 获取空气中二氧化碳以及挥发有机物的浓度

  • 函数功能:
    获取空气中二氧化碳以及挥发有机物的浓度
  • 函数原型:

CCS811.geteCO2TVOC()

  • 参数说明:
  • 返回值:
返回值类型说明
status整型0-无效数值
1-有效数值
eco2整型单位:ppm , >=400
tvoc整型单位:ppb
  • 示例:
from machine import I2C,Pin          # 驱动库
import ccs811                        # CCS811空气质量传感器驱动库
import utime# 初始化I2C类型的设备
i2cObj = I2C(1, scl=Pin(22), sda=Pin(21), freq=400000)
print("ccs811 inited!")
ccs811Obj = ccs811.CCS811(i2cObj)
while True:status,eco2,tvoc = ccs811Obj.geteCO2TVOC()if status == 1:print('eCO2: %d ppm, TVOC: %d ppb' % (eco2, tvoc))utime.sleep(1)
  • 输出:
ccs811 inited!
eCO2: 400 ppm, TVOC: 0 ppb
eCO2: 400 ppm, TVOC: 0 ppb
eCO2: 400 ppm, TVOC: 0 ppb
eCO2: 400 ppm, TVOC: 0 ppb
eCO2: 400 ppm, TVOC: 0 ppb
eCO2: 400 ppm, TVOC: 0 ppb
eCO2: 1495 ppm, TVOC: 168 ppb
eCO2: 481 ppm, TVOC: 12 ppb
eCO2: 400 ppm, TVOC: 0 ppb
eCO2: 400 ppm, TVOC: 0 ppb
eCO2: 400 ppm, TVOC: 0 ppb
eCO2: 400 ppm, TVOC: 0 ppb

四、接口案例

# Python代码
from machine import I2C,Pin          # 驱动库
import ccs811                        # CCS811空气质量传感器驱动库
import utime# 初始化I2C类型的设备
i2cObj = I2C(1, scl=Pin(22), sda=Pin(21), freq=400000)
print("ccs811 inited!")
ccs811Obj = ccs811.CCS811(i2cObj)
while True:status,eco2,tvoc = ccs811Obj.geteCO2TVOC()if status == 1:print('eCO2: %d ppm, TVOC: %d ppb' % (eco2, tvoc))utime.sleep(1)
  • 输出:
ccs811 inited!
eCO2: 400 ppm, TVOC: 0 ppb
eCO2: 400 ppm, TVOC: 0 ppb
eCO2: 400 ppm, TVOC: 0 ppb
eCO2: 400 ppm, TVOC: 0 ppb
eCO2: 400 ppm, TVOC: 0 ppb
eCO2: 400 ppm, TVOC: 0 ppb
eCO2: 1495 ppm, TVOC: 168 ppb
eCO2: 481 ppm, TVOC: 12 ppb
eCO2: 400 ppm, TVOC: 0 ppb
eCO2: 400 ppm, TVOC: 0 ppb
eCO2: 400 ppm, TVOC: 0 ppb
eCO2: 400 ppm, TVOC: 0 ppb

五、工作原理

INA219传感器寄存器描述如下表所示:

序号寄存器地址功能说明默认值
10x00状态寄存器
20x01测量模式寄存器
30x02测量结果寄存器
40x20硬件ID寄存器0x81
50x21硬件版本寄存器0x1X
60xF4APP启动寄存器
70xFF软件重启寄存器

从下图可以看到CCS811内置I2C通信单元,与MCU进行数据交互。其中nINT和nRESET是可选的,根据实际项目需要而定,nWAKE低电平状态为激活CCS811。
image.png
引脚分布如下:

序号引脚名功能说明
1I2C_ADDR低电平 - I2C地址总线0x5A
高电平 - I2C地址总线0x5B
2nRESET复位引脚,低电平有效
3nINT阈值中断引脚
4PWM
5Sense
6VDD电源正
7nWAKE唤醒引脚,低电平有效
8AUX
9I2C_SDAI2C数据线
10I2C_SCKI2C时钟线

参考文献及购买链接

[1] CCS811传感器DATASHEET
[2] CCS811传感器模块购买

相关文章:

物联网AI MicroPython传感器学习 之 CCS811空气质量检测传感器

学物联网,来万物简单IoT物联网!! 一、产品简介 通过CCS811传感器模块可以测量环境中TVOC(总挥发性有机物质)浓度和eCO2(二氧化碳)浓度,作为衡量空气质量(IAQ)的指标。 引脚定义 VCC:3.3VGND&…...

TCP/IP(十五)拥塞控制

一 拥塞控制 ① 拥塞控制必要性 思考: 为什么要有拥塞控制呀,不是有流量控制了吗? ② 拥赛窗口 cwnd 什么是拥塞窗口? 和发送窗口有什么关系呢?明白: cwnd、swnd、rwnd 缩写 含义 ③ 如何知道当前网络是否出现了拥塞呢?…...

vue3 404解决方法

在 Vue 3 应用中解决 404 错误通常涉及到 Vue Router,因为 404 错误通常与路由无法匹配到的路径有关. 1. **检查路由配置**:首先确保你的路由配置正确。确保每个路由路径都与你的组件正确匹配,并且在需要时添加必要的路由守卫。 2. **通配符…...

Unity中使用Xlua调用lua相关

//引用命名空间 using XLua; public class L1 : MonoBehaviour {// Start is called before the first frame updatevoid Start(){//Lua解析器 让我们在Unity中使用luaLuaEnv env new LuaEnv();//执行env.DoString("print(OK)");//执行一个Lua脚本 在resource文件夹…...

基于http的protobuf服务实现

本文介绍在http协议中&#xff0c;使用protobuf格式进行二进制数据通信。双方需设置http的header中ContentType为application/x-protobuf。 1、springboot下实现protobuf&#xff1a; 1&#xff09;pom.xml <dependency><groupId>org.springframework.boot</g…...

基于uniapp的商城外卖小程序

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容&#xff1a;毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 项目介绍…...

【CSS】Tailwind CSS

直接参考 Tailwind CSS 安装提供了四种方式。因为我常用构建工具搭建项目&#xff0c;所以选择 Using PostCSS 。 其中 tailwind.config.js 的配置可以改为&#xff1a; module.exports {content: [./index.html, ./src/**/*.{vue,js,ts,jsx,tsx}],theme: {extend: {},},pl…...

leetcode-电话号码组合(C CODE)

1. 题目 给定一个仅包含数字 2-9 的字符串&#xff0c;返回所有它能表示的字母组合。答案可以按 任意顺序 返回。 给出数字到字母的映射如下&#xff08;与电话按键相同&#xff09;。注意 1 不对应任何字母。 示例 1&#xff1a; 输入&#xff1a;digits “23” 输出&#…...

Leetcode92. 反转链表 II

Every day a Leetcode 题目来源&#xff1a;92. 反转链表 II 解法1&#xff1a;模拟 注意 STL 的 reverse() 是左闭右开的。 代码&#xff1a; class Solution { public:ListNode *reverseBetween(ListNode *head, int left, int right){vector<int> nums getNums(…...

【算法作业记录】

插入排序 递归实现 直接插入 #将a[n]插入有序区间a[0,n-1]中 时间复杂度 O&#xff08;n&#xff09; def Insert(a,n):inwhile(i>0 and a[i-1]>a[i]):tmpa[i]a[i]a[i-1]a[i-1]tmpi-1return #直接插入排序 def Insertsort(a,n):for i in range(1,n):#【1&#xff0c;n-…...

回归预测、分类预测、时间序列预测 都有什么区别?

回归预测、分类预测和时间序列预测都是统计和机器学习领域中的预测任务&#xff0c;它们在问题设置和解决的方式上有一些关键区别&#xff1a; 回归预测&#xff1a; 回归预测用于预测连续数值的输出&#xff0c;通常是实数。例如&#xff0c;预测房价、气温、销售额等连续型输…...

关于网络协议的若干问题(三)

1、当发送的报文出问题的时候&#xff0c;会发送一个 ICMP 的差错报文来报告错误&#xff0c;但是如果 ICMP 的差错报文也出问题了呢&#xff1f; 答&#xff1a;不会导致产生 ICMP 差错报文的有&#xff1a; ICMP 差错报文&#xff08;ICMP 查询报文可能会产生 ICMP 差错报文…...

办公室人人在用的iTab桌面真的好用吗?

本人坐标北京&#xff0c;在一家中型互联网公司当社畜多年。最近发现一个奇怪的现象&#xff0c;我工位前后左右的同事都跟我在用一样的浏览器桌面——iTab新标签页。我表示莫非真的英雄所见略同&#xff1f; 我是去年1月份在刷B站时偶然刷到一条评论&#xff0c;有人分享自己…...

循环中的else语句

while 循环else结构: 循环可以和else配合使用&#xff0c;else下方缩进的代码指的是当循环正常结束之后要执行的代码. 需求&#xff1a;女朋友生气了&#xff0c;要惩罚&#xff1a;连续说5遍“老婆大人&#xff0c;我错了”&#xff0c;如果道歉正常完毕后女朋友就原谅我了:…...

三.镜头知识之FOV

三.镜头知识之视场角 最近试了很多sensor, 每次在选镜头时都对其提到的FOV参数一头雾水。不同的sensor要配不同的镜头&#xff0c;而不同的镜头由于焦距的不同&#xff0c;FOV也不一样。这其中有什么联系呢&#xff1f;FOV又分为HFOV(水平&#xff09;, VFOV( 垂直&#xff09…...

分布式事务入门

文章目录 分布式事务问题本地事务分布式事务演示分布式事务问题 理论基础CAP定理一致性可用性分区容错矛盾 BASE理论 SeataSeata的架构部署TC服务微服务集成seata 动手实践XA模式两阶段提交Seata的XA模型实现XA模式 AT模式Seata的AT模型流程梳理脏写问题实现AT模式 TCC模式流程…...

Ubuntu的中文乱码问题

一、Ubuntu的中文乱码问题 sudo apt-get install language-pack-zh-hans 二、修改/etc/environment&#xff08;在文件的末尾追加&#xff09;&#xff1a; LANG"zh_CN.UTF-8" LANGUAGE"zh_CN:zh:en_US:en" 三、修改/var/lib/locales/supported.d/loca…...

[GXYCTF2019]Ping Ping Ping - RCE(空格、关键字绕过[3种方式])

[GXYCTF2019]Ping Ping Ping 1 解题流程1.1 小试牛刀1.2 三种解法1.2.1 解法一:变量定义拼接绕过1.2.2 解法二:base64编码绕过1.2.3 解法三:内联执行绕过2 思考总结1 解题流程 1.1 小试牛刀 1、提示?ip,结合题目名称,我们直接输入?ip=127.0.0.1 PING 127.0.0.1 (127.…...

ceph 分布式存储与部署

目录 一、存储基础&#xff1a; 1.单机存储设备&#xff1a; 2. 单机存储的问题&#xff1a; 3. 商业存储解决方案&#xff1a; 4. 分布式存储&#xff1a; 5. 分布式存储的类型&#xff1a; 二、Ceph 简介&#xff1a; 三、Ceph 优势&#xff1a; 四、Ceph 架构&#xff1a…...

Go 结构体深度探索:从基础到应用

1. 结构体概述 在计算机编程中&#xff0c;数据结构是组织、管理和存储数据的一种方式&#xff0c;它允许高效地执行各种操作。Go语言中的结构体&#xff08;Struct&#xff09;是这些数据结构中的一员&#xff0c;它为数据的组织提供了一种具体的方式。 结构体可以被视为是多…...

7.4.分块查找

一.分块查找的算法思想&#xff1a; 1.实例&#xff1a; 以上述图片的顺序表为例&#xff0c; 该顺序表的数据元素从整体来看是乱序的&#xff0c;但如果把这些数据元素分成一块一块的小区间&#xff0c; 第一个区间[0,1]索引上的数据元素都是小于等于10的&#xff0c; 第二…...

Opencv中的addweighted函数

一.addweighted函数作用 addweighted&#xff08;&#xff09;是OpenCV库中用于图像处理的函数&#xff0c;主要功能是将两个输入图像&#xff08;尺寸和类型相同&#xff09;按照指定的权重进行加权叠加&#xff08;图像融合&#xff09;&#xff0c;并添加一个标量值&#x…...

Java多线程实现之Callable接口深度解析

Java多线程实现之Callable接口深度解析 一、Callable接口概述1.1 接口定义1.2 与Runnable接口的对比1.3 Future接口与FutureTask类 二、Callable接口的基本使用方法2.1 传统方式实现Callable接口2.2 使用Lambda表达式简化Callable实现2.3 使用FutureTask类执行Callable任务 三、…...

视频行为标注工具BehaviLabel(源码+使用介绍+Windows.Exe版本)

前言&#xff1a; 最近在做行为检测相关的模型&#xff0c;用的是时空图卷积网络&#xff08;STGCN&#xff09;&#xff0c;但原有kinetic-400数据集数据质量较低&#xff0c;需要进行细粒度的标注&#xff0c;同时粗略搜了下已有开源工具基本都集中于图像分割这块&#xff0c…...

基于TurtleBot3在Gazebo地图实现机器人远程控制

1. TurtleBot3环境配置 # 下载TurtleBot3核心包 mkdir -p ~/catkin_ws/src cd ~/catkin_ws/src git clone -b noetic-devel https://github.com/ROBOTIS-GIT/turtlebot3.git git clone -b noetic https://github.com/ROBOTIS-GIT/turtlebot3_msgs.git git clone -b noetic-dev…...

【JVM面试篇】高频八股汇总——类加载和类加载器

目录 1. 讲一下类加载过程&#xff1f; 2. Java创建对象的过程&#xff1f; 3. 对象的生命周期&#xff1f; 4. 类加载器有哪些&#xff1f; 5. 双亲委派模型的作用&#xff08;好处&#xff09;&#xff1f; 6. 讲一下类的加载和双亲委派原则&#xff1f; 7. 双亲委派模…...

Ubuntu Cursor升级成v1.0

0. 当前版本低 使用当前 Cursor v0.50时 GitHub Copilot Chat 打不开&#xff0c;快捷键也不好用&#xff0c;当看到 Cursor 升级后&#xff0c;还是蛮高兴的 1. 下载 Cursor 下载地址&#xff1a;https://www.cursor.com/cn/downloads 点击下载 Linux (x64) &#xff0c;…...

Python 训练营打卡 Day 47

注意力热力图可视化 在day 46代码的基础上&#xff0c;对比不同卷积层热力图可视化的结果 import torch import torch.nn as nn import torch.optim as optim from torchvision import datasets, transforms from torch.utils.data import DataLoader import matplotlib.pypl…...

沙箱虚拟化技术虚拟机容器之间的关系详解

问题 沙箱、虚拟化、容器三者分开一一介绍的话我知道他们各自都是什么东西&#xff0c;但是如果把三者放在一起&#xff0c;它们之间到底什么关系&#xff1f;又有什么联系呢&#xff1f;我不是很明白&#xff01;&#xff01;&#xff01; 就比如说&#xff1a; 沙箱&#…...

一些实用的chrome扩展0x01

简介 浏览器扩展程序有助于自动化任务、查找隐藏的漏洞、隐藏自身痕迹。以下列出了一些必备扩展程序&#xff0c;无论是测试应用程序、搜寻漏洞还是收集情报&#xff0c;它们都能提升工作流程。 FoxyProxy 代理管理工具&#xff0c;此扩展简化了使用代理&#xff08;如 Burp…...