본문 바로가기
  • Masacorgi 's Dev Bloggg

펌웨어6

[펌웨어] 시리얼데이터와 MQTT 이전까지는 MCU가 보내는 시리얼 데이터를 Python으로 읽고 저장하는 데까지 해봤다.이제는 그 데이터를 MQTT 브로커로 퍼블리시하여 클라우드로 전송해보자.즉, 우리가 만드는 건 소형 IoT 게이트웨이다.1. MQTT란?MQTT (Message Queuing Telemetry Transport) 는경량 메시지 전송 프로토콜로, IoT에 최적화되어 있다.Publish/Subscribe 방식으로 센서 데이터를 전송함2. 사전 준비Python 3.x라이브러리 설치pip install paho-mqtt pyserial3. 전체 흐름MCU → 시리얼 데이터 → Python 수신 → MQTT 브로커로 퍼블리시 → 서버/클라우드 구독4. 예제 코드: 시리얼 데이터 → MQTT 전송import serialimpor.. 2025. 6. 1.
[펌웨어] 시리얼 데이터 수신하고 로깅하기(Python) 이제까지 배운 UART 통신 구조를 PC 측에서 직접 수신하고 파일로 저장하는 실전 단계를 알아보자.이제 진짜 디버깅과 데이터 수집이 뭔지 알아보는 단계이다.지금까지 MCU에서 UART로 데이터를 보내는 구조를 익혔다.이번엔 Python에서 그 데이터를 직접 수신하고, 로그로 저장해보자.이번 아티클을 통해 MCU가 보낸 시리얼 데이터를 Python으로 받아서 직접 확인하고 로그로 저장하는 과정까지 해낼 수 있게 될 것이다.1. 필요한 준비물Python 3.xpyserial 패키지pip install pyserial2. 기본 코드 예제: 시리얼 읽기import serial# 시리얼 포트 설정ser = serial.Serial( port='COM3', # 또는 '/dev/ttyUSB0' (L.. 2025. 6. 1.
[펌웨어] 시리얼 명령 처리 흐름이란? 이번엔 펌웨어 내부에서 시리얼로 들어온 명령을 어떻게 처리하는지,즉 “명령어 → 파싱 → 실행 → 응답”이라는 전체 흐름을 코드 중심으로 이해보기로 한다.UART로 MCU에 명령어를 보내면, MCU는 이를 파싱하고 특정 작업을 실행한 후 응답을 보낸다.이 흐름은 센서 설정, 장치 제어, 상태 요청 등 다양한 펌웨어 기능의 핵심이다.1. 기본 구조 요약1. UART 수신2. 명령 파싱 (프레임 확인, 명령어 확인)3. 명령 실행 (센서 읽기, 출력 제어 등)4. 응답 전송2. 명령 프레임 예시명령어 예제 (7바이트):0xAA 0x55 0x10 0x00 0x00 0x00 0x10필드설명0xAA 0x55헤더0x10명령어 코드 (예: 센서 읽기)0x00~0x00데이터 없음0x10체크섬 (명령어의 XOR.. 2025. 6. 1.
[펌웨어] 구조체와 포인터는 왜 중요한가 펌웨어에서 구조체와 포인터는 센서데이터 파싱, 시리얼 통신, 메모리 효율화 등 핵심 기능에 가장 많이 쓰이는 도구이다.펌웨어는 센서 데이터를 바이트 단위로 주고받는다. 이 데이터를 구조체로 정리하고, 포인터로 메모리에 직접 접근하면 코드 가독성 + 속도 둘 다 잡을 수 있다.1.1 구조체란?구조체(struct)는 C언어에서 관련 있는 데이터를 하나로 묶은 사용자 정의 타입이다.1.1.1 예시: 온습도 센서 데이터 구조typedef struct { uint8_t temperature; // 섭씨 온도 uint8_t humidity; // 상대 습도} SensorData;→ 이 구조체로 SensorData라는 이름으로 온습도 값을 모아 다룰 수 있다.(편리함)1.2 포인터란?C언어의 포인터는 메.. 2025. 5. 27.
[펌웨어] 펌웨어 구조 : Main Loop, 인터럽트 1. 펌웨어 구조란?펌웨어는 MCU 위에서 동작하며, 센서 데이터를 읽고 처리하고 외부로 전송하는 역할을 한다.이 구조를 이해하면 펌웨어 흐름 분석과 수정에 한 걸음 가까워진다.1.1 main loop 중심 구조펌웨어는 대부분 while(1) 구조의 메인 루프 안에서 반복적으로 특정 작업을 수행한다.1.1.1 Arduino 예제// LED를 0.5초 간격으로 깜빡이게 하는 기본 구조void setup() { pinMode(13, OUTPUT); // 핀 13번을 출력으로 설정 (내장 LED)}void loop() { digitalWrite(13, HIGH); // LED ON delay(500); // 0.5초 대기 digitalWrite(13, LOW); // LED O.. 2025. 5. 27.
[스크랩] 펌웨어 개발 방법 https://vuzwa.tistory.com/entry/%ED%98%84%EC%A7%81%EC%9E%90%EA%B0%80-%EC%95%8C%EB%A0%A4%EC%A3%BC%EB%8A%94-%ED%8E%8C%EC%9B%A8%EC%96%B4-%EA%B0%9C%EB%B0%9C-%EC%8B%9C%EC%9E%91%ED%95%98%EA%B8%B0-%ED%8E%8C%EC%9B%A8%EC%96%B4-%EA%B0%9C%EB%B0%9C-%EB%B0%A9%EB%B2%95-MCU%EC%97%90%EC%84%9C-%ED%8E%8C%EC%9B%A8%EC%96%B4-%EA%B0%9C%EB%B0%9C%ED%95%98%EA%B8%B0 현직자가 알려주는 펌웨어(임베디드) 개발 시작하기, 펌웨어 개발 방법, MCU에서 펌웨어 개발하기(.. 2025. 3. 18.