라즈베리파이로_환경_측정
차이
문서의 선택한 두 판 사이의 차이를 보여줍니다.
| 다음 판 | 이전 판 | ||
| 라즈베리파이로_환경_측정 [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
