본문 바로가기

ESPRESSIF/ESP32-C3

ESP32-C3 SSM - I2C 온도 센서(TCN75) 테스트

ESP32-C3 의 기본  I2C 핀은 IO9(SCL), IO8(SDA)에 할당되어 있다.

 

I2C 온도센서 TCN75 모듈을 이용하여 ESP32-C3의 I2C 테스트를 해 보자.

 

I2C로 TCN75센서의 온도 레지스터 값을 읽어 오는 기본 예제

#include <Wire.h>
#define TCN75_ADDR 0x48
float read_temp(unsigned char address)
{
  byte temp_reg = 0;
  byte a, b;
  float temp=.0;
  Wire.beginTransmission(address);  // Start transmission
  Wire.write((byte)temp_reg);       // 온도 레지스터
  Wire.endTransmission();           // Stop transmission
  Wire.requestFrom(address, 2);     // I2C 데이터 요청
  a = Wire.read();                  // first received byte stored here
  b = Wire.read();                  // second received byte stored here
  temp=a<<8|b;
  return(temp/256.0);
}

void setup()
{
  Serial.begin(115200);
  while (!Serial);
  
  Wire.begin(); 
  Serial.println("ESP32-C3 TCN75 Temp Sensor Test");
}

void loop()
{
  float result = 0;
  result = read_temp(TCN75_ADDR);   
  Serial.println(result);
  delay(2000);
}

 

테스트 결과 온도 값을 정상적으로 읽어 오는것을 확인 할 수 있다.

ESP32-C3 TCN75 Temp Sensor Test
27.50
27.00
27.00
27.00
27.00
 

ESP32-C3 내부 온도 테스트 코드와 함께 칩 내부 온도와 TCN75센서의 온도 값을 동시에 출력 하는 예제를 작성해 보자.

#include <Wire.h>
#include "driver/temp_sensor.h"

#define TCN75_ADDR 0x48
float read_temp(unsigned char address)
{
  byte temp_reg = 0;
  byte a, b;
  float temp=.0;
  Wire.beginTransmission(address);  // Start transmission
  Wire.write((byte)temp_reg);       // 온도 레지스터
  Wire.endTransmission();           // Stop transmission
  Wire.requestFrom(address, 2);     // I2C 데이터 요청
  a = Wire.read();                  // first received byte stored here
  b = Wire.read();                  // second received byte stored here
  temp=a<<8|b;
  return(temp/256.0);
}


void initTempSensor(){
    temp_sensor_config_t temp_sensor = TSENS_CONFIG_DEFAULT();
    //TSENS_DAC_L2 is default   L4(-40℃ ~ 20℃), L2(-10℃ ~ 80℃) L1(20℃ ~ 100℃) L0(50℃ ~ 125℃)
    temp_sensor.dac_offset = TSENS_DAC_L2;  
    temp_sensor_set_config(temp_sensor);
    temp_sensor_start();
}

void setup()
{
	Serial.begin(115200);
	while (!Serial);

	Wire.begin(); 
	Serial.println("ESP32-C3 TCN75 Temp Sensor Test");

	initTempSensor();
}

void loop()
{
  float result = 0;
  
  //ESP32C3 내부온도
  temp_sensor_read_celsius(&result);   
  Serial.print(result);
  Serial.print(", ");
  
  //TCN75 온도 센서
  result = read_temp(TCN75_ADDR);   
  Serial.println(result);
  delay(2000);
}

 

출력 테스트 결과 ESP32-C3 온도 값이 조금 더 높게 나오는것을 확인 할 수 있다.

반응형