제조공정
몇 주 전에 라즈베리 파이를 구입했습니다. Eben Upton의 Raspberry Pi 사용자 가이드, 특히 그가 GPIO에 중점을 둔 두 개의 챕터를 읽은 후 첫 번째 프로젝트에 대한 아이디어가 떠올랐습니다. 이 게시물은 내가 Raspberry Pi, MCP9808, 구형 Mac Mini(2008년 초), InfluxDB, Grafana, 약간의 Python 및 runit을 사용하여 조합한 가정 온도 모니터링 프로젝트의 첫 번째 반복을 다룹니다.
이 프로젝트를 위해 Adafruit의 MCP9808 브레이크아웃 보드를 사용하기로 결정했습니다. 이는 부품, 회로 및 아이디어를 위한 훌륭한 소스입니다. 몇 가지 이유로 이 장치를 선택했습니다.
<올>
Adafruit의 MCP9808 브레이크아웃 보드는 대부분 조립되어 배송됩니다. 이 특정 키트는 포함된 8핀 헤더 스트립을 브레이크아웃 보드에 납땜하기만 하면 됩니다.
GPIO Breakout과 브레드보드를 사용하여 Raspberry Pi를 MCP9808에 연결했습니다. 이 접근 방식은 관리하기가 조금 더 쉽고 배선 실수를 수정하며 센서를 Raspberry Pi에 납땜하는 것보다 덜 영구적입니다. MCP9808에서 온도를 읽으려면 전원 핀, 접지, I²C SDA 및 SCL 핀만 필요합니다.
나머지 선택적 핀은 이 프로젝트에서 사용되지 않습니다. 동일한 버스에서 여러 장치를 사용할 때 문제를 해결하는 I²C에 대한 해결 방법과 센서가 임계값 위 또는 아래의 온도를 읽을 경우 경고하는 핀을 제공합니다.
영구 데이터 저장소로 프로젝트를 지원하고 싶다는 것을 알고 있었습니다. 이렇게 하면 데이터 포인트를 캡처하고 나중에 일반적인 추세, 날씨 이벤트에 따른 난방/냉각 패턴 상호 참조 등에 대해 분석할 수 있습니다.
나는 시간 중심 쿼리 언어와 스토리지 모델 때문에 InfluxDB를 선택했습니다. 나는 내 책상 밑에 앉아 있던 오래된 Mac Mini(OSX 10.10이 설치된 2009년 초)에 Influx를 설치했습니다. InfluxDB의 기본 설치를 시작하고 실행하는 것은 문서화되어 있습니다. 이미 Homebrew를 사용하여 대부분의 타사 종속성을 관리하고 InfluxDB에 대한 공식이 존재하므로 brew install influxdb
를 실행하여 설치가 완료되었습니다. .
InfluxDB가 설치된 상태에서 온도 판독값을 저장하기 위한 데이터베이스와 이를 관리할 데이터베이스 사용자를 설정했습니다. InfluxDB 인스턴스의 웹 콘솔을 사용하여 이 작업을 수행했습니다. 기본적으로 포트 8083
에서 실행됩니다. InfluxDB 호스트의.
이제 하드웨어와 데이터 저장소가 설정되었으므로 I²C 버스를 통해 MCP9808과 통신하기 위해 기본 제공되는 Raspberry Pi에 약간의 OS 구성이 필요합니다.
기본적으로 Raspberry Pi는 I²C 버스를 사용하는 데 필요한 커널 모듈을 로드하지 않습니다. GPIO를 통한 I²C 통신을 활성화하기 위해 /etc/modules
에 다음 두 줄을 추가했습니다.
i2c-bcm2708i2c-dev
그런 다음 Raspberry Pi를 재부팅하십시오.
sudo 재부팅
시스템이 초기화된 후 시스템은 MCP9808이 연결되었음을 인식할 수 있어야 합니다. i2cdetect
를 사용했습니다. cli 도구:
sudo i2cdetect 1 # 채널 1은 Raspberry Pi B+ 모델의 기본값입니다.
Adafruit는 MCP9808 래퍼와 I²C 추상화를 제공합니다. 이 프로젝트의 기본 드라이버 스크립트에서 이 두 가지를 모두 사용했습니다.
sudo apt-get 업데이트sudo apt-get 설치 빌드 필수 python-dev python-smbus
cd ~/Downloadsgit clone https://github.com/adafruit/Adafruit_Python_MCP9808/blob/master/Adafruit_MCP9808cd Adafruit_MCP9808sudo python setup.py 설치코드>
이것은 또한 MCP9808 래퍼가 의존하는 I²C 추상화를 설치합니다.
다음으로 poll.py
라는 작은 파이썬 스크립트를 작성했습니다. , 일정 간격으로 MCP9808에서 읽고 그 결과를 mcp9808_test InfluxDB 데이터베이스 인스턴스에 보고합니다.
#!/usr/bin/python import time import Adafruit_MCP9808.MCP9808 as MCP9808 from influxdb import InfluxDBClient # 온도 데이터를 InfluxDB에 게시하는 데 필요한 페이로드 생성 def temperature_data(degrees_c):return [ { 'points':[[c_to_f(degrees_c)]], 'name':'Temperature Readings', 'columns':['degrees_f']}] # 섭씨 온도 표현을 다음으로 변환합니다. Farenheight def c_to_f(c):return c * 9.0 / 5.0 + 32.0 # I2C 버스를 통해 MCP9808과 통신을 초기화합니다. sensor =MCP9808.MCP9808() sensor.begin() # 캡처 로직이 발생할 간격을 정의합니다. capture_interval =60.0 # 60초마다 # mcp9808_test에 연결을 설정합니다. # InfluxDB 인스턴스 influxClient =InfluxDBClient('
이제 다음 명령을 사용하여 실행할 수 있습니다. 스크립트는 루트
로 실행해야 합니다. GPIO와 상호 작용하기 위해 Raspberry Pi 사용자.
sudo 파이썬 /poll.py
만세! 모든 것이 정상 작동 중이었습니다... 책상 아래 전원 표시줄의 켜기/끄기 스위치를 걷어차기 전까지는 말이죠. 이 시점에서 나는 poll.py
스크립트는 Raspberry Pi에 전원이 있는 한 실행되었습니다. 이를 위해 runit 프로세스 감독자를 사용했습니다.
자세한 내용:Raspberry Pi 온도 센서
제조공정
구성품 및 소모품 Arduino UNO × 1 점퍼 와이어(일반) × 1 DHT11 온도 및 습도 센서(3핀) × 1 온도 센서 × 1 저항 10k 옴 × 2 HC-05 블루투스 모듈 × 1 심박수 센서 × 1 앱 및 온라인 서비스 MIT 앱 인벤터 2 Arduino IDE 이 프로젝트 정보 센서와 앱이 있는 유선 전자 장치는 건
구성품 및 소모품 Arduino UNO × 1 Adafruit Standard LCD - 파란색 바탕에 16x2 흰색 × 1 점퍼 와이어(일반) × 1 앱 및 온라인 서비스 Arduino IDE 이 프로젝트 정보 이 프로젝트는 주변 온도를 감지한 다음 이를 볼트로, 볼트를 로 변환합니다. 섭씨, 섭씨에서 화씨로 변환한 다음 화씨를 인쇄합니다. 코드 온도 temp아두이노 #include Liquid