[파이썬] IoT 디바이스와 웹 애플리케이션 연동

소개

인터넷을 통해 연결된 장치인 IoT(IoT(Internet of Things)) 디바이스는 우리의 일상 생활을 혁신하고 편리성을 제공하는 데 중요한 역할을 합니다. 이러한 디바이스들은 센서와 액추에이터를 갖추고 있어 환경 데이터를 수집하고 제어할 수 있습니다.

그러나 종종 IoT 디바이스에서 수집된 데이터를 효과적으로 활용하기 위해서는 웹 애플리케이션과 연동할 필요가 있습니다. 이를 위해 Python과 웹 프레임워크를 사용하여 IoT 디바이스와 웹 애플리케이션을 연동해보겠습니다.

센서 데이터 수집

먼저, IoT 디바이스에서 센서 데이터를 수집하는 과정을 알아보겠습니다. 이 예제에서는 Raspberry Pi와 온습도 센서(DHT11)를 사용합니다.

import Adafruit_DHT

DHT_SENSOR = Adafruit_DHT.DHT11
DHT_PIN = 4

def get_temperature_humidity():
    humidity, temperature = Adafruit_DHT.read_retry(DHT_SENSOR, DHT_PIN)
    
    if humidity is not None and temperature is not None:
        return temperature, humidity
    else:
        return None

위의 코드에서 Adafruit_DHT 라이브러리를 사용하여 DHT11 센서에서 온도와 습도를 읽어옵니다. DHT_SENSOR 변수는 사용할 센서를 지정하고, DHT_PIN 변수는 센서가 연결된 GPIO 핀 번호를 나타냅니다. get_temperature_humidity 함수는 센서에서 데이터를 읽어와 온도와 습도를 반환합니다.

웹 애플리케이션 연동

이제 IoT 디바이스에서 수집한 데이터를 웹 애플리케이션과 연동하여 사용자에게 제공할 수 있습니다. 이를 위해 Flask 웹 프레임워크를 사용하겠습니다.

from flask import Flask, jsonify

app = Flask(__name__)

@app.route('/api/sensor', methods=['GET'])
def get_sensor_data():
    data = get_temperature_humidity()
    
    if data is not None:
        temperature, humidity = data
        return jsonify({'temperature': temperature, 'humidity': humidity})
    else:
        return jsonify({'error': 'Failed to read sensor data'})

if __name__ == '__main__':
    app.run()

위의 코드에서 Flask 애플리케이션을 구성하고, ‘/api/sensor’ 경로에 GET 요청이 들어오면 get_sensor_data 함수가 호출됩니다. 이 함수는 get_temperature_humidity 함수를 통해 센서에서 데이터를 읽어와 JSON 형식으로 반환합니다.

결과 확인

이제 Raspberry Pi에 웹 애플리케이션을 실행시키고, 브라우저에서 ‘http://:5000/api/sensor' 경로에 접속하면 센서 데이터가 JSON 형식으로 표시됩니다.

{
    "temperature": 25,
    "humidity": 50
}

이처럼 Python을 사용하여 IoT 디바이스와 웹 애플리케이션을 연동할 수 있습니다. 이를 통해 센서 데이터를 효과적으로 활용하고 모니터링하는 등 다양한 기능을 구현할 수 있습니다.