티스토리 뷰

1. 시스템 구동 아키텍처 개요

BiliMon265V12 펌웨어는 ESP32의 듀얼코어 성능을 극대화하여 고밀도 센서 스캔과 네트워크 통신 간의 병목 현상을 해결한 비동기 멀티태스킹 컨트롤 시스템입니다.

1.1. 멀티코어 듀얼 스레드 구조

코어 번호 태스크명 주요 담당 기능 작동 주기 우선순위
Core 0 NetworkTask Wi-Fi 복구, DB 데이터 업로드, 원격 폴링 명령 처리, OTA 라이팅 10ms ~ 1min 1
Core 1 InstrumentTask ADS1219 ADC 4개 주소 스캔, 전압/전류 Peak 탐지, 배터리 테스터 구동 10ms 고정 1

와이파이 신호 불량이나 대체 서버 스위칭에 따른 딜레이가 발생하더라도 Core 1에서 작동하는 센서 스캔 루프(10ms)는 단 0.1ms의 멈춤 없이 무중단으로 구동됩니다.

[크리티컬 세이프가드] OTA(무선 업데이트)가 진행되는 동안에는 플래시 메모리 라이팅 중 하드웨어 비동기 인터럽트 충돌을 막기 위해 Core 1의 InstrumentTask를 vTaskSuspend()로 강제 중단(Safeguard) 처리하는 안전 메커니즘이 활성화됩니다.

 

2. 핵심 소스코드 구조 및 역할

개발자가 코드를 수정하거나 새로운 기능을 삽입하기 위해 알아야 할 파일 목록과 역할입니다.

파일명 역할 및 핵심 메커니즘
BiliMon265V12.ino 태스크 큐 생성, Core 배정 및 BLE 연동 처리 부문.
BConstants.h THISDEVICEID(기기 고유 식별자), 서버 접속 정보 및 기본 설정 상수 저장 사전.
BiliMonConstants.h 이벤트 판별을 위한 물리 임계 수치 및 전송 주기 정보.
ConfigManager ESP32 내부 비휘발성 영역(NVS)을 제어하여 센서 채널 보정값 및 동적 서버 URL 저장.
NetworkManager NTP 동기화, HMAC SHA-256 서명 빌드, 이중 서버 Failover 로직 탑재.
B_ADS1219 I2C 통신, 센서의 핫플러깅 및 1초 이내 초고속 재연결 추적 엔진.

 

3. 서버 장애 복구 (Failover) 상태 머신

네트워크 업로드 실패 횟수가 연속 3회 갱신되면, 서버 백본 장애로 간주하여 다음과 같은 상태 전이가 일어납니다.

1) active 서버 주소를 대체 서버(ALT_SERVER_URL)로 즉시 스위칭 및 NVS 저장.

2) justSwitched 플래그를 true로 설정한 후 새 서버로 즉각 1회 전송 테스트 실행.

3) 테스트 전송 성공 시 -> justSwitched = false로 복귀 및 안정 통신 속행.

4) 테스트 전송 실패 시 -> 네트워크 먹통 상태로 판단하여 큐 내부의 데이터를 즉각 버림(Discard) 처리한 후, 원래 통신하려던 반대편 서버로 주소를 강제 회귀(Revert)하고 justSwitched = true 상태 유지.

 

4. 신규 기능 확장 개발 가이드 (코드 추가 예시)

새로운 센서 이벤트 타입을 설계하고, 이를 Telegram과 Discord로 송출하는 기능을 추가하는 방법입니다.

1단계: BiliMonConstants.h 에 신규 이벤트 코드 상수를 정의합니다.

   #define NEW_EVENT_DETECTED 200

2단계: B_ADS1219.cpp 의 MakeUploadDataInfo() 및 UpdateAddressData() 에서 물리 수치를 감지하여 이벤트를 발행하는 로직을 삽입합니다.

3단계: MakeTelegramMessage() 함수에 기기 식별자와 함께 신규 알림 포맷을 빌드하는 스위치 케이스를 삽입합니다.

반응형
반응형
250x250
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2026/06   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함