라즈베리파이로_환경_측정
차이
문서의 선택한 두 판 사이의 차이를 보여줍니다.
다음 판 | 이전 판 | ||
라즈베리파이로_환경_측정 [2022/06/08 15:50] – 만듦 akpil | 라즈베리파이로_환경_측정 [2022/06/08 16:00] (현재) – akpil | ||
---|---|---|---|
줄 1: | 줄 1: | ||
- | ====== 라즈베리파이로 온도/ | + | ====== 라즈베리파이로 온도/ |
라즈베리파이로 할 수 있는 일은 꽤 많다. 그 중에서 IoT 의 기본이라고 할 수 있는 간단한 환경변수들, | 라즈베리파이로 할 수 있는 일은 꽤 많다. 그 중에서 IoT 의 기본이라고 할 수 있는 간단한 환경변수들, | ||
줄 5: | 줄 5: | ||
먼저 필요한 것은 라즈베리파이 3B 또는 3B+ 이다. 라즈베리파아 4 이상도 좋지만, 오버스펙이다. | 먼저 필요한 것은 라즈베리파이 3B 또는 3B+ 이다. 라즈베리파아 4 이상도 좋지만, 오버스펙이다. | ||
그 다음으로 온도 및 습도 센서는 DHT22, 진동 센서는 SW-420, 소리감응 센서는 LM393 을 쓴다. | 그 다음으로 온도 및 습도 센서는 DHT22, 진동 센서는 SW-420, 소리감응 센서는 LM393 을 쓴다. | ||
+ | |||
+ | ===== 센서 pin 번호 ===== | ||
+ | |||
각 센서는 라즈베리파이의 GPIO에 연결되며, | 각 센서는 라즈베리파이의 GPIO에 연결되며, | ||
줄 24: | 줄 27: | ||
* GND (-) : 20 | * GND (-) : 20 | ||
+ | 라즈베리파이에는 라즈베리비안이 설치되어 있고, 데이터베이스는 mariadb, 웹서버는 apache2 를 이용하기로 한다. | ||
+ | 다른 DB 를 써도 되고, nginx 등의 다른 웹서버를 써도 상관없다. 그리고, 프로그래밍 언어는 파이썬 3.7 이상이면 된다. | ||
+ | |||
+ | ===== DB 사용자 만들고 권한 부여하기 ===== | ||
+ | |||
+ | < | ||
+ | sudo mysql -u root -p | ||
+ | CREATE USER ' | ||
+ | CREATE DATABASE env; | ||
+ | GRANT ALL PRIVILEGES ON *.* TO ' | ||
+ | FLUSH PRIVILEGES; | ||
+ | QUIT | ||
+ | </ | ||
+ | |||
+ | ===== DB 테이블 만들기 ===== | ||
+ | < | ||
+ | mysql -u env -p | ||
+ | USE env; | ||
+ | CREATE TABLE Reading (id INT AUTO_INCREMENT NOT NULL, date DATETIME NOT NULL,temp1 DECIMAL(5, | ||
+ | QUIT | ||
+ | </ | ||
+ | |||
+ | ===== 센서에서 데이터를 읽어와서 DB 에 저장 ===== | ||
+ | < | ||
+ | import Adafruit_DHT, | ||
+ | import RPi.GPIO as GPIO | ||
+ | import pandas as pd | ||
+ | |||
+ | dt = datetime.datetime.now().strftime(' | ||
+ | |||
+ | GPIO.setmode(GPIO.BCM) | ||
+ | GPIO.setup(23, | ||
+ | time.sleep(1) | ||
+ | |||
+ | vibration = 0 | ||
+ | noise = 0 | ||
+ | |||
+ | pin = 4 | ||
+ | sensor = Adafruit_DHT.env | ||
+ | humidity, temperature = Adafruit_DHT.read_retry(sensor, | ||
+ | |||
+ | def getCPUTemp(): | ||
+ | CPUTemp = open("/ | ||
+ | CPUTemp = float(CPUTemp) / 1000 | ||
+ | return (CPUTemp) | ||
+ | |||
+ | def vib(): | ||
+ | m1 = 0 | ||
+ | result = 0 | ||
+ | v = 0 | ||
+ | global vibration | ||
+ | vibtarion = 0 | ||
+ | while m1 < 600: | ||
+ | m1 = m1 + 1 | ||
+ | result = GPIO.input(23) | ||
+ | if result == 1: | ||
+ | v = v + 1 | ||
+ | time.sleep(0.1) | ||
+ | else: | ||
+ | time.sleep(0.1) | ||
+ | vibration = v | ||
+ | return (vibration) | ||
+ | |||
+ | def sound(): | ||
+ | m2 = 0 | ||
+ | soundpin = 25 | ||
+ | GPIO.setup(soundpin, | ||
+ | soundlevel = 0 | ||
+ | n = 0 | ||
+ | global noise | ||
+ | noise = 0 | ||
+ | while m2 < 600: | ||
+ | m2 = m2 + 1 | ||
+ | soundlevel = GPIO.input(soundpin) | ||
+ | if soundlevel == 1: | ||
+ | n = n + 1 | ||
+ | time.sleep(0.1) | ||
+ | else: | ||
+ | time.sleep(0.1) | ||
+ | noise = n | ||
+ | return (noise) | ||
+ | |||
+ | thread1 = threading.Thread(target=vib) | ||
+ | thread2 = threading.Thread(target=sound) | ||
+ | thread1.start() | ||
+ | thread2.start() | ||
+ | thread1.join() | ||
+ | thread2.join() | ||
+ | |||
+ | temp1 = str(getCPUTemp()) | ||
+ | temp2 = str(temperature) | ||
+ | hum = str(humidity) | ||
+ | vibration = str(vibration) | ||
+ | noise = str(noise) | ||
+ | |||
+ | warnings.filterwarnings(action=' | ||
+ | db = pymysql.connect(host=' | ||
+ | |||
+ | cur = db.cursor() | ||
+ | cur.execute(" | ||
+ | |||
+ | db.commit() | ||
+ | cur.close() | ||
+ | del cur | ||
+ | db.close() | ||
+ | </ | ||
+ | |||
+ | 이렇게 하면 DB 에는, 날짜, CPU 온도, 온도, 습도, 진동, 잡음 데이터가 저장된다. | ||
+ | |||
+ | 이걸 crontab 에 등록해서 5분에 한번마다 실행시키면 5분마다 센서에서 데이터를 측정해서 DB 에 저장한다. | ||
+ | |||
+ | 굳이 설명할 것도 없을 정도로 간단하다. | ||
+ | |||
+ | ------------- | ||
+ | |||
+ | 2022.06.08 akpil |
라즈베리파이로_환경_측정.1654671017.txt.gz · 마지막으로 수정됨: 2022/06/08 15:50 저자 akpil