Open IoT 서버 사용방법

  1. Open IoT 서버 개요
  2. 코드신청
  3. 데이터 측정 장소 설정
  4. 데이터전송
  5. 아두이노 코드 예제
  6. 사용약관 및 주의사항

1. Open IoT 서버 개요

Open IoT 서버는 측정된 온도 데이터를 그래프와 표 형식으로 보여주는 IoT 교육용 서버입니다. 아두이노 혹은 기타 프로그램 가능한 기기를 통해 수집된 온도 데이터를 GET 혹은 POST 방식으로 Open IoT 서버로 전송하면 해당 누적된 데이터를 PC, 핸드폰 혹은 기타 디지털 장치에서 확인할 수 있습니다.

코드 신청을 통해 누구라도 무료로 사용 가능합니다. 사용 시 주의사항에 대해서는 5. 사용약관 및 주의사항을 참조해 주세요.

2. 코드신청

상단의 [코드관리] 메뉴를 클릭하여 코드관리 페이지로 들어갑니다.

이 페이지에 이메일 주소를 입력하고 신규정보 수신 여부를 선택하고 "코드관리/신청"을 클릭합니다.

12문자(영문 대문자, 소문자, 숫자)로 구성된 코드가 생성됩니다. 이 코드를 가지고 서버에 접속하거나 자신의 수집한 데이터 페이지를 조회할 수 있습니다.

만일 코드를 분실한 경우 가입 시 사용했던 이메일을 다시 "코드관리" 페이지에서 입력하면 발급한 코드를 알려줍니다.

하나의 이메일로는 하나의 코드만을 발급 받을 수 있습니다.

3. 데이터 측정 장소 설정

발급받은 코드를 초기 화면 입력창에 입력하여 로그인을 합니다.

하나의 코드로 최대 3곳의 서로 다른 장소의 온도 데이터를 입력할 수 있습니다. 서로 다른 곳의 온도 데이터를 비교하거나 별도로 관찰이 가능합니다.

로그인 후 상단 메뉴에서 "설정"을 클릭합니다.

설정 페이지를 통해 새로운 장소를 등록하거나 등록된 장소의 명칭을 변경할 수 있습니다.

4. 데이터전송

측정된 데이터를 서버로 전송하는 방식은 아래와 같이 GET 혹은 POST 방식으로 사용하여 서버 페이지를 호출하면 됩니다.

http://openiot.kr/comm.html?code=[코드]&location=[장소]&t=[온도]
코드 : 배정 받은 12자리 코드를 대소문 구분해서 입력
장소 : 1, 2, 3 중 하나의 숫자로 입력
온도 : 소수점 첫째 자리까지의 숫자 정보

예시

http://openiot.kr/comm.html?code=oAHlL2iQqX5e&location=1&t=28.5

서버에서는 다음 중 하나의 결과 값을 전달해 줍니다.

5. 아두이노 코드 예제

아래 예제는 아두이노 UNO WiFi Rev2 보드와 DHT11 온도계를 사용하는 경우 적용되는 코드입니다

				#include <WiFiNINA.h>
				#include <DHT.h>

				DHT dht(12, DHT11);
				
				// 사용하고자 하는 WiFi의 SSID와 암호를 여기서 설정합니다.
				char ssid[] = "SangjiWiFi";
				char pass[] = "123454321";

				char c;
				String response;
				int temperature; 

				int status = WL_IDLE_STATUS;
				
				// 서버의 주소를 입력합니다
				// openiot.kr의 아이피를 사용합니다 
				char server[] = "211.251.236.245";
				WiFiClient client;

				int getTemperature() {
					int h = dht.readTemperature();
					return h;
				}

				void printWifiStatus() {
					// print the SSID of the network you're attached to:
					Serial.print("SSID: ");
					Serial.println(WiFi.SSID());

					// print your board's IP address:
					IPAddress ip = WiFi.localIP();
					Serial.print("IP Address: ");
					Serial.println(ip);

					// print the received signal strength:
					long rssi = WiFi.RSSI();
					Serial.print("signal strength (RSSI):");
					Serial.print(rssi);
					Serial.println(" dBm");
				}
				
				// 아두이노를 재부팅 하는데 사용되는 함수입니다. 
				void(* resetFunc)(void) = 0;

				void setup() {
					Serial.begin(9600);
					while(!Serial) {
						;
					}

					if(WiFi.status() == WL_NO_MODULE) {
						Serial.println("WiFi Module Fail");
						while(true) ;
					}

					while(status != WL_CONNECTED) {
						Serial.print("Connection to SSID ");
						Serial.println(ssid);

						status = WiFi.begin(ssid, pass);
						delay(10000);
					}

					Serial.println("Connected to WiFi");
					// printWifiStatus();
				}

				void loop() {
					response = "";
					temperature = getTemperature();
					
					// openiot.kr에 가입하고 받은 코드를 여기에 입력합니다. 
					// location 값은 1, 2, 3 중 하나를 입력합니다. openiot.kr에서 등록한 순서대로 숫자를 입력하면 됩니다. 
					String target = String("GET /comm.html?code=배정받은코드값&location=1&t=" + String(temperature) + " HTTP/1.1");
					Serial.println(target);
					
					Serial.println("\nConnecting to server .. ");
					if(client.connect(server, 80)) {
						Serial.println("connected to server");
						
						// client.println("GET /comm.html HTTP/1.1");
						client.println(target);
						client.println("Host: 211.251.236.245");
						client.println("Connection: close");
						client.println();
					}

					Serial.print("측정된 온도: ");
					Serial.println(temperature);
					
					while(true) {
						while (client.available()) {
							c = client.read();
							response= response + c;
						}
					
						int contentBodyIndex = response.lastIndexOf('\n');
						if (contentBodyIndex > 0) {
							Serial.print(response.substring(contentBodyIndex));
						}
					
						if(!client.connected()) {
							Serial.println();
							Serial.println("disconnecting .. ");
							client.stop();
					
							break;
						}
					}
					
					// 만일 WiFi와의 접속이 끊어진 경우 아두이노를 재부팅합니다. 
					if(status != WL_CONNECTED) {
						delay(180000);
						resetFunc();
					}
						
					delay(300000);
				}

		

6. 사용약관 및 주의사항

  1. 서버 사용료
    • Open IoT 코드 발급 및 데이터 전송 그리고 데이터 조회는 모두 무료로 사용할 수 있습니다.
    • 서버를 사용함에 있어 별도로 과금을 하는 행위는 불법입니다.
    • 단, 운영자와의 계약을 통해 유료로 서버 사용이 가능하며 이 경우 별도의 사용약관이 적용됩니다.
  2. 코드 발급
    • 코드는 하나의 이메일에 하나씩 발급됩니다.
    • 코드 당 최고 3곳의 장소를 등록하고 데이터를 측정할 수 있습니다.
    • 유효하지 않은 이메일로 등록하는 경우 사전 예고없이 발급한 코드와 이메일 계정을 삭제합니다.
  3. 데이터 저장 기간
    • Open IoT는 매월 1일 기준 3개월 이전 데이터는 모두 삭제합니다. (예를 들어 7월 1일에는 4월 1일 이전 데이터를 모두 삭제합니다)
    • 데이터가 삭제된 이후에는 복구가 불가능 하오니 만일 데이터가 필요한 경우 사전에 백업을 요청드립니다.
    • 단, 별도의 계약을 통해 유료로 서버를 사용하는 경우 데이터 보존 기간은 별도로 협의됩니다.
  4. 데이터 보안
    • Open IoT는 손쉬운 접속을 위해 보안은 취약하여 데이터 보존을 보장하지 못합니다.
    • Open IoT 서버에 저장된 데이터는 사전 예고 없이 삭제될 수 있으니 절대 민감한 데이터를 저장하지 말아야합니다.
    • Open IoT 서버에 저장된 데이터 손실로 인한 사용자 피해는 운영자가 책임지지 않습니다.
  5. 데이터 전송 제한
    • Open IoT는 장소별로 시간 당 30개까지의 데이터만을 저장합니다. 만일 그 이상의 데이터가 전송되는 경우 해당 데이터는 저장되지 않습니다.
    • (만일 05시00분부터 05시59분까지 총 40개의 데이터가 전송되는 경우 초기 30개의 데이터만 저장됩니다. 그리고 06시00분부터 다시 전송된 데이터를 시간 당 30개까지 저장합니다.)
  6. 데이터 표기 방식
    • Open IoT 서버에서 표시되는 일별 그래프는 시간 당 평균 온도값을 계산하여 하루 24시간 정보를 한 화면에 표시합니다.
    • Open IoT 서버에서 표시되는 월별 그래프는 일 당 평균, 최고, 최저 온도값을 계산하여 한 달치 정보를 한 화면에 표사합니다.