概述
前言
CJMCU-8118是一种气体传感器片上的系统(SSOC)+温湿度传感器,简单来说,通过ccs811内部集成mcu实现i2c接口共用,实现气体和温湿度共同检测。
传感器
外观
CCS811
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
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
}
串口
最后
以上就是怕孤独大船为你收集整理的Arduino读取CCS811+HDC1080模块的全部内容,希望文章能够帮你解决Arduino读取CCS811+HDC1080模块所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复