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 온도 값이 조금 더 높게 나오는것을 확인 할 수 있다.
반응형