Raspberry Pi
Einführung
Der RasPi ist ein Mini-Computer, der meist unter Linux betrieben wird. Er kann in diversen Sprachen programmiert werden, wobei vielfach c oder Python verwendet wird. Er besitzt eine Steckleiste ähnlich dem Userport des Commodore 64. Diese Steckleiste wird GPIO genannt und bedeutet General Purpose Input Output. Dies heisst, dass an die Anschlüsse für eigene Bedürfnisse anpassen kann. Einige der Anschlüsse kann man auch verwenden, um spezifische Protokolle wie UART (seriell), oder SPI zu benutzen.
Betriebsystem
Es gibt spezifische Betriebsysteme, welche explizit auf die Bedürfnisse des RaspPi zugeschnitten sind wie kleiner Speicherverbrauch und Vorkompilierung der verwendeten Kernelmodule. Entsprechend eine Liste der Distributionen, wobei die Liste länger ist: RasPi Betriebsysteme im Kurzportrait
Betriebssystem | Eigenschaften | Erscheinungsjahr | SD-Karte |
---|---|---|---|
Raspian |
|
2012 | 4GB (8GB wenn GUI) |
Pidora |
|
2014 | 2GB |
Windows 10 IoT Core |
|
2015 | ? |
Ubuntu Core |
|
2014 | ? |
Risc OS |
|
2014? | 2GB |
Arch Linux ARM |
|
2015? | 2GB |
FreeBSD |
|
2015? | ? |
GPIO verwenden
Je nach Revision und Gneration sind die Pins etwas anders. Daher unbedingt schauen, welche Version eingesetzt wird. Die Belegung ist zwar gleich, doch die Pins haben andere Nummern, so dass man dann evtl. den "falschen" Pin anspricht. Entsprechend hier die Revision B der neueren Boards.
Pinnummer | Funktion | - | Funktion | Pinnummer |
---|---|---|---|---|
- | 3.3V | o o | 5V | - |
2 | SDA | o o | 5V | - |
3 | SCL | o o | GND | - |
4 | I/O | o o | TX | 14 |
- | GND | o o | RX | 15 |
17 | I/O | o o | I/O | 18 |
27 | I/O | o o | GND | - |
22 | I/O | o o | I/O | 23 |
- | 3.3V | o o | I/O | 24 |
10 | MOSI | o o | GND | - |
9 | MISO | o o | I/O | 25 |
11 | SCKL | o o | I/O | 8 |
- | 3.3V | o o | I/O | 7 |
Bedeutung der Bezeichnungen
- 3.3V -> stellt 3.3V mit max. 50mA zur Verfügung
- 5V -> stellt 5V mit max. 250mA zur Verfügung -> Darf nie an einen GPIO-Pin gelangen, da dieser sonst sofort zerstört wird!
- GND -> Ground-Pins
- I/O -> Reine Input/Output-Pins, welche nicht für andere Zwecke vorbelegt sind. Im Gegensatz zum Arduino sind keine analogen Ein-/Ausgänge vorhanden. Sollten nicht mehr als 3mA-Strom ziehen. Es geht zwar mehr (max. 16 mA), doch auf Kosten der Lebensdauer des Chips.
- TX -> Send (transmit) der seriellen Schnittstelle (UART)
- RX -> Empfang (receive) der seriellen Schnittstelle (UART)
- SDA -> Daten? der IC-Schnittstelle
- SCL -> Clock der IC-Schnittstelle
- MOSI -> Master Out der SPI-Schnittstelle (Daten vom Server zu den Slaves) (Die Kabel werden nicht gekreuzt)
- MISO ->Master In der SPI-Schnittstelle (Daten von den Slaves zum Server) (Die Kabel werden nicht gekreuzt)
- SCKL -> Clock der SPI-Schnittstelle
Module freischalten
Damit das entsprechende Modul vom Kernel geladen wird, muss man es folgendermassen einrichten:
- Kontrolle, dass es nicht in der /etc/modprobe.d/raspi-blacklist.conf aktiv ist -> einfach mit einem # am Anfang auskommentieren
- Das Modul in /etc/modules hinzufügen
- Den RaspPi neu starten
IC
Das freizuschaltende Modul heisst i2c-bcm2708. Zusätzlich sollte auch i2c-dev geladen werden. Für den Zugriff sollte man auch die i2c-tools
installieren:
$ sudo apt-get install i2c-tools
Beim Verwenden darauf achten, wie viel Strom die Geräte brauchen und diese sonst extern einspeisen. Hat man ein Gerät verbunden, kann man nun seine Adresse herausfinden. Jedes angeschlossene Gerät braucht eine eindeutige Adresse:
$ sudo i2cdetect -y 1
Bei ganz alten Boards muss der Bus mit 0 anstatt 1 angegeben werden. Das Tool listet die Adressen (hex) entsprechend auf. Will man mehrere Geräte anschliessen, sollte man immer eines nach dem anderen anschliessen und die Adresse dann entsprechend eindeutig gestalten.
SPI
Das freizuschaltende Modul heisst spi-bcm2708. Zusätzlich sollte auch spidev geladen werden.
Für den Zugriff mit Python auf SPI muss man je nachdem noch ein Git-Repository einbinden, auch wenn dies wohl meist unterdessen schon hinzugefügt wurde. Falls nicht, geht dies auf nachfolgende Art:
$ sudo apt-get install git $ sudo apt-get install python-dev $ git clone git://github.com/doceme/py-spidev $ cd py-spidev/ $ sudo python setup.py install
Nach einem Neustart kann SPI über Python angesprochen werden.
Wichtige Bibliotheken
Damit man auf die Hardware zugreifen kann, muss je nach Sprache und Anwendungsfall die entsprechende Bibliothek installiert werden.
RPi.GPIO
Diese Bibliothek ist bei den meisten Distributionen schon vorinstalliert. Sollte dies nicht der Fall sein, muss diese mit dem Paketmanager installiert werden. Allgemeine Infos zum Umgang mit Linux im Artikel Allgemeine Daten zu Linux, Tipps und Tricks und Systemeinstellungen.
Ist apt
im Einsatz, kann man die Bibliothek folgendermassen installieren:
$ sudo apt-get install python-dev $ sudo apt-get install python-rpi.gpio
WiringPi
WiringPi ist eine Bibliothek, welche unter c / c++ verwendet wird, auf die man mit den entsprechenden Wrappern auch von anderen Sprachen aus zugreifen kann wie etwa über Python. Mit gpio
kann direkt von der Shell aus auf die Pins zugegriffen werden und dies ermöglicht auch den Zugriff aus Shell-Skripten heraus.
Wie man der Entwickler-Webseite entnehmen kann, wird die Bibliothek nicht mehr weiter entwickelt und ist auch nicht für Anfänger gedacht, sondern für Leute, die sich auskennen.
$ sudo apt-get install wiringpi
Test der Installation:
$ gpio -v $ gpio readall
PySerial
Notwendig, um die serielle Schnittstelle mit Python zu verwenden.
$ suto apt-get install python-serial
Nicht vergessen, die serielle Konsole zu deaktivieren.