Notice
Recent Posts
Recent Comments
Link
«   2026/04   »
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
Archives
Today
Total
관리 메뉴

memo6759 님의 블로그

2025-11-25(카메라 센서 - react MQTT) 본문

HDC 학습일지

2025-11-25(카메라 센서 - react MQTT)

heewon09 2025. 12. 2. 15:47

미리보기(프리뷰) 화면으로 테스트

 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