스케치 프로그램 작성

10. 15 오후 4:58

본 예제는 아두이노 디바이스에서 채널 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 주소로 접속하면 다음과 같이 측정된 온도, 습도를 확인할 수 있습니다.