2025-06-20-전자전시회 공모전 준비
오늘 키워드
- 대략적인 flow
- MQTT protocol
- free RTOS
- ESPRESSIF(아두이노 코딩 툴)
- eslint
0. 대략적인 개요
전력량 측정을 하여 모인 데이터를 보여주기
- 서버 (전략량 측정 데이터를 여기서 받음)
- MQTT 브로커
- 라즈베리 파이
- docker 활용
- flask, vue.js, mysql 를 올려야함
- 전력량 측정
- 아두이노를 활용한 통신
- esp32, rtos protocol을 활용하여, wifi module로 통신
- 아두이노를 활용한 통신
1. MQTT protocol
MQTT 개념 정리
관련링크 - https://aws.amazon.com/ko/what-is/mqtt/ - https://mosquitto.org/ (오픈소스 MQTT 브로커) - https://www.emqx.io/ (엔터프라이즈급 MQTT 브로커) - https://randomnerdtutorials.com/esp32-mqtt-publish-subscribe-arduino-ide/
- 정의
- MQTT(Message Queuing Telemetry Transport)는 TCP/IP 위에서 동작하는 경량형 Publish/Subscribe 메시징 프로토콜이다.
- IoT 기기의 전력량 측정값과 같은 센서 데이터 전송에 최적화된 프로토콜이다.
- 핵심 구성 요소
- Broker: 라즈베리파이에서 구동될 MQTT 브로커로, 전력량 데이터의 중개자 역할
- Publisher: ESP32가 전력량 측정값을 발행하는 역할 수행
- Subscriber: Flask 서버가 전력량 데이터를 구독하여 DB에 저장
- 주요 개념
- Topic:
power/device1/consumption와 같이 전력량 측정 데이터를 구분하는 계층적 문자열 - QoS(Quality of Service)
• 0: 최대 1회 전송(실시간 전력량 모니터링용)
• 1: 최소 1회 전송(일반 전력량 데이터용)
• 2: 정확히 1회 전송(중요 전력량 통계용) - Retained Message: 마지막 전력량 측정값을 저장해 신규 연결 시 즉시 제공
- Last Will & Testament(LWT): ESP32 장치 오프라인 시 자동 알림
- Topic:
- 통신 흐름
1) ESP32와 Flask 서버가 라즈베리파이의 MQTT 브로커에 연결
2) ESP32가 주기적으로 전력량 측정값을 발행
3) 브로커가 Flask 서버에 데이터 전달
4) QoS 설정에 따라 데이터 전송 신뢰성 보장
2. RTOS (Real-Time Operating System)
RTOS 개념 정리
관련링크 - https://www.freertos.org/ - https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-reference/system/freertos.html
- 정의
- RTOS는 실시간 처리가 필요한 시스템을 위한 운영체제입니다.
- 정해진 시간 내에 작업 완료를 보장하는 결정적(Deterministic) 운영체제입니다.
- ESP32에서는 FreeRTOS를 사용하여 멀티태스킹을 구현합니다.
- 주요 특징
- 태스크 관리: 우선순위 기반 스케줄링
- 실시간성: 예측 가능한 응답 시간 보장
- 선점형 스케줄링: 높은 우선순위 태스크가 낮은 우선순위 태스크를 중단 가능
- 리소스 관리: 세마포어, 뮤텍스 등을 통한 동기화
- ESP32에서의 RTOS 활용
- 전력량 측정 태스크: 주기적인 센서 데이터 수집
- MQTT 통신 태스크: 측정된 데이터의 서버 전송
- LED 상태 표시 태스크: 시스템 상태 표시
- 와이파이 연결 관리 태스크: 네트워크 연결 유지
- 태스크 우선순위 설계
1) 긴급 처리 태스크 (우선순위: 높음)
- 과전류 감지 및 대응
- 시스템 오류 처리 2) 일반 처리 태스크 (우선순위: 중간)
- 전력량 측정 및 MQTT 전송
- 와이파이 연결 상태 확인 3) 백그라운드 태스크 (우선순위: 낮음)
- LED 상태 표시
- 시스템 로깅
3. ESPRESSIF(아두이노 코딩 툴)
ESPRESSIF 개요
- ESP32 개발 환경
- Arduino IDE: 초보자용 쉬운 개발 환경
- ESP-IDF: ESPRESSIF의 공식 개발 프레임워크
- PlatformIO: VSCode 기반 전문가용 개발 환경
- 주요 기능
- WiFi/Bluetooth 내장
- 듀얼 코어 프로세서
- GPIO, ADC, DAC 등 다양한 인터페이스
- FreeRTOS 지원
- 개발 특징
- C/C++ 기반 프로그래밍
- 풍부한 라이브러리 생태계
- OTA(Over The Air) 업데이트 지원
- 저전력 모드 지원
4. Vue js 프로젝트
관련링크
- https://vuejs.org/guide/introduction
내가 지금까지 경험했던 vue.js 는 2버전이 마지막 이제 3버전으로 업데이트 됨
vue.js는 강제로 eslint를 시킨다.
오늘의 회고
오늘 공부하면서 느낀 점이나 배운 점, 어려웠던 점을 기록합니다.