memo6759 님의 블로그
2025-11-25(카메라 센서 - react MQTT) 본문
미리보기(프리뷰) 화면으로 테스트
libcamera-hello -t 5000
- 카메라 테스트용 명령어
- 5초 동안 프리뷰 화면을 보여줌 (-t 5000ms)
- 화면이 뜨는지만 확인할 때 사용
2) 정지사진 촬영 (구버전)
libcamera-jpeg -o test.jpg
- 사진 1장을 캡처해서 test.jpg로 저장
- 해상도 기본 설정으로 촬영됨
- libcamera 기반의 이전 세대 명령어
3) 정지사진 촬영 (신버전 = rpicam-jpeg)
rpicam-jpeg -o test.jpg
- 라즈베리파이 공식 최신 명령어
- 성능 최적화됨
- JPEG 사진 1장 촬영
4) 동영상 촬영
rpicam-vid -o video.h264 -t 3000
- video.h264라는 이름으로 동영상 저장
- -t 3000 → 3초 촬영
- H.264 포맷 (일반 플레이어에서 바로 재생 안될 수 있음)
➡ 변환하려면:
MP4Box -add video.h264 video.mp4
5) 고해상도 이미지 촬영
rpicam-jpeg -o test5.jpg --width 1920 --height 1080 --nopreview
- FHD(1920×1080) 해상도로 촬영
- --nopreview = 화면 미리보기 없이 촬영
- 터미널만 있을 때 유용함 (SSH 접속 시)
6) 파이카메라2(Python) 설치
sudo apt install python3-picamera2
- 파이썬으로 카메라를 제어하려면 꼭 설치해야 함
- 최신 Raspberry Pi OS에서는 기본 제공되는 경우도 있음
7) SSH 접속
ssh pi@raspberrypilhew
또는
ssh pi@192.168.xx.xx
- IP 또는 호스트이름으로 파이에 접속할 때 사용
언제 어떤 명령을 써야 하는가?
상황추천 명령어
| 카메라 테스트(미리보기) | libcamera-hello |
| 사진 촬영(기본) | rpicam-jpeg -o a.jpg |
| 고해상도 사진 촬영 | rpicam-jpeg --width --height |
| 동영상 촬영 | rpicam-vid -o video.h264 |
| SSH로 접속해서 촬영 | --nopreview 옵션 필수 |
| Python으로 촬영 | picamera2 사용 |

React 웹페이지 (ws:// 브라우저)
↕ WebSocket
Mosquitto Broker (9001=websocket / 1883=mqtt)
↕ MQTT
라즈베리파이 (Python, 센서, LED, 카메라)
2. Mosquitto 설정파일 작성 (가장 중요)
mosquitto.conf를 관리자 권한으로 열어서 맨 아래 작성
이렇게 두 개 포트가 반드시 있어야 함:

# Websocket for React
listener 9001
protocol websockets
# MQTT for Raspberry PI
listener 1883
protocol mqtt
3. Mosquitto 실행 명령어
mosquitto -c "C:\Program Files\mosquitto\mosquitto.conf"
실행되면 broker가 정상적으로 돌아가는 상태.
4. Subscribe 테스트
mosquitto_sub -t woo/home/web
React → Broker → Windows Sub 결과 잘 나옴
5. 라즈베리파이 Python 코드 흐름 정리
구조 다시 분석해보면:
MqttWorker 클래스 역할
함수역할
| __init__ | MQTT client 생성, 콜백 등록, LED/DHT 객체 생성 |
| on_connect | 브로커 연결되면 자동 실행 → 구독(subscribe) |
| on_message | 메시지 들어올 때 자동 실행 → LED 제어 |
| mtmqtt_connect() | 1883 포트로 연결 + loop_forever를 별도 스레드 실행 |
React에서 publish → Broker → Raspberry → LED 켜짐
라즈베리파이에서 LED 제어되는 부분
if command == "led_on":
self.led.led_on()
elif command == "led_off":
self.led.led_off()
6. React 코드 흐름 (웹소켓)
React는 WebSocket이므로 ws://, 포트 9001 사용
const BROKER_URL = "ws://192.168.14.62:9001";
const TOPIC_NAME = "woo/home/web";
React → MQTT Publish 흐름
버튼 클릭 시 메시지 전송:
client.publish(TOPIC_NAME, "led_on");
또는 state 버전:
client.publish(TOPIC_NAME, ledstate);
→ 브로커 → 라즈베리파이 → on_message 호출
- Mosquitto에서 1883(MQTT), 9001(WebSocket) 두 개 포트 열어 둠
- React는 ws://IP주소:9001 으로 연결
- 라즈베리파이는 MQTT 1883으로 연결
- React에서 publish → 브로커 → Raspberry Pi가 subscribe
- Raspberry Pi가 메시지를 받아 LED, 카메라, 센서 제어
'HDC 학습일지' 카테고리의 다른 글
| 전체 백엔드 흐름 (0) | 2025.12.02 |
|---|---|
| 2025-12-02(웹 mqtt) (1) | 2025.12.02 |
| 2025-11-24(리액트 state, props) (0) | 2025.11.27 |
| 2025-11-27(Open CV) - 현업자 특강 (0) | 2025.11.27 |
| 2025-11-26(컴퓨터 비전)- 현업자 특강 (0) | 2025.11.27 |