아두이노프로세싱 프로그래밍

대기압 측정센서 BMP180에 의한 NodeMCU보드의 I2C 센서 인터페이스 D1(GPIO5), D2(GPIO4) 검증

coding art 2017. 2. 11. 15:05
728x90

아두이노 보드들 중 NodeMCU가 여러 가지 성능 상의 이유로 많은 관심을 끌고 있다. 특히 아두이노 마이크로콘트롤러 보드들은 I2C 센서 인터페이스에 의해 데이터를 읽어 들일 수 있는지 여부가 대단히 중요하다.
Cactus Micro 보드와 NodeMCU 보드를 대상으로 이 문제를 점검하고 실제 BMP 180 대기압 측정센서를 사용해 I2C 센서인터페이스 프로그램을 돌려 확인해 보기로 한다.

Cactus Micro의 핀 배치를 살펴보자. 아날로그 핀들이 A0,A1,A2,A3 그리고 건어 뛰어서 A6,A7,A8,A9,A10 까지 있다. 한편 주의 깊게 살펴보면 A4와 A5가 없는 대신 이들은 I2C 센서 인터페이스를 위한 SCL과 SDA로 할당되어 있음을 알 수 있다.




I2C 인터페이스를 사용하는 BMP180센서에 의해 Cactus Micro에서 대기 압력을 측정하려면 SDA, SCL핀에 해당하는  2번과 3번 핀을 사용하면 된다.
SCL -> 3 Analog 5
SDA -> 2 Analog 4
GND -> GND              
3V3  -> 3V3



Cactus Micro와는 달리 NodeMCU 핀 배치도에 의하면 SPI 인터페이스를 제외하고 I2C 센서 인터페이스에 대한 정확한 할당이 없음을 확인할 수 있다.

하지만 I2C 센서 인터페이스가 SCL, SDA이지만 한편으로는 Catus Micro에서는 Analog 5, Analog 4인 것처럼 NodeMCU에서는 GPIO5 와 GPIO4로 불린다는 점에 주목한다. 그렇다면 실제 I2C 센서 작업을 통해서 확인이 필요하다고 본다.








사진과 같이 BMP 180센서를 NodeMCU에서  다음과 같이 배선 작업을 수행한다.
SCL -> D1 GPIO 5
SDA -> D2 GPIO 4
GND -> GND              
3V3  -> 3V3     



코드 작성에 필요한 Adafruit_BMP085_U.h  라이브러리는 아래의 zip 파일을 다운받기 바란다.

Adafruit-BMP085-Library-master.zip


아래의 대기압 및 온도 측정 프로그램을 작성하여 컴파일 업로딩 후 시리얼 모니터에서 온도와 압력 값을 관찰해 보기로 한다.



         
NodeMCU_barometer_01

#include <Wire.h>
#include <Adafruit_BMP085_U.h>
 
/*
   NodeMCU I2C Pin Connections
   ===========
   Connect SCL to D 1: GPIO 5
   Connect SDA to D 2: GPIO 4
   Connect VDD to 3.3V DC
   Connect GROUND to common ground
   
*/
  
Adafruit_BMP085_Unified bmp = Adafruit_BMP085_Unified(10085);
 
void displaySensorDetails(void)
{
  sensor_t sensor;
  bmp.getSensor(&sensor);
  Serial.println("------------------------------------");
  Serial.print  ("Sensor:       "); Serial.println(sensor.name);
  Serial.print  ("Driver Ver:   "); Serial.println(sensor.version);
  Serial.print  ("Unique ID:    "); Serial.println(sensor.sensor_id);
  Serial.print  ("Max Value:    "); Serial.print(sensor.max_value); Serial.println(" hPa");
  Serial.print  ("Min Value:    "); Serial.print(sensor.min_value); Serial.println(" hPa");
  Serial.print  ("Resolution:   "); Serial.print(sensor.resolution); Serial.println(" hPa"); 
  Serial.println("------------------------------------");
  Serial.println("");
  delay(500);
}

void setup(void)
{
  Serial.begin(9600);
  Serial.println("Pressure Sensor Test"); Serial.println("");
 
  /* Initialise the sensor */
  if(!bmp.begin())
  {
    /* There was a problem detecting the BMP085 ... check your connections */
    Serial.print("Ooops, no BMP085 detected ... Check your wiring or I2C ADDR!");
    while(1);
  }
 
  /* Display some basic information on this sensor */
  displaySensorDetails();
}
 

void loop(void)
{
  /* Get a new sensor event */
  sensors_event_t event;
  bmp.getEvent(&event);
 
  /* Display the results (barometric pressure is measure in hPa) */
  if (event.pressure)
  {
    /* Display atmospheric pressue in hPa */
    Serial.print("Pressure:    ");
    Serial.print(event.pressure);
    Serial.println(" hPa");
   

    float temperature;
    bmp.getTemperature(&temperature);
    Serial.print("Temperature: ");
    Serial.print(temperature);
    Serial.println(" C");

  }
  else
  {
    Serial.println("Sensor error");
  }
  delay(1000);
}//프로그램 끝

예상처럼 정상적인 출력(대기압력 1013 , 온도 16)확인이 가능하였으며 NodeMCU에서는 GPIO5 와 GPIO4를 I2C 센서 인터페이스로 사용이 가능하다고 볼 수 있다.

Adafruit-BMP085-Library-master.zip
0.01MB