物联网AI MicroPython传感器学习 之 CCS811空气质量检测传感器_ccs811气体传感器原理图-程序员宅基地

技术标签: 学习  python  人工智能  物联网传感器  物联网  嵌入式硬件  单片机  

学物联网,来万物简单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)

  • 参数说明:
参数 类型 必选参数? 说明
i2cObj I2C 传入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传感器寄存器描述如下表所示:

序号 寄存器地址 功能说明 默认值
1 0x00 状态寄存器
2 0x01 测量模式寄存器
3 0x02 测量结果寄存器
4 0x20 硬件ID寄存器 0x81
5 0x21 硬件版本寄存器 0x1X
6 0xF4 APP启动寄存器
7 0xFF 软件重启寄存器

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

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

参考文献及购买链接

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

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_39363464/article/details/133796686

智能推荐

前端设置条件限制form表单提交到后端解决方案_jsp前端页面将表单是否提交成功作为限制条件-程序员宅基地

文章浏览阅读375次。<script src="js/jquery-1.8.3.min.js" type="text/javascript"></script> <script type="text/javascript"> function checkName() { var name = document.getElementB..._jsp前端页面将表单是否提交成功作为限制条件

计算机网络sequence number,TCP协议中SequenceNumber和Ack Numbe-程序员宅基地

文章浏览阅读1k次。Sequence Numberlzyws7393074532892018-04-25Number Sequenceqq_391789932452017-09-21理解TCP序列号(Sequence Number)和确认号(Acknowledgment Number)hebbely9822017-01-14Number Sequence(规律)l25336363712902017-07-18Numb..._ack num

计算机系统启动项设置密码,电脑开机第一道密码怎么设置 - 卡饭网-程序员宅基地

文章浏览阅读5.9k次。笔记本电脑怎么进CMOS密码巧设置笔记本电脑怎么进CMOS密码巧设置 笔记本电脑为了保护用户的数据安全,往往采用加密的方式,最常见的还是CMOS密码加密技术。为了让你的重要数据更加安全,你可能需要设置不同的密码,这也就要求你记住许多密码。对于笔记本电脑用户来说,真的需要设置一道道密码关卡吗?非也非也! 一、认识与设置笔记本电脑的CMOS密码 笔记本电脑的CMOS密码大致分为超级密码(Supervi..._电脑第一道密码修改

VulnHub靶机-Jangow: 1.0.1_jangow01-程序员宅基地

文章浏览阅读2.5k次,点赞2次,收藏5次。迟到的文章,就当库存发出来吧~_jangow01

spark实战之RDD的cache或persist操作不会触发transformation计算_spark cache和persist不生效-程序员宅基地

文章浏览阅读1.7w次,点赞2次,收藏5次。默认情况下RDD的transformation是lazy形式,实际计算只有在ation时才会进行,而且rdd的计算结果默认都是临时的,用过即丢弃,每个action都会触发整个DAG的从头开始计算,因此在迭代计算时都会想到用cache或persist进结果进行缓存。敝人看到很多资料或书籍有的说是persist或cache会触发transformation真正执行计算,有的说是不会!敝人亲自实验了一把..._spark cache和persist不生效

html文字滚动_html滚动-程序员宅基地

文章浏览阅读2.4k次。HTML之marquee(文字滚动)详解语法:以下是一个最简单的例子:代码如下:Hello, World下面这两个事件经常用到:onMouseOut=“this.start()” :用来设置鼠标移出该区域时继续滚动onMouseOver=“this.stop()”:用来设置鼠标移入该区域时停止滚动代码如下:onMouseOut=“this.start()” :用来设置鼠标移出该区域时继续滚动 onMouseOver=“this.stop()”:用来设置鼠标移入该区域时停止滚动这是一个完_html滚动

随便推点

树莓派GPIO简单操作_树莓派怎么读取gpio口上的信息-程序员宅基地

文章浏览阅读637次。树莓派的GPIO操作被抽象为文件读写,下面以一个例子来说明GPIO操作。_树莓派怎么读取gpio口上的信息

【汽车电子】浅谈车载系统QNX_车机qnx虚拟化软件系统架构-程序员宅基地

文章浏览阅读1.7k次。QNX是一种商用的遵从POSIX规范的类Unix实时操作系统,目标市场主要是面向嵌入式系统。它可能是最成功的微内核操作系统之一。QNX是一种商用的类Unix实时操作系统,遵从POSⅨ规范,目标市场主要是嵌入式系统[1]。QNX成立于1980年,是加拿大一家知名的嵌入式系统开发商。QNX的应用范围极广,包含了:控制保时捷跑车的音乐和媒体功能、核电站和美国陆军无人驾驶Crusher坦克的控制系统[2],还有RIM公司的BlackBerry PlayBook平板电脑。_车机qnx虚拟化软件系统架构

信号发生器设计VHDL代码Quartus仿真_vhdl正弦波信号发生器-程序员宅基地

文章浏览阅读1k次,点赞20次,收藏22次。代码功能:信号发生器设计信号发生器由波形选择开关控制波形的输出,分别能输出正弦波、方汉和三角波三种波形,波形的周期为2秒(由40M有源晶振分频控制)。考虑程序的容量,每种波形在一个周期内均取16个取样点,每个样点数据是8位(数值范围:00000000~1111111)要求将D/A变换前的8位二进数据(以十进制方式)输出到数码管动态演示出来。_vhdl正弦波信号发生器

笔记-Java线程概述_java 线程概述-程序员宅基地

文章浏览阅读629次。Java Concurrency in Practice中对线程安全的定义:当多个线程访问一个类时,如果不用考虑这些线程在运行时环境下的调度和交替运行,并且不需要额外的同步及在调用方代码不必做其他的协调,这个类的行为仍然是正确的,那么这个类就是线程安全的。显然只有资源竞争时才会导致线程不安全,因此无状态对象永远是线程安全的 。过多的同步会产生死锁的问题,死锁属于程序运行的时_java 线程概述

MATLAB从文件读取数据_matlab读取数据-程序员宅基地

文章浏览阅读1.2w次,点赞10次,收藏61次。读取表单Sheet2中部分信息。_matlab读取数据

【实践】基于spark的CF实现及优化_spark cf-程序员宅基地

文章浏览阅读1.4w次。最近项目中用到ItemBased Collaborative Filtering,实践过spark mllib中的ALS,但是因为其中涉及到降维操作,大数据量的计算实在不能恭维。所以自己实践实现基于spark的分布式cf,已经做了部分优化。目测运行效率还不错。以下代码package modelimport org.apache.spark.broadcast.Broadcastimp_spark cf

推荐文章

热门文章

相关标签