Wetterstation: I2C Basics

Beitrag vom 25.07.2016

Vor einigen Wochen habe ich damit begonnen, eine kleine Wetterstation mit einem Raspberry Pi und ein paar Sensoren zu bauen. In nächster Zeit wird dazu der ein oder andere Blog Post folgen.

Was vor ein paar Jahren noch richtig aufwändig gewesen wäre, ist heute eigentlich keine richtige Elektrotechnik mehr. Ich habe mir fertige Sensoren bestellt, und die einfach über die I2C Schnittstelle mit einem Pi verbunden.

I2C ist eine digitale Schnittstelle, wo jedes Gerät eine hexadezimale Adresse bekommt. Neben der Tatsache, dass die Adresse "nur" 2^16 Geräte fassen kann, schränkt hier nur die Stromquelle die Anzahl der Sensoren ein. Dazu weiter unten mehr.

Verkabeln

Alle Sensoren werden an die selben vier Pins gehängt.

Mit ein paar Stiftleisten, ein bisschen Platine und einem alten LAN Kabel kann man sich einfach einen Adapter bauen, wo (in meinem Fall) acht Sensoren + Raspberry Pi Platz finden.

Verkabeln

Stromversorgung

Nutzt man viele Sensoren, sollte man die Stromversorgung anpassen.

Um zu verhindern, dass zu viel Strom durch den Raspberry Pi fließt, schließt man die Stromversorgung einfach auf der Adapterplatine an, und versorgt den Pi durch die 5V und GND Pins.

So werden Sensoren und Raspberry zwar von der gleichen Stromquelle, versorgt, aber es fließt nicht mehr der ganze Strom, den die Sensoren brauchen, durch den Pi.

Power Wiring

Ein Micro USB Netzteil ist nun nicht mehr nötig!

Belegung auf meinem Pi

Beim Kauf muss man wirklich auf die Adresse des Sensors achten. Einige Sensoren lassen sogar die Änderung der Adresse durch Jumper oder das anlegen von Spannung / Ground an Steuer-Pins zu. Die sollte man dann bevorzugen.

Adresse Sensor Bezeichnung
0x29 TSL2591 Helligkeitssensor
0x5c AM2315 Außensensor
0x71 Adafruit 7-Segment Display Anzeige Außentemperatur
0x72 Adafruit 7-Segment Display Anzeige Innentemperatur
0x77 BMP085/BMP180 Innensensor

Adresse ändern

Beim 7-Segment Display kann die Adresse durch das Brücken von drei Kontakten verändert werden. Je nachdem welche Kontakte man brückt, kann die Adresse im Bereich von 0x70 bis 0x77 geändert werden. Es können also bis zu acht Displays eingesetzt werden.

Adafruit 7-segment Display

Adresse A0 (1) A1 (2) A2 (4)
0x70
0x71 X
0x72 X
0x73 X X
0x74 X
0x75 X X
0x76 X X
0x77 X X X

Ein weiteres Beispiel wäre der Sensor MCP9808. Dank der Pins A0 bis A2 können bis zu acht dieser Sensoren an einem I2C Bus betrieben werden. Je nachdem welche der drei Pins man mit Spannung versorgt, ändert sich die Adresse.

Adafruit MCP9808

Adresse A0 (1) A1 (2) A2 (4)
0x18
0x19 X
0x1A X
0x1B X X
0x1C X
0x1D X X
0x1E X X
0x1F X X X

Manchmal braucht es Widerstände

Die Adafruit Sensor Boards sind einfach. Dort ist schon alles vorhanden, sodass man die Sensoren einfach mit dem Raspberry Pi verbinden kann.

Der AM2315 Outdoor Sensor ist ein bisschen aufwändiger. Aus Gründen müssen hier die Datenleitungen mit einem Pull-Up Widerstand versehen werden.

Wiring

Ich habe mir dafür ein kleines Hilfs-Board zusammen gelötet:

Board

Software

Auch bei der Software kann man faul sein. Für jeden Adafruit Sensor gibt es in irgendeiner Form Python Code, den man einfach verwenden kann.

Sensor Library
BMP085/BMP180 https://github.com/adafruit/Adafruit_Python_BMP
tsl2591 https://github.com/maxlklaxl/python-tsl2591
LED Backpack https://github.com/adafruit/Adafruit_Python_LED_Backpack
AM2315 https://github.com/roder/aosong

Datenaufzeichnung

Läuft bei mir wie folgt:

  • Werte alle 2 Sekunden auslesen
  • Als JSON in Textdatei ablegen
  • Weitere Auswertung mit einem eigenen Programm

Den Programmcode werde ich bei Gelegenheit nachliefern.

Hallo Internet

Mein Name ist Christian, vom Beruf bin ich Anwendungsentwickler.

In meiner Freizeit beschäftige ich mich mit verschiedensten Technologien. Hier sammele ich Dinge, die für mich interessant waren oder sind.