ETH-01S는 에코나래(www.econarae.co.kr)의 온습도 센서이며, I2C Interface를 사용한다.
1. 아두이노에서 ETH-01S를 사용하는 방법.
에코나래 홈페이지로 가면, 네이버 블로그 링크가 있다. 블로그로 가면 아두이노 예제가 있다.
#include <Wire.h>
void setup()
{
Wire.begin();
}
void loop()
{
Wire.beginTransmission(0x44);
Wire.endTransmission();
delay(1000);
Wire.requestFrom(0x44,4);
if(Wire.available())
{
int HumidH = Wire.read();
int HumidL = Wire.read();
int TemperH = Wire.read();
int TemperL = Wire.read();
HumidH = HumidH & 0x3F; // Don't care bit mask
double RealH = (double)((HumidH * 256 ) + HumidL ) * 100/16383;
double RealT = (double)(((TemperH * 256) + TemperL)/4) * 165/16383 - 40;
}
}
2. NUCLEO-L053R8(STM32L053R8T6) 에서 사용하기.
STM32CubeMX에서 NUCLEO-L053R8 보드를 선택하고, I2C1을 Enable 시킨다.
I2C1 설정에서 PB6(SCL), PB7(SDA) Pin에 pull-up으로 설정한다.
Toolchain/IDE를 Keil uVision5로 설정하였다.
아두이노에서는 ETH-01S의 I2C address가 0x44인데, STM32에서는 read/write bit를 포함해서 주소로 쓰기 때문에, I2C address가 0x88이 된다.
float
H_result, T_result;
int HumidH, HumidL, TemperH, TemperL;
uint8_t pBuffer[4];
pBuffer[0] = 0x0;
HAL_I2C_Master_Transmit(&hi2c2, 0x88, pBuffer, 1, 100); // 초기화
HAL_I2C_Master_Receive(&hi2c2, 0x88, pBuffer, 4, 100); // 측정값 읽기
HAL_Delay(5);
memcpy(&HumidH ,&pBuffer[0],1);
memcpy(&HumidL ,&pBuffer[1],1);
memcpy(&TemperH ,&pBuffer[2],1);
memcpy(&TemperL ,&pBuffer[3],1);
H_result = (double)(((HumidH&0x3F) * 256 ) + HumidL ) * 100/16383;
T_result = (double)(((TemperH * 256) + (TemperL&0xFC))/4) * 165/16383 - 40;