66 lines
1.3 KiB
C
66 lines
1.3 KiB
C
/*
|
|
*
|
|
* CO2 PASCO2V01 传感器
|
|
*
|
|
*/
|
|
|
|
#include <stdio.h>
|
|
#include <wiringPiI2C.h>
|
|
|
|
// Pasco2V01 设备地址
|
|
#define DEVICE_ADDRESS 0x76
|
|
|
|
// 最大尝试次数
|
|
#define MAX_RETRY 100
|
|
|
|
int main() {
|
|
// 初始化 I2C 总线
|
|
int fd = wiringPiI2CSetup(DEVICE_ADDRESS);
|
|
if (fd < 0) {
|
|
printf("Failed to initialize I2C\n");
|
|
return -1;
|
|
}
|
|
|
|
// 发送命令开始测量
|
|
int result = wiringPiI2CWrite(fd, 0x00);
|
|
if (result < 0) {
|
|
printf("Failed to write command\n");
|
|
return -1;
|
|
}
|
|
|
|
// 等待传感器完成测量
|
|
int retry = 0;
|
|
while (retry < MAX_RETRY) {
|
|
int status = wiringPiI2CReadReg8(fd, 0x00);
|
|
if (status < 0) {
|
|
printf("Failed to read status\n");
|
|
return -1;
|
|
}
|
|
|
|
if (status & 0x08) {
|
|
break;
|
|
}
|
|
|
|
retry++;
|
|
}
|
|
|
|
if (retry >= MAX_RETRY) {
|
|
printf("Measurement timeout\n");
|
|
return -1;
|
|
}
|
|
|
|
// 读取测量结果
|
|
unsigned char data[3];
|
|
data[0] = wiringPiI2CReadReg8(fd, 0x02);
|
|
data[1] = wiringPiI2CReadReg8(fd, 0x03);
|
|
data[2] = wiringPiI2CReadReg8(fd, 0x04);
|
|
|
|
// 转换为浓度值
|
|
unsigned int concentration = (data[0] << 16) | (data[1] << 8) | data[2];
|
|
|
|
// 打印浓度值
|
|
printf("Gas Concentration: %u ppm\n", concentration);
|
|
|
|
return 0;
|
|
}
|