페이지

2018년 7월 17일 화요일

온습도센서(ETH-01S)를 아두이노와 Nucleo-L053(STM32L053) 에서 사용하기

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;




댓글 없음:

댓글 쓰기