아두이노

아두이노와 앱의 양방향 통신 — 설정값을 앱에서 전송하고, 센서로 조건 판단하기

게임교수 2025. 4. 18. 08:08
반응형

🔁 아두이노와 앱의 양방향 통신 — 설정값을 앱에서 전송하고, 센서로 조건 판단하기

이번 실습에서는 스마트폰 앱에서 사용자가 입력한 **임계 온도값**을 아두이노로 전송DHT11 센서로 측정된 온도와 비교하여 자동 제어하는 구조를 구성합니다.

이것이 바로 **IoT의 핵심 구조** 중 하나인 양방향 통신입니다. 센서 데이터를 보는 것뿐만 아니라, 사용자 입력을 받아 **제어 기준을 실시간으로 반영**하는 것이죠.

🧰 준비물

  • 아두이노 UNO 또는 Nano
  • DHT11 온습도 센서
  • HC-06 블루투스 모듈
  • 앱 인벤터로 제작한 앱
  • LED (또는 부저)

🔌 연결 구성

  • DHT11 DATA → D2
  • HC-06 TX → RX, RX → TX
  • LED → D8 (경고 출력용)

💻 아두이노 코드: 앱에서 기준 온도 입력 → 자동 판단

#include <DHT.h>

#define DHTPIN 2
#define DHTTYPE DHT11
#define LEDPIN 8

DHT dht(DHTPIN, DHTTYPE);
String input = "";
float threshold = 30.0;

void setup() {
  Serial.begin(9600);
  dht.begin();
  pinMode(LEDPIN, OUTPUT);
}

void loop() {
  if (Serial.available()) {
    char c = Serial.read();
    if (c == '\n') {
      threshold = input.toFloat();
      Serial.print("기준 온도 변경: ");
      Serial.println(threshold);
      input = "";
    } else {
      input += c;
    }
  }

  float temp = dht.readTemperature();
  if (!isnan(temp)) {
    Serial.print("현재온도: ");
    Serial.println(temp);

    if (temp >= threshold) {
      digitalWrite(LEDPIN, HIGH);
    } else {
      digitalWrite(LEDPIN, LOW);
    }
  }

  delay(2000);
}

📱 앱 구성: 사용자 입력값 전송

  • TextBox + Button: 숫자 입력 후 "\n" 붙여 전송
  • 예: “31\n” → 아두이노가 기준 온도 31도로 변경
  • BluetoothClient.SendText 사용

💡 구조 흐름

  1. 앱에서 임계값(예: 30.5)을 입력하고 전송
  2. 아두이노가 문자열을 받아 float으로 파싱
  3. DHT11 센서값과 비교 → 조건 만족 시 LED ON

✅ 실습 확인 포인트

  • 앱에서 "28" 입력 → 기준온도 28도 설정
  • DHT11 값이 28도 이상 → LED 켜짐
  • 기준값 바꾸면 바로 반영됨 → 실시간 반응 확인!

📚 마무리

이번 편에서는 아두이노와 스마트폰이 단방향이 아닌 양방향 통신 구조를 갖춘 IoT 시스템을 구현해봤습니다.

이 구조를 활용하면 사용자가 앱에서 직접 제어값을 입력하고, 센서 데이터를 실시간으로 판단해 제어하는 똑똑한 환경 시스템을 만들 수 있습니다.

다음 편에서는 이 데이터를 ESP8266이나 SD 카드에 저장웹서버 연동

반응형