IoT
[라즈베리 파이] cpu 온도 측정 + 웹 환경에서 보기
blaxsior
2024. 7. 17. 00:07
https://www.nicm.dev/vcgencmd/
라즈베리 파이는 vcgencmd라는 라즈베리 파이 전용 cli 프로그램이 있다. 온도 이외에도 코어 개수, 전압 등 다양한 정보를 볼 수 있으며, 이번에는 vcgencmd 툴을 이용해서 라즈베리 파이의 온도를 측정한다.
아래 명령을 입력하면 현재 라즈베리 파이의 CPU 온도를 알려준다.
vcgencmd measure_temp
이때, 파이썬의 os.popen 메서드를 이용하면 stdout을 입력받을 수 있다. popen은 cmd에 대한 파이프를 열어 명령어에 대해 내용을 읽거나 쓸 수 있는 기능으로 보인다. 현재는 실행한 명령의 결과를 읽어오는 용도로 사용한다.
print(os.popen("vcgencmd measure_temp").readline())
위와 같은 정보를 알고 있으므로, flask 서버를 열어 데이터를 웹 환경으로 전달할 수 있다.
import os
from flask import Flask
app = Flask(__name__)
@app.route("/")
def indexPage():
return app.send_static_file("index.html")
@app.get("/temp")
def getTemp():
return os.popen("vcgencmd measure_temp").readline()
if __name__ == "__main__":
app.run(port=3030, host="0.0.0.0")
host='0.0.0.0' 으로 지정하면 외부에서 서버에 접속 가능하도록 열린다. 나의 경우 wifi로 연결된 라즈베리 파이 환경에 접속할 수 있었다.
인덱스 페이지 내용은 다음과 같다.
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<div class="temp"></div>
<script>
const item = document.querySelector(".temp");
function timeoutAction(handler, time = 1000) {
let t;
function clear() {
clearInterval(t);
}
t = setInterval(handler, time);
return clear;
}
const clear = timeoutAction(() => {
fetch("/temp").then((info) =>
info.text()
).then(text => {
item.textContent = text;
})
});
</script>
</body>
</html>
fetch를 이용하여 서버의 온도 데이터를 1초마다 읽어 .temp 엘리먼트의 텍스트 내용을 갱신한다. 결과는 다음과 같다.
정상적으로 1초마다 온도 정보를 읽어올 수 있었다. 라즈베리파이는 일종의 웹 서버 기능까지 수행할 수 있기 때문에 데이터를 주고받기가 상당히 수월하다고 느낀다. 나중에는 HTTP 이외의 프로토콜로도 통신하는 방법을 공부해봐야겠다.