Raspberry Pi-temperatuursensor
Een paar weken geleden kocht ik een Raspberry Pi. Na het lezen van de Raspberry Pi-gebruikershandleiding van Eben Upton, met name de twee hoofdstukken waarop hij de aandacht vestigt op de GPIO, kreeg ik een idee voor mijn eerste project. Het bericht behandelt de eerste iteratie van een project voor het bewaken van de temperatuur van thuis dat ik heb samengesteld met behulp van een Raspberry Pi, een MCP9808, een oude Mac Mini (begin 2008), InfluxDB, Grafana, een beetje Python en runit.
De sensorhardware
Voor dit project heb ik ervoor gekozen om het MCP9808 Breakout Board van Adafruit te gebruiken - een uitstekende bron voor componenten, circuits en ideeën. Ik heb dit apparaat om een paar redenen gekozen:
- Het wordt bestuurd via I²C - Raspberry Pi's GPIO ondersteunt de vereiste I²C-bus via pinnen 3 (Serial Data Line, SDA) en 5 (Serial Clock Line, SCL)
- Het werkt in het vermogens- en logische bereik van 2,7 V tot 5,5 V - de Raspberry Pi levert stroomleidingen van 3,3 V en 5 V
- Het was vrij goedkoop (<$ 5 USD) - Mijn soldeervaardigheden zijn niet de beste.
Circuitmontage
Het MCP9808 Breakout Board wordt grotendeels geassembleerd door Adafruit verzonden. Voor deze specifieke kit hoeft u alleen de meegeleverde 8-pins headerstrip aan het breakout-bord te solderen.
Ik gebruikte een GPIO Breakout en een breadboard om de Raspberry Pi op de MCP9808 aan te sluiten; deze benadering is iets gemakkelijker te beheren, corrigeert bedradingsfouten en is minder permanent dan het solderen van de sensor aan de Raspberry Pi. Om temperaturen van de MCP9808 te lezen, zijn alleen de voedingspin, aarde en de I²C SDA- en SCL-pinnen vereist:
De overige, optionele pinnen worden in dit project niet gebruikt. Ze bieden oplossingen voor problemen met I²C-adressering wanneer meerdere apparaten op dezelfde bus worden gebruikt en een pin om te waarschuwen als de sensor een temperatuur boven of onder een drempelwaarde leest.
De datastore
Ik wist dat ik het project wilde ondersteunen met een permanente datastore. Hierdoor zou ik gegevenspunten kunnen vastleggen en deze later kunnen analyseren voor algemene trends, kruisverwijzingen naar verwarmings-/koelingspatronen met weersomstandigheden, enz.
Ik koos voor InfluxDB vanwege de tijdgerichte querytaal en het opslagmodel. Ik installeerde Influx op een oude Mac Mini (begin 2009 met OSX 10.10) die ik onder mijn bureau had zitten. Het in gebruik nemen van een basisinstallatie van InfluxDB is goed gedocumenteerd; aangezien ik de Homebrew al gebruik om de meeste van mijn afhankelijkheden van derden te beheren en er een formule voor InfluxDB bestaat, werd de installatie voltooid door brew install influxdb
uit te geven. .
Configureer de InfluxDB-database
Met InfluxDB geïnstalleerd, heb ik een database opgezet om mijn temperatuurmetingen op te slaan en een databasegebruiker om deze te beheren. Ik heb hiervoor de webconsole van mijn InfluxDB-instantie gebruikt; standaard draait het op poort 8083
van de InfluxDB-host.
Raspberry Pi-configuratie
Nu de hardware en datastore zijn ingesteld, is er een beetje OS-configuratie nodig voor een kant-en-klare Raspberry Pi om via de I²C-bus met de MCP9808 te communiceren.
I²C inschakelen
Standaard laadt de Raspberry Pi niet de vereiste kernelmodules om de I²C-bus te gebruiken. Om I²C-communicatie via de GPIO mogelijk te maken, heb ik de volgende twee regels toegevoegd aan /etc/modules
i2c-bcm2708i2c-dev
Start vervolgens de Raspberry Pi opnieuw op
sudo reboot
Nadat het systeem is geïnitialiseerd, moet het systeem kunnen herkennen dat de MCP9808 is aangesloten. Ik gebruikte de i2cdetect
cli tool om dit te doen:
sudo i2cdetect 1 # channel 1 is de standaard op het Raspberry Pi B+ model
De sensorsoftware
Adafruit levert een MCP9808-wikkel en een I²C-abstractie. Ik heb deze beide gebruikt in het hoofdstuurprogrammascript voor dit project.
Build-afhankelijkheden installeren
sudo apt-get updatesudo apt-get install build-essential python-dev python-smbus
Installeer de Adafruit_Python_MCP9808 wrapper
cd ~/Downloadsgit-kloon https://github.com/adafruit/Adafruit_Python_MCP9808/blob/master/Adafruit_MCP9808cd Adafruit_MCP9808sudo python setup.py install
Hiermee wordt ook de I²C-abstractie geïnstalleerd, aangezien de MCP9808-wrapper hiervan afhankelijk is.
Lezen, rapporteren, herhalen
Vervolgens schreef ik een klein pythonscript, poll.py
, om met een interval van de MCP9808 te lezen en de bevindingen te rapporteren aan de mcp9808_test InfluxDB-database-instantie.
#!/usr/bin/python import time import Adafruit_MCP9808.MCP9808 as MCP9808 from influxdb import InfluxDBClient # Genereert de benodigde payload om # temperatuurgegevens in de InfluxDB te plaatsen def temperature_data(degrees_c):return [ { 'points':[[c_to_f(degrees_c)]], 'name':'Temperature Readings', 'columns':['degrees_f']}] # Converteert temperatuurrepresentaties in Celsius # naar Farenheight def c_to_f(c):return c * 9.0 / 5.0 + 32.0 # Initialiseert communicatie met de MCP9808 # via de I2C-bus. sensor =MCP9808.MCP9808() sensor.begin() # Bepaalt het interval waarop de capture-logica # zal plaatsvinden capture_interval =60.0 # Elke 60 seconden # Brengt een verbinding tot stand met de mcp9808_test # InfluxDB-instantie influxClient =InfluxDBClient('
Nu kan het worden uitgevoerd met behulp van de volgende opdracht; merk op dat het script moet worden uitgevoerd als de root
gebruiker van de Raspberry Pi om te communiceren met de GPIO.
sudo python /poll.py
For-ever
Hoera! Alles was up and running... totdat ik de aan/uit-schakelaar van de powerstip onder mijn bureau indrukte. Op dit punt realiseerde ik me dat ik ervoor wilde zorgen dat de poll.py
script liep zolang de Raspberry Pi stroom had. Om dit te bereiken heb ik de runit process supervisor gebruikt.
Voor meer details:Raspberry Pi-temperatuursensor
Productieproces
- Raspberry Pi Temperature Logger
- Raspberry Pi-temperatuurprofiel met LabVIEW
- Meet temperaturen met een 1-draads DS18B20-sensor en Raspberry Pi
- Raspberry Pi temperatuur- en vochtigheidsnetwerkmonitor
- Temperatuur aflezen met DS18B20 | Raspberry Pi 2
- Temperatuurbewaking op de Raspberry Pi
- Temperatuur meten met RASPBERRY PI
- TMP006 Temperature Sensor Python Library met Raspberry pi,
- Python- en Raspberry Pi-temperatuursensor
- Raspberry Pi-weerstation
- Temperatuur bewaken met Raspberry Pi