아두이노 보드들 중 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 센서 인터페이스로 사용이 가능하다고 볼 수 있다.
'아두이노프로세싱 프로그래밍' 카테고리의 다른 글
HTML SVG 그래픽 언어 사용 NodeMCU WiFi Webserver 코딩에 의한 가변저항 전압 스마트폰 실시간 모니터링 프로그램 (0) | 2017.02.12 |
---|---|
아두이노 NodeMCU 웹서버가 그려주는 HTML+SVG 아날로그 시계 출력예제 I (0) | 2017.02.12 |
TinyGPS 라이브리를 사용한 GPS 위도 경도 데이터 모니터링 (0) | 2017.02.10 |
조립식 아두콥터에 GPS와 함께 장착된 지자기센서 성능 모니터링 (0) | 2017.02.10 |
GPS가 설치된 NodeMCU 1.0(ESP8266 12-E module) WiFi Webserver에 의한 스마트폰 다음지도 제어 및 +HTML 프로그래밍: V (0) | 2017.02.09 |