실험 데이터 채널 활용 가이드


(예제) 아두이노에서 채널 API 연동하기

8. 12 오후 4:32

과학실에 온도와 습도를 측정할 수 있는 센서 디바이스를 준비하고, VlabON에 데이터 채널을 개설하여 데이터를 전송하면 언제 어디서든 과학실의 온도, 습도를 확인할 수 있습니다.

채널 등록하기 : 스마트 과학실 온도, 습도 측정

VlabON 플랫폼에 로그인 후 "내실험데이터" 화면에서 "신규 채널 등록"을 수행합니다.

예시에서는 온도와 습도 2개의 데이터 필드를 사용할 예정이므로 아래와 같이 필드1, 필드2를 체크 선택하고, 기타 채널명, 설명, 이미지 등 채널에 대한 충분한 정보가 전달될 수 있도록 관련된 정보 항목을 작성합니다.

채널 등록이 완료되면 "API Key 관리" 탭에서 데이터 기록을 위한 API Key가 자동으로 생성된 것을 확인할 수 있으며, 화면 하단의 API 요청 예시의 '채널 피드 쓰기' URL은 이어서 진행되는 아두이노 장비 코딩 과정에 적용되므로 유심히 봐 주세요. 

NodeMCU와 DHT 센서 활용하여 온도, 습도 측정 디바이스 구성하기

아두이노에서 채널의 API를 이용하여 데이터를 전송하기 위해서는 ESP8266 모듈의 WiFi를 통한 http 통신이 필요합니다.

본 예제에서는 NodeMCU 1.0 (ESP-12E Module) 모듈과 DHT11 온습도 센서를 이용하여 아래와 같이 온/습도 측정 다바이스를 구성합니다.

 

개발환경 설정

NodeMCU USB 드라이버 설치

NodeMCU의 칩셋에 맞는 드라이버를 google에서검색하여 설치합니다. 칩셋에 따라 ch340 또는  ch210x 로 검색합니다.

아두이노 IDE에 NodeMCU 보드 매니저 설치

파일 > 환경설정(preference) 메뉴를 선택한 다음 추가적인 보드 매니저 URLs(Additional boards manager URLs) 항목에 "http://arduino.esp8266.com/stable/package_esp8266com_index.json"을 입력합니다.

보드 매니저를 열고 esp8266 으로 검색 후 설치를 진행합니다.

 

DHT 센서 라이브러리 설치

라이브러리 매니저를 열고, "DHT sensor"로 검색 후 "DHT sensor library"를 설치 합니다.


 

ESP8266에 DHT11 센서 연결하기

그림과 같이 브레드보드를 사용하여 ESP8266 모듈에 DHT11 센서를 연결합니다.

  • DHT Vcc = NodeMCU 3.3v
  • DHT GND = NodeMCU GND
  • DHT Data = NodeMCU D5
  • DHT Data와 NodeMCU Vcc 사이에 10KΩ 추

배선에 대한 상세한 정보는 다음을 참고하세요. 
https://lastminuteengineers.com/esp8266-dht11-dht22-web-server-tutorial/

Wiring Fritzing Connecting DHT11 Temperature Humidity Sensor with ESP8266 NodeMCU

 

스케치 프로그램 작성

본 예제는 아두이노 디바이스에서 채널 API 를 이용하여 데이터를 전송하는 방법을 설명하는 데 목적이 있으므로 채널 API를 호출하는 부분을 중심으로 설명합니다.  ESP8266 모듈 프로그램 작성에 대한 일반 내용은 https://lastminuteengineers.com/esp8266-dht11-dht22-web-server-tutorial/ 를 참고바라며, 본 예시에 사용된 코드는 본 화면 상단의 첨부파일 링크를 통해 다운로드 받을 수 있습니다.

스케치 업로드를 시작하기 전에 ESP8266이 접속할 네트워크에 연결할 수 있도록 다음 두 변수를 적절하게 변경해야 합니다.

/*Put your SSID & Password*/
const char* ssid = "YourNetworkName";  // 접속할 공유기의 SSID
const char* password = "YourPassword";  // 접속할 공유기의 비밀번호

앞서 새로 등록한 채널의 데이터 기록용 API 에서 온도, 습도 변수 부분만 제외한 base URL 을 정의합니다. 채널번호, API Key 가 반영되도록 채널에서 복사해온 값에서 전송 프로토콜을 변경(https -> http) 후 적용합니다.

String serverName = "http://dev.vlabon.re.kr/api/v1/channel/ch.0000000042/update?api_key=0dd54b5ef98ad056d936956a7eb4f983"; // 새채널 : 스마트 과학실 온도, 습도 측정

채널 API는 HTTPS 통신을 기본으로 하지만 일반 웹브라우저와는 달리 아두이노에서 HTTPS 통신을 하기 위해서 보안통신에 대한 개념 이해 및 추가 작업이 요구되므로 학교 현장에서 쉽게 이용할 수 있도록 HTTP 통신을 허용

loop 함수에서는 주기적으로 설정된 전송시간 간격 체크하여 VlabON 채널에 데이터를 전송하는 pushData2Vlabon 함수를 호출하면 온도, 습도를 측정하여 채널에 전송할 URL을 완성하고 GET 방식으로 요청합니다.

void loop() {
  
  server.handleClient();

  // timerDelay : 측정 데이터를 채널에 전송할 주기
  if ((millis() - lastTime) > timerDelay) {
    pushData2Vlabon();
  }
}

void pushData2Vlabon(){
  if(WiFi.status()== WL_CONNECTED){
    WiFiClient client;
    HTTPClient http;

    Temperature = dht.readTemperature(); // 온도 값 측정
    Humidity = dht.readHumidity();       // 습도 값 측정
    
    // 측정된 온도, 습도 값을 전송할 URL에 적용
    String serverPath = serverName + "&field1="+ Temperature + "&field2=" + Humidity;
    Serial.println(serverPath.c_str());

    http.begin(client, serverPath.c_str());

    int httpResponseCode = http.GET();

    if(httpResponseCode > 0){
      Serial.print("HTTP Response code: ");
      Serial.println(httpResponseCode);
      String payload = http.getString();
      Serial.println(payload);
    } 
    else {
      Serial.print("Error code: ");
      Serial.println(httpResponseCode);
    }
    http.end();

  }
  else {
    Serial.println("WiFi Disconnected");
  }
  lastTime = millis();
}

첨부된 예제 코드는 ESP8266 모듈이 STA 모드로 작동되므로 정상적으로 시작된다면 시리얼 모니터에 "HTTP 서버가 시작됨"을 알리는 메시시가 표시되며, 웹브라우저를 통하여 시리얼 모니터에 표시된 IP 주소로 접속하면 다음과 같이 측정된 온도, 습도를 확인할 수 있습니다.

 

채널 추가 설정

채널 데이터 확인

아두이노 디바이스에서 채널로 정상적으로 데이터가 전송되면, 채널의 데이터 조회용 API를 이용하여 아래와 같이 등록된 데이터를 확인할 수 있습니다.

채널 데이터 보기 설정

채널에 데이터 등록이 진행되면 아래와 같이 채널 공개를 위한 데이터보기 형태를 설정합니다.  '데이터보기 추가' 버튼을 선택 후 차트 유형과 데이터 필드 번호를 선택하여 차트를 생성하고, 각 차트별로 색상, 범위, 단위 등 사용자 취향에 따라 재구성 합니다. (채널 데이터보기 설정 페이지 참고)