2 분 소요

오늘 키워드

  1. 대략적인 flow
  2. MQTT protocol
  3. free RTOS
  4. ESPRESSIF(아두이노 코딩 툴)
  5. eslint

0. 대략적인 개요

전력량 측정을 하여 모인 데이터를 보여주기

  1. 서버 (전략량 측정 데이터를 여기서 받음)
    1. MQTT 브로커
    2. 라즈베리 파이
    3. docker 활용
      • flask, vue.js, mysql 를 올려야함
  2. 전력량 측정
    1. 아두이노를 활용한 통신
      • esp32, rtos protocol을 활용하여, wifi module로 통신
WiFi 네트워크 전력량 측정 모듈 아두이노 ESP32 (WiFi 모듈) RTOS 프로토콜 활용 서버 라즈베리 파이 Docker 컨테이너 MQTT 브로커 ✨ AI/LLM 모듈 Flask (백엔드) Vue.js (프론트엔드) MySQL (데이터베이스) WiFi 통신 MQTT 발행 MQTT 구독 기타 서버 통신 ✨ LLM 요청/응답 DB 접근 데이터 쿼리 API 통신 사용자 접근

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/

  1. 정의
    • MQTT(Message Queuing Telemetry Transport)는 TCP/IP 위에서 동작하는 경량형 Publish/Subscribe 메시징 프로토콜이다.
    • IoT 기기의 전력량 측정값과 같은 센서 데이터 전송에 최적화된 프로토콜이다.
  2. 핵심 구성 요소
    • Broker: 라즈베리파이에서 구동될 MQTT 브로커로, 전력량 데이터의 중개자 역할
    • Publisher: ESP32가 전력량 측정값을 발행하는 역할 수행
    • Subscriber: Flask 서버가 전력량 데이터를 구독하여 DB에 저장
  3. 주요 개념
    • Topic: power/device1/consumption와 같이 전력량 측정 데이터를 구분하는 계층적 문자열
    • QoS(Quality of Service)
      • 0: 최대 1회 전송(실시간 전력량 모니터링용)
      • 1: 최소 1회 전송(일반 전력량 데이터용)
      • 2: 정확히 1회 전송(중요 전력량 통계용)
    • Retained Message: 마지막 전력량 측정값을 저장해 신규 연결 시 즉시 제공
    • Last Will & Testament(LWT): ESP32 장치 오프라인 시 자동 알림
  4. 통신 흐름
    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

  1. 정의
    • RTOS는 실시간 처리가 필요한 시스템을 위한 운영체제입니다.
    • 정해진 시간 내에 작업 완료를 보장하는 결정적(Deterministic) 운영체제입니다.
    • ESP32에서는 FreeRTOS를 사용하여 멀티태스킹을 구현합니다.
  2. 주요 특징
    • 태스크 관리: 우선순위 기반 스케줄링
    • 실시간성: 예측 가능한 응답 시간 보장
    • 선점형 스케줄링: 높은 우선순위 태스크가 낮은 우선순위 태스크를 중단 가능
    • 리소스 관리: 세마포어, 뮤텍스 등을 통한 동기화
  3. ESP32에서의 RTOS 활용
    • 전력량 측정 태스크: 주기적인 센서 데이터 수집
    • MQTT 통신 태스크: 측정된 데이터의 서버 전송
    • LED 상태 표시 태스크: 시스템 상태 표시
    • 와이파이 연결 관리 태스크: 네트워크 연결 유지
  4. 태스크 우선순위 설계 1) 긴급 처리 태스크 (우선순위: 높음)
    • 과전류 감지 및 대응
    • 시스템 오류 처리 2) 일반 처리 태스크 (우선순위: 중간)
    • 전력량 측정 및 MQTT 전송
    • 와이파이 연결 상태 확인 3) 백그라운드 태스크 (우선순위: 낮음)
    • LED 상태 표시
    • 시스템 로깅

3. ESPRESSIF(아두이노 코딩 툴)

ESPRESSIF 개요

  1. ESP32 개발 환경
    • Arduino IDE: 초보자용 쉬운 개발 환경
    • ESP-IDF: ESPRESSIF의 공식 개발 프레임워크
    • PlatformIO: VSCode 기반 전문가용 개발 환경
  2. 주요 기능
    • WiFi/Bluetooth 내장
    • 듀얼 코어 프로세서
    • GPIO, ADC, DAC 등 다양한 인터페이스
    • FreeRTOS 지원
  3. 개발 특징
    • C/C++ 기반 프로그래밍
    • 풍부한 라이브러리 생태계
    • OTA(Over The Air) 업데이트 지원
    • 저전력 모드 지원

4. Vue js 프로젝트

관련링크

  • https://vuejs.org/guide/introduction

내가 지금까지 경험했던 vue.js 는 2버전이 마지막 이제 3버전으로 업데이트 됨

vue.js는 강제로 eslint를 시킨다.

오늘의 회고

오늘 공부하면서 느낀 점이나 배운 점, 어려웠던 점을 기록합니다.