CJMCU-8118是一种气体传感器片上的系统(SSOC)+温湿度传感器,简单来说,通过ccs811内部集成mcu实现i2c接口共用,实现气体和温湿度共同检测。
外观
CCS811是一种能够检测CO2和TVOC浓度的传感器。安装Adafruit_CCS811.h
库,实现CO2和TVOC的读取。
#include <Adafruit_CCS811.h>
Adafruit_CCS811 ccs;
void setup() {
Serial.begin(9600);
Serial.println("CCS811 test");
if(!ccs.begin()){
Serial.println("Couldn't find sensor!");
while(1);
}
// 等待传感器输入数据
while(!ccs.available());
}
void loop() {
if(ccs.available()){
if(!ccs.readData()){
Serial.print("CO2: ");
Serial.print(ccs.geteCO2());
Serial.print("ppm, TVOC: ");
//Serial.print(ccs.getTVOC());
Serial.println(ccs.getTVOC()); //换行
}
else{
Serial.println("ERROR!");
while(1);
}
}
delay(500);
}
对cs811传感器呼出一口气,CO2的ppm值瞬间增加。
hdc1080是德州仪器生产的数字温湿度传感器,精度为±2%。Arduino可用库有ClosedCube_HDC1080.h
和Adafruit_HDC1000.h
,两个库函数实际检测的值差别不大。ClosedCube_HDC1080.h
中的begin()函数是不是布尔类型写的,因此不能判断,这是两个库函数的差别。另外,使用ClosedCube_HDC1080.h
库要申明地址,示例给的地址是0x40,转换为二进制是1000000b。
多个 HDC1080 如何查找HDC1080 地址?
用Adafruit_HDC1000.h
语法也是类似,库里可以下载,不多赘述。
#include <Wire.h>
#include "ClosedCube_HDC1080.h"
ClosedCube_HDC1080 hdc1080;
void setup()
{
Serial.begin(9600);
Serial.println("ClosedCube HDC1080 Arduino Test");
// Default settings:
// - Heater off
// - 14 bit Temperature and Humidity Measurement Resolutions
hdc1080.begin(0x40); //物理地址
Serial.print("Manufacturer ID=0x");
Serial.println(hdc1080.readManufacturerId(), HEX); // 0x5449 德州仪器设备ID
Serial.print("Device ID=0x");
Serial.println(hdc1080.readDeviceId(), HEX); // 0x1050 设备ID地址
printSerialNumber(); //打印设备序列号
}
void loop()
{
Serial.print("T=");
Serial.print(hdc1080.readTemperature());
Serial.print("C, RH=");
Serial.print(hdc1080.readHumidity());
Serial.println("%");
delay(3000); //延迟3s
}
void printSerialNumber() {
Serial.print("Device Serial Number=");
HDC1080_SerialNumber sernum = hdc1080.readSerialNumber();
char format[12];
sprintf(format, "%02X-%04X-%04X", sernum.serialFirst, sernum.serialMid, sernum.serialLast);
Serial.println(format);
}
实际温度检测会高于环境实际温度,我想可能是cs811发热导致的?也有可能是我还没完全老化这块传感器?具体原因占时还没找到。
通过i2c串口同时监测CO2、TVOC和温湿度,实现代码如下:
/*
* richowe
*/
#include <Wire.h>
#include <Adafruit_CCS811.h>
#include <ClosedCube_HDC1080.h>
Adafruit_CCS811 ccs;
ClosedCube_HDC1080 hdc1080;
void setup()
{
Serial.begin(9600);
Serial.println("HDC1080 TEST");
Serial.println("CCS811 TEST");
hdc1080.begin(0x40);
if(!ccs.begin())
{
Serial.println("Couldn't find sensor!");
while (1);
}
while(!ccs.available());
}
void loop()
{
if(ccs.available())
{
if(!ccs.readData())
{
Serial.print("Temp: ");
Serial.print(hdc1080.readTemperature());
Serial.print("^C, Hum: ");
Serial.print(hdc1080.readHumidity());
Serial.println("%");
//Serial.println("\n");
Serial.print("CO2: ");
Serial.print(ccs.geteCO2());
Serial.print("ppm, TVOC: ");
Serial.print(ccs.getTVOC());
Serial.print("ppb, ");
}
else
{
Serial.println("ERROR!");
while(1);
}
}
delay(1000); //延时1s
}
文章浏览阅读1.5k次,点赞2次,收藏27次。WeTest 导读本文作者从自身多年的Unity项目UI开发及优化的经验出发,从UGUI,CPU,GPU以及unity特有资源等几个维度,介绍了unity手游性能优化的一些方法。在之前的文章《手游内存占用过高?如何快速定位手游内存问题》中提到,Mono内存和native内存是PSS内存主要的组成部分,mono内存更多的起到内存调用的功能,因此常常成为了开发人员优化内存的起点;而在游戏的其他的进程中..._canvas.sendwillrendercanvases
文章浏览阅读4.9k次,点赞7次,收藏16次。细致分析及解决:STM32CUBEMX报错 xxx but MDK-ARM V5.27 project generation have a problem以及keil的device not found_but mdk-arm v5.27project generation have a problem
文章浏览阅读509次。Deepdive 只能在linux下运行_deepspeed是不是只能在linux
文章浏览阅读7.8k次,点赞5次,收藏22次。中国采购招标网URL,通过爬虫去请求该网站会返回521状态码,需要带着特定cookie去访问,此cookie又是动态变化,如果想要持续采集就得破解此cookie生成规则。站点反爬分析通过Fiddler抓包分析,可以看出它的请求顺序。1. 首次发起请求,返回状态码为521,返回第一段加密cookie,携带第一段加密的cookie去请求会返回第二个521状态码,会返回第二段加密cookie,然后携带第一段和第二段cookie去请求页面,才返回正常状态码,通过观察第二段加密cookie有时效性,._采招网脚本
文章浏览阅读821次,点赞2次,收藏5次。声明:此篇文章是个人学习笔记,并非教程,所以内容可能不够严谨。可作参考,但不保证绝对正确。如果你发现我的文章有什么错误,非常欢迎指正,谢谢哦。0 引言在我的上一篇笔记中,我主要关注点在“什么是万向节和万向节锁”上,另外简单说了说欧拉角会按照万向节的规则运行。但对于“欧拉角为什么会按照万向节这一(相对)复杂规则来确定旋转值”没有讨论。本篇文章,就来谈谈我对欧拉角为什么会符合万向节规则的理解。本文使用的欧拉角的定义是我为了清晰易懂从而根据自己的理解描述的(可能不准确)。1 什么是欧拉角1.1 我的理解:_unity欧拉角旋转顺序
文章浏览阅读133次。设计模式是根据人们的经验总结出来的使用技巧。本篇博客将从模式定义、角色与职责、实现方式、优缺点、应用场景等方面对工厂模式进行解读,并且在文本还附带小的程序案例以便更加一步理解该模式。_工厂类可以直接调用吗
文章浏览阅读675次。java web工程项目使用了Spring+Spring MVC+Hibernate的结构,在Controller中的方法都是用于处理前端的访问信息,Controller通过调用Service进行业务处理后给前端返回ModelAndView对象或者只返回Json格式数据。如果能够获得Http请求在后端程序中处理的相关信息,对于开发和调试时十分方便的。工程中使用了Spring MVC的Interce..._java 拦截器接收参数解密
文章浏览阅读3.5w次。若该文为原创文章,未经允许不得转载原博主博客地址:https://blog.csdn.net/qq21497936本文章博客地址:https://blog.csdn.net/qq21497936/article/details/97382348目录前言目标效果HUD(抬头显示)HUD设置渲染顺序HUD坐标系解释代码Demo运行效果入坑入坑二:位置(0,0..._osg hud文本颜色不一致
文章浏览阅读6.8k次,点赞4次,收藏33次。支付宝小程序、百度小程序、微信小程序、今日头条小程序四大小程序对比分析,BAT小程序技术分析_头条小程序和微信小程序登录的区别
文章浏览阅读8k次,点赞9次,收藏63次。os模块详解在看大神们的代码时经常能看到os模块的身影,然后就想着做一下总结,方便以后查看下图是参考CSDN博主“数据分析与统计学之美”,非常感谢博主的图片下面我们针对每一个详细的介绍一下其用法:(1)os.getcwd() 获取当前的工作路径;>>> import os>>> os.getcwd()'C:\\Users\\cc'(2)os.listdir(path) 显示当前文件夹下所有文件和目录组成的列表;>>> pat_python os模块详解
文章浏览阅读254次。torch.gather()函数可以理解为根据索引和维度来求张量中对应的数,最后得到的是一个shape和index相同的张量即“以A = B.gather(dim=0, index=torch.tensor([[2, 1, 2]]))为例,(index维度可以是任意的维度,不要受限于B),即A的维度为(1,3);其次dim=0代表按列索引,那么index第一个元素“2”的含义为在B中其所在列(即第0列)的第2个元素。同理,index第二个元素“1”的含义为在B中其所在列(即第1列)的第1个元素;_torch.gather(input,dim,index)
文章浏览阅读2.6k次,点赞4次,收藏4次。Java copyProperties拷贝工具类的使用前几天优化代码时,目光停在了copyProperties上。因为我在正式转历史时可以较明显的但觉到卡顿。我原本使用的是org.apache.commons.beanutils。但是众所周知的commons系列的突出问题其一,就是著名的BeanUtils.copyProperties性能问题。经过了解后,我盯上了Hutool。在我个人看来,对于copyProperties性能问题,Hutool还是有一定自己的强处。特此分享一下我的使用过程和心得体会。_hutool beanutil.copyproperties