硬件准备:
- CHT8325ADNR芯片:CHT832X是上海申矽凌微电子的一款数字温湿度传感器,湿度精度为±1.5%RH,温度精度为±0.1°C,可以应用于车载,暖通空调,冰箱,温湿度计等环境监测。
- 连线:
Pin- VCC —> 5V-arduino
Pin-SDA —> SDA -arduino
Pin- GND —> GND-arduino
Pin-SCL ----> SCL-arduino

代码实现:
#include <Wire.h>#define CHT832X_ADDR 0x44
#define CMD_ONE_SHOT_NO_STRETCH 0x2400
#define CMD_READ_DATA 0xE000
#define TEMP_SCALE 65535.0
#define TEMP_OFFSET -45.0
#define TEMP_SLOPE 175.0
#define HUMIDITY_SCALE 100.0 / 65535.0
uint8_t crc8(const uint8_t *data, int len) {const uint8_t POLYNOMIAL = 0x31; uint8_t crc = 0xFF; for (int i = 0; i < len; ++i) {crc ^= data[i];for (int j = 0; j < 8; ++j) {crc = (crc & 0x80) ? (crc << 1) ^ POLYNOMIAL : (crc << 1);}}return crc;
}void setup() {Serial.begin(115200);Wire.begin();delay(100); Serial.println("CHT832X Sensor Test");
}void loop() {if (sendCommand(CMD_ONE_SHOT_NO_STRETCH)) {delay(150); uint16_t rawTemp, rawHumidity;uint8_t temp_crc, humi_crc;if (readMeasurement(&rawTemp, &rawHumidity, &temp_crc, &humi_crc)) {uint8_t temp_data[2] = {highByte(rawTemp), lowByte(rawTemp)};uint8_t humi_data[2] = {highByte(rawHumidity), lowByte(rawHumidity)};if (crc8(temp_data, 2) != temp_crc) {Serial.println("Temperature CRC check failed!");return;}if (crc8(humi_data, 2) != humi_crc) {Serial.println("Humidity CRC check failed!");return;}float humidity = rawHumidity * HUMIDITY_SCALE;float temperature = (rawTemp / TEMP_SCALE) * TEMP_SLOPE + TEMP_OFFSET;if (humidity > 100.0) humidity = 100.0;if (humidity < 0.0) humidity = 0.0;Serial.print("Raw Temperature: 0x");Serial.print(rawTemp, HEX);Serial.print(" (");Serial.print(rawTemp);Serial.print(") => ");Serial.print(temperature, 2);Serial.println(" °C");Serial.print("Raw Humidity: 0x");Serial.print(rawHumidity, HEX);Serial.print(" (");Serial.print(rawHumidity);Serial.print(") => ");Serial.print(humidity, 2);Serial.println(" %RH");Serial.println("--------------------------");} else {Serial.println("Failed to read data!");}} else {Serial.println("Measurement command failed!");}delay(4000);
}
bool sendCommand(uint16_t command) {Wire.beginTransmission(CHT832X_ADDR);Wire.write(highByte(command)); Wire.write(lowByte(command)); return (Wire.endTransmission() == 0);
}
bool readMeasurement(uint16_t *temp, uint16_t *humidity, uint8_t *temp_crc, uint8_t *humi_crc) {Wire.beginTransmission(CHT832X_ADDR);Wire.write(highByte(CMD_READ_DATA));Wire.write(lowByte(CMD_READ_DATA));if (Wire.endTransmission(false) != 0) return false;Wire.requestFrom(CHT832X_ADDR, 6);if (Wire.available() >= 6) {*temp = (Wire.read() << 8) | Wire.read(); *temp_crc =Wire.read(); *humidity = (Wire.read() << 8) | Wire.read(); *humi_crc =Wire.read(); return true;}return false;
}
运行结果:
