A-FA Telemetry System은 Node.js (Express + Socket.IO) 와 Nginx 기반으로 구축된 원격 계측(텔레메트리) 통합 플랫폼입니다.
실시간 데이터 수집, 로그 기록 및 리뷰 기능을 제공하여 연구/테스트 환경에서 효율적인 계측 및 분석을 지원합니다.
🔗 사이트 바로가기 -> https://afa2025.ddns.net
- ESP32, ECU 등에서 전송한 데이터를 Node.js 서버가 실시간으로 수신합니다.
- Socket.IO를 통해 클라이언트에 데이터를 중계하며, 로그 파일로 기록할 수 있습니다.
- “로그 기록 시작” 버튼을 통해 지정한 파일명으로
separated_logs/폴더에 로그를 저장합니다. - “로그 기록 정지” 버튼으로 로그 기록을 중지합니다.
- 리뷰 페이지에서는 업로드된 로그 파일 목록을 불러와, 각 줄의 JSON 데이터를 파싱하여 그래프, 표, 지도 등으로 시각화합니다.
- CSV 파일 다운로드 기능을 제공합니다.
- 시스템 설계에 대한 디버깅시간을 획기적으로 줄이고자 가상의 CAN 데이터를 전송해 주는 시뮬레이터 시스템을 설계하였습니다.
- 프로그래밍 언어는 C++를 사용하였으며, 아두이노 IDE를 사용하여 코드를 구현하였습니다.
- 이 시스템을 통해, 실제 차량에 장착되는 센서 데이터를 임의의 코드 기반 시뮬레이터를 통해 생성하고 STM32F4가 수신하도록 하여, 수신 및 처리 로직을 테스트할 수 있습니다.
- 매 프레임을 JPEG(quality=30)로 인코딩 후 WebSocket 서버로 전송합니다.
- 녹화 제어의 경우, 브라우저에서 보낸 녹화 시작/정지 명령을 받아 로컬 AVI로 저장 후, HTTP POST로 https://afa2025.ddns.net/api/record/upload_video 에 업로드합니다.
- WebSocket 서버는 TLS 암호화 처리와 인증 시스템을 통해 stream 서비스 보안을 강화했으며, 동시 퍼블리셔 제한으로 보안을 한층 더 깊게 설계하였습니다.
- 파일 저장 후 처리의 경우, 서버 내부 스토리지에 보관하도록 설계하여 브라우저에 문제가 생기더라도 서버를 통해 주행 영상을 확보할 수 있습니다.
- 디스플레이의 경우 NX8048P050_011R 모델을 사용하였으며, 드라이버가 장갑을 착용하고 있기 때문에 저항식 터치패널이 탑재된 모델을 선정했습니다.
- 디스플레이 사용하는 데이터 소스는 STM32F4를 통해 전송된 CAN 데이터를 Raspberry Pi 5 내부에서 공유하도록 설계하였습니다.
- 서버와 디스플레이에 동일한 데이터를 동시에 전송해야 하므로, STM32F4가 데이터를 받는 즉시 서버용 버퍼와 디스플레이용 버퍼로 나누어 복사된 두 개의 데이터를 독립적으로 활용할 수 있도록 설계하였습니다.
-
디바이스 (예: ESP32, ECU 등)는 아래 URL을 통해 소켓 연결을 수행합니다: wss://afa2025.ddns.net/socket.io/?channel=afa&key=1234&device=true
-
디바이스는
tlog이벤트로 데이터를 전송하며, 서버는 이를 실시간으로 클라이언트에 중계하고 로그 파일로 기록합니다.
- 브라우저에서
https://afa2025.ddns.net/live.html에 접속하여 실시간 텔레메트리 데이터를 확인합니다. - 페이지 내 “로그 기록 시작” 및 “로그 기록 정지” 버튼을 통해 별도의 로그 파일 기록을 제어할 수 있습니다.
https://afa2025.ddns.net/review/페이지에 접속하면, 서버에서/api/logfiles엔드포인트를 통해 저장된 로그 파일 목록이 불러와집니다.- 사용자가 로그 파일을 선택한 후 “불러오기” 버튼을 누르면, 파일의 각 줄(JSON 형식)을 파싱하여 그래프, 표, 지도 등으로 데이터를 시각화합니다.
- 또한, JSON 및 CSV 형식으로 로그 데이터를 다운로드할 수 있는 기능이 제공됩니다.






