동영상 링크
0.개요
이 프로젝트는 라즈베리 파이의 cpu온도를 측정하고, 이를 출력할 수 있는 다양한 방법들을 소개해보고자합니다. 일반적으로 라즈베리파이가 데스크탑, 노트북에 비해 저전력을 사용하지만 보통의 컴퓨터와 마찬가지로 과다한 작업을 하게될 경우 발열이 발생합니다. 모든 전자기기가 그렇듯 발열이 과도하게 발생하면(평균 65~70'C) 성능저하 현상이 발생하며 더 나아가 프로세스가 멈출 수도 있습니다. 아래의 방법들을 통해 cpu 과다 발열을 효과적으로 예방할 수 있습니다.
1. 간단한 라즈베리 파이 CPU 온도측정 방법
- vcgencmd를 사용 (Video Core Generate Command )
터미널 창에서 vcgencmd measure_temp를 입력한다.
- 사실 위 명령어는 라즈베리 파이의 GPU온도를 표시해주는 명령어지만 일반적으로 라즈베리 파이의 CPU와 GPU 온도는 약 1'C 정도밖에 차이가 안나기 때문에 GPU 온도로 CPU온도를 충분히 예측할 수 있다.
- thermal node 읽기
cat /sys/class/thermal/thermal_zone0/temp을 입력한다. 라즈베리 파이 커널의 thermal node에 자동적으로 CPU온도가 기록되는데 이 값을 불러와서 온도를 알 수 있다.
2. 파이썬과 그래프를 이용한 cpu 온도 변화 관찰
프로그램 설치
xrdp: 라즈베리파이 원격 제어를 통한 GUI환경
- sudo apt-get install xrdp
matplotlib: 파이썬 그래프함수 제공
- sudo apt-get install python3-matplotlib
프로그램 실행
-
cpu_temp.csv파일을 생성하여 측정 온도값을 이 파일에 지속적으로 저장시킨다.
-
온도가 65'C를 넘어가면 더 이상 저장하지 않고 종료시킨다.
csv파일이란?
- comma separated version,즉 컴마(,)로 구분된 파일입니다.
- 각 레코드 간에는 줄바꿈으로 구분됩니다. 참조 cpu_temp.csv
- csv파일은 다른 파일들에 비해서 범용성이 뛰어나서 일반 text파일, excel파일등으로 쉽게 읽어올 수 있으며, php를 이용하여 웹에서의 출력도 가능하다.
그래프
-
온도 변화를 그래프를 이용해서 시각적으로 보여준다. 참조 graph.png
-
x축: 시간
-
y축: CPU 온도
3. Crontab
- crontab이란?
- 유닉스/리눅스 계열에서는 기본적으로 제공하는 툴로 사용자가 원하는 시간에 주기적으로 일을 시키기 위해 crontab(크론탭)을 사용합니다. 즉 cron(크론)이라는 원하는 시간에 명령을 내리는 데몬이 작동하도록 하는 실행 툴이라 할 수 있습니다.
서버가 24시간 가동되고 있으므로 적절한 시간에 적절한 명령어를 주어서 자동으로 실행시킬 수 있는 툴이라고 할 수 있습니다.
예를 들어 새벽 4시에 데이타베이스를 백업 받아 줘라든지, 아침 7시에 서버의 사용량을 리포트하도록 한다든지 등등 아주 편리하게 활용할 수 있는 툴이라고 합니다.
crontab 설정하기
-
crontab -e: 크론탭을 실행한다.
-
crontab -r: 등록된 크론탭을 삭제한다.
-
crontab -l: 현재 등록된 크론탭 리스트가 무엇인지 터미널 상에서 출력한다.
-
service cron status: 현재 사용중인 크론탭의 전반적인 스탯을 알려준다.
-
service cron stop/start(restart) : 크론탭을 중지시키거나/시작(재시작)시켜준다.
crontab 설정 규칙
ㅁ ㅁ ㅁ ㅁ ㅁ command~ (ㅁ = *)
- 첫번째 ㅁ: 분(0-59)
- 두번째 ㅁ: 시간(0-23)
- 세번째 ㅁ: 일(1-31)
- 네번째 ㅁ: 월(1-12)
- 다섯번째 ㅁ: 요일(0-6), 일요일 = 0
ex) ㅁ ㅁ ㅁ ㅁ ㅁ test.sh: 1분마다 실행, ㅁ/10 ㅁ ㅁ ㅁ ㅁ test.sh: 10분마다 실행..
더 많은 자료: https://happist.com/553442, https://loveroid.tistory.com/57
4. CSV파일을 웹으로 출력하기(php)
- nginx 종료, apache실행
- sudo systemctl stop nginx
- sudo service apache2 restart
- csv파일을 다루기 위한 기본함수
- fputcsv(): csv파일을 write할 때 사용
- fgetcsv(): csv파일을 read할 때 사용
- 기본 원리
- 파일을 연다 (fopen 함수 사용)
- array를 하나 선언한다. (CSV파일은 콤마로 구분되는 파일)
- csv 파일을 한줄씩 읽어와서 array에 대입한다.
- array를 출력한다.
- php파일과 csv파일을 /var/www/html에 복사한 후, 웹을 실행시켜준다.
- csv파일
참조) http://b1ix.net/70, https://yaku.tistory.com/entry/csv-파일-저장-읽기, http://betterphp.co.uk/
개선방향
- 현재 상황에서 cpu온도를 조절할 수 있는 장치가 방열판밖에 없었기 때문에 쿨링팬 설치나 GPIO와 LED를 이용해서 과열발생시 LED가 켜지게 하는 기능 등과 같은 외부적인 부품들을 이용하여 cpu온도를 조절할 수 있을 것이다.
문의사항
내가 기여한 것
- CSV파일을 php를 이용하여 웹에서 출력
- crontab을 이용하여 csv파일에 데이터 저장을 자동 제어