14주차 : 카카오톡으로 토양 센서값 전송하기 - dhryu60/SmartDevice_2025-1 GitHub Wiki

14주차 : 카카오톡으로 토양 센서값 전송하기

📌 학습 개요

  • 학습 목표: 카카오톡으로 토양 센서 값을 전송하는 방법을 학습한다.
  • 핵심 키워드: ESP32, IoT, 사물인터넷, 카카오톡 API, 토양 습도 센서
  • 준비물: ESP32, ESP32 확장 실드, 토양 습도 센서

1. 프로젝트 개요

  • 기존에 사용 중인 카카오톡을 이용하여 토양 센서값을 실시간으로 수신하는 IoT 프로젝트를 진행한다.
  • 토양 센서값을 일정 간격으로 측정하여 카카오톡 메시지로 전송한다.

2. 하드웨어 구성

회로 연결

구성 요소 핀 연결 정보
토양 습도 센서 S ESP32 D34
토양 습도 센서 V V (3.3V 또는 5V)
토양 습도 센서 G GND

3. 토양 센서 테스트 코드

const int soilSensorPin = 34;

void setup(){
  Serial.begin(115200);
}

void loop(){
  Serial.print("토양 습도 센서 값:");
  Serial.println(analogRead(soilSensorPin));
  delay(1000);
}
  • 센서값 해석 기준:

    • 0 ~ 1500 : 건조
    • 1500 ~ 2000 : 적정 습도
    • 2000 이상 : 물속

4. 카카오톡 API 설정

1단계: 카카오 개발자 사이트 가입

2단계: 애플리케이션 설정

  • 플랫폼: Web 등록, 사이트 도메인 입력
  • 카카오톡 로그인 활성화
  • Redirect URI 등록: https://www.example.com/oauth
  • 동의항목 설정: 카카오톡 메시지 전송 항목을 선택 동의로 설정

3단계: Access Token 발급

방법 1: curl 명령어 사용

curl -v -X POST "https://kauth.kakao.com/oauth/token" \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "grant_type=authorization_code" \
-d "client_id={REST_API_KEY}" \
--data-urlencode "redirect_uri={REDIRECT_URI}" \
-d "code={AUTHORIZATION_CODE}"

방법 2: Python 코드 사용

import requests

url = 'https://kauth.kakao.com/oauth/token'
data = {
    'grant_type': 'authorization_code',
    'client_id': 'REST_API_KEY',
    'redirect_uri': 'https://www.example.com/oauth',
    'code': 'AUTHORIZATION_CODE'
}

response = requests.post(url, data=data)
tokens = response.json()
print(tokens)

토큰 정보

토큰 종류 설명 기본 만료 시간
Access Token API 호출 권한 최대 6시간 (REST API 기준)
Refresh Token Access Token 갱신용 최대 2개월
ID Token 인증 정보 Access Token과 동일

5. 프로젝트 코드

Access Token 검사 및 메시지 전송 루프

void loop() {
  if (timeout++ > MsgSendInterval) {
    if (isAccessTokenExpired()) {
      if (!update_access_token()) {
        Serial.println("Access token update failed");
      }
    }

    sensorValue = analogRead(sensorPin);
    send_message();
    timeout = 0;
  }
  delay(1000);
}

메시지 전송 함수

void send_message() {
  HTTPClient http;
  String url = "https://kapi.kakao.com/v2/api/talk/memo/default/send";

  if (!http.begin(url)) {
    Serial.println("HTTP 시작 실패");
    return;
  }

  http.addHeader("Authorization", "Bearer " + access_token);
  http.addHeader("Content-Type", "application/x-www-form-urlencoded");

  String data = String("template_object={") +
                "\"object_type\": \"text\"," +
                "\"text\": \"토양 센서 값: " + String(sensorValue) + "\"," +
                "\"link\": {}}" ;

  int http_code = http.POST(data);
  http.end();
}

6. 실행 결과

  • 센서에서 측정된 토양 습도 값이 일정 시간 간격으로 카카오톡 메시지로 전송됨을 확인한다.

7. PPT 및 코드

챕터11.카카오톡으로 토양센서값 전송하기_부품그림추가.pdf

챕터11.카카오톡으로 토양센서값 전송하기.zip

image