Membangun Pemantau Suhu Rumah Raspberry Pi dengan MCP9808, InfluxDB & Grafana
Setelah memperoleh Raspberry Pi dan meninjau Panduan Pengguna Raspberry Pi Eben Upton—terutama bagian GPIO—saya memulai proyek pertama saya: sistem pemantau suhu rumah. Posting ini merinci iterasi awal menggunakan Raspberry Pi, papan breakout Adafruit MCP9808, Mac Mini lama, InfluxDB, Grafana, Python, dan pengawasi proses runit.
Hardware Sensor
Untuk sensor suhu, saya memilih papan breakout MCP9808 dari Adafruit. Pilihan saya didorong oleh:
- Antarmuka I²C bawaan – pin GPIO Pi 3 (SDA) dan 5 (SCL) mendukung bus yang diperlukan.
- Rentang tegangan luas (2,7 V–5,5 V) – kompatibel dengan rel 3,3 V dan 5 V Pi.
- Hemat biaya – di bawah $5 USD, ideal untuk proyek pertama pemula.
Rangkaian Sirkuit
Papan MCP9808 tiba sebagian besar terpasang; satu-satunya solder yang diperlukan adalah memasang header 8 pin. Saya menggunakan breakout GPIO dan breadboard untuk menghubungkan Pi ke sensor, menyederhanakan kabel dan membuat penyesuaian di masa depan lebih mudah. Koneksi penting adalah:
- Daya (VDD)
- Ground (GND)
- Data (SDA)
- Clock (SCL)
Sisa pin—digunakan untuk pemilihan alamat dan peringatan—ditidakkan untuk setup satu perangkat ini.
Penyimpanan Data
Menangkap data seiring waktu memungkinkan analisis tren dan korelasi dengan peristiwa eksternal. Saya memilih InfluxDB untuk fokusnya pada time-series dan bahasa kueri yang intuitif. Basis data berjalan pada Mac Mini awal 2009 (OS X 10.10) di bawah Homebrew:
brew install influxdb
Setelah instalasi, saya membuat basis data dan pengguna khusus melalui konsol web (port default 8083). Saya juga menyiapkan basis data bernama mcp9808_test untuk menyimpan pembacaan sensor.
Konfigurasi Raspberry Pi
Aktifkan I²C
Pi tidak memuat modul I²C secara default. Tambahkan baris ini ke /etc/modules dan reboot:
i2c-bcm2708 i2c-dev
Verifikasi apakah sensor terdeteksi dengan:
sudo i2cdetect 1
Perangkat Lunak Sensor
Saya memanfaatkan pembungkus Python MCP9808 Adafruit, yang juga menarik lapisan abstraksi I²C.
Instal Dependensi Build
sudo apt-get update sudo apt-get install build-essential python-dev python-smbus
Instal Pembungkus Adafruit MCP9808
cd ~/Downloads git clone https://github.com/adafruit/Adafruit_Python_MCP9808 cd Adafruit_Python_MCP9808 sudo python setup.py install
Baca, Laporkan, Ulangi
Di bawah ini adalah skrip poll.py yang membaca suhu setiap menit dan menulis nilainya ke InfluxDB:
#!/usr/bin/python import time import Adafruit_MCP9808.MCP9808 as MCP9808 from influxdb import InfluxDBClient # Siapkan payload untuk InfluxDB def temperature_data(degrees_c): return [ { 'points': [[c_to_f(degrees_c)]], 'name': 'Temperature Readings', 'columns': ['degrees_f'] } ] # Konversi Celsius ke Fahrenheit def c_to_f(c): return c * 9.0 / 5.0 + 32.0 # Inisialisasi sensor sensor = MCP9808.MCP9808() sensor.begin() # Interval tangkapan dalam detik capture_interval = 60.0 # Hubungkan ke InfluxDB (ganti placeholder dengan nilai aktual) influxClient = InfluxDBClient('<influx-db-host>', 8086, 'mcp9808', '<password>', 'mcp9808_test') # Loop berkelanjutan while True: temp_c = sensor.readTempC() print('Temperature {0:0.3} F'.format(c_to_f(temp_c))) influxClient.write_points(temperature_data(temp_c)) time.sleep(capture_interval)
Jalankan skrip sebagai root untuk mengakses pin GPIO:
sudo python /path/to/poll.py
Pengawasan Proses dengan runit
Untuk memastikan poll.py tetap hidup di seluruh reboot dan siklus daya, saya mengonfigurasi runit sebagai pengawas proses. Langkah setup detail tersedia dalam dokumentasi proyek asli.
Ringkasan
Dengan sensor, basis data, dan stack pemantau yang siap, Anda sekarang memiliki pemantau suhu rumah yang andal dan hemat biaya. Gunakan Grafana untuk memvisualisasikan data, mengatur peringatan, dan mendapatkan wawasan yang dapat ditindaklanjuti tentang lingkungan Anda.