[실습] 웹에서 라즈베리파이 온습도 센서 모니터링
필기자
2025-05-18 19:22
1,229
0
본문
웹에서 라즈베리파이 온습도 센서 모니터링
목적
목차
1. 파이썬 쓰레드

2. 온습도 센서 모니터링 프론트엔드 및 서버프로그램 개발

[응용 문제: 온도 센서와 RGB LED 자동 제어 실습]
목적
- 파이썬 쓰레드에 대해 이해하고 이론을 정립한다.
- 내 PC에서 웹 프라우져(크롬)으로 라즈베리파이 온습도 센서를 모니터링한다.
목차
1. 파이썬 쓰레드
2. 온습도 센서 모니터링 프론트엔드 및 서버프로그램 개발
2. 온습도 센서 모니터링 프론트엔드 및 서버프로그램 개발
1. 파이썬 쓰레드
- 파이썬 쓰레드 개요
- 하나의 프로그램 안에서 동시에 여러 작업을 수행할 수 있도록 해주는 실행 단위
- 프로그램은 한 번에 하나의 작업만 수행하지만, 쓰레드 사용시 백그라운드에서 센서 값을 병렬로 읽으면서 웹 요청을 처리할 수 있음
- threading 모듈을 사용하여 구현

- 파이썬에서 멀티 쓰레드
- Processus: 하나의 프로세스(프로그램 실행 단위)를 의미함
- 하나의 프로세스 안에 여러 Thread(쓰레드)가 존재
- 쓰레드들은 공통된 전역 변수 공간(Variable globale)을 공유함
- 각 쓰레드는 자신만의 지역 변수(Variable locale)와 코드(Code) 영역을 가짐
- GIL(Global Interpreter Lock) 개념 : 병렬성 제한
- 전역 변수 공유 방식으로 구조 단순화 이해가 쉬움
- GIL
항목 | 내용 |
---|---|
풀네임 | Global Interpreter Lock |
개념 | 파이썬 인터프리터가 한 번에 하나의 쓰레드만 실행하도록 강제하는 전역 락 |
이유 | 메모리 안정성 보장을 위해 참조 카운트 충돌 방지 |
실행 방식 | 진짜 병렬 실행이 아닌, 매우 빠른 시분할(Scheduling)로 쓰레드 전환 |
적용 대상 | CPython (기본 파이썬 구현체)만 해당. Jython, IronPython 등은 GIL 없음 |
- threading vs multiprocessing
항목 | threading | multiprocessing |
---|---|---|
실행 단위 | 하나의 프로세스 내부 쓰레드 | 별도의 독립된 프로세스 |
메모리 | 공유 메모리 공간 사용 | 프로세스마다 메모리 분리 |
GIL 영향 | 있음 (병렬 X) | 없음 (CPU 병렬 O) |
병렬성 | 시분할 유사 병렬 (I/O에 강함) | 진짜 병렬 처리 (CPU 연산에 강함) |
자원 공유 | 전역 변수, 큐 등으로 간단 | Queue, Pipe, Manager 등 명시적 공유 필요 |
속도 | 경량, 빠른 전환 | 무겁고 프로세스 생성 비용 큼 |
안정성 | 하나가 죽으면 전체 영향 | 프로세스 분리로 안정성 높음 |
적합한 작업 | 센서, 네트워크, 이벤트 기반 등 I/O 중심 | 영상 처리, 연산, 대용량 데이터 병렬 연산 등 CPU 중심 |
- threading vs multiprocessing : 데이터 공유 측면 비교
항목 | threading | multiprocessing |
---|---|---|
메모리 공간 | 공유됨 (전역 변수 참조 가능) | 완전히 분리됨 (전역 변수 공유 안 됨) |
공유 방식 | 전역 변수, 리스트, 딕셔너리 직접 사용 가능 | multiprocessing.Queue, Manager, Pipe 등 별도 공유 방식 필요 |
동기화 | Lock, Event등 간단 | Manager().dict(), Value, Array 등에 Lock 지정 필요 |
구현 난이도 | 상대적으로 단순 | 복잡하고 명시적 설계 필요 |
개발 속도 | 빠름 빠른 개발 + 센서 모니터링 + 웹 연동 |
느림 고성능 병렬 계산 + CPU 연산 최적화 |
- threading 모듈 주요 함수 및 메서드
함수/메서드 | 설명 |
---|---|
threading.Thread() | 새로운 쓰레드 객체를 생성 파라미터: target=함수, args=(인자,) |
start() | 쓰레드 실행 시작 (내부적으로 run() 호출) |
run() | 쓰레드가 실행할 함수 내용 (직접 호출 X, 오버라이드용) |
join() | 해당 쓰레드가 끝날 때까지 대기 |
is_alive() | 쓰레드가 실행 중인지 여부 반환 |
daemon = True | 데몬 쓰레드로 설정하면 메인 프로그램 종료 시 함께 종료됨 |
current_thread() | 현재 실행 중인 쓰레드 객체 반환 |
active_count() | 현재 실행 중인 쓰레드 수 반환 |
enumerate() | 모든 활성 쓰레드 리스트 반환 |
Lock() | 쓰레드 간 공유 자원 접근 시 동기화를 위한 락 객체 생성 |
- threading.Thread()
- 사용방식 : threading.Thread(group=None, target=None, name=None, args=(), kwargs=None, *, daemon=None)
인자명 | 자료형 | 설명 |
---|---|---|
group | None 또는 ThreadGroup | 현재는 사용되지 않으며 None으로 설정해야 함 |
target | callable | 스레드가 실행할 함수 |
name | str | 스레드 이름 (생략 시 자동 할당됨) |
args | tuple | target 함수에 전달할 인자 튜플 |
kwargs | dict | target 함수에 전달할 키워드 인자 딕셔너리 |
daemon | bool | True일 경우 데몬 스레드로 실행되어 메인 스레드 종료 시 함께 종료됨 |
- 파이썬 쓰레드 실습
- threading_test.py 생성

2. 온습도 센서 모니터링 프론트엔드 및 서버프로그램 개발
- apaceh2 home 폴더에 프론트프로그램 개발
- /var/www/html 폴더안에 index.html 파일 수정
- 라즈베리파이에 온습도 센서 배선


- DHT22 또는 DHT11 라이브러리 설치(기존 설치 안된 경우)
- iot 가상환경에 socket.io서버 프로그램 수정
- home/iot/iot_socket.py 파일 수정
- 온습도 센서 측정(쓰레드) & 온습도 센서 전송 메소드 추가
- 클라이언트 실행 화면

- 서버 실행화면

[응용 문제: 온도 센서와 RGB LED 자동 제어 실습]
- 온습도 센서로 온도를 측정한다.
- 파랑(B): GPIO 17, 빨강(R): GPIO 24 핀에 연결된 RGB LED를 제어한다.
- 웹에서 LED를 ON 해야 LED가 동작하도록 한다.
- LED가 ON 상태일 때만 다음 조건에 따라 자동 제어된다
- 온도가 27도 이상이면 빨간색 LED ON
- 온도가 27도 미만이면 파란색 LED ON
- 항상 주변 온도를 주기적으로 확인하여 이 동작을 반복한다.
댓글목록0