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단계: 카카오 개발자 사이트 가입
- https://developers.kakao.com 접속
- 애플리케이션 등록 후 REST API 키 복사
2단계: 애플리케이션 설정
- 플랫폼: Web 등록, 사이트 도메인 입력
- 카카오톡 로그인 활성화
- Redirect URI 등록:
https://www.example.com/oauth
- 동의항목 설정: 카카오톡 메시지 전송 항목을 선택 동의로 설정
3단계: Access Token 발급
curl
명령어 사용
방법 1: 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