Raspberry Pi

 

Einrichtung

Zunächst muss ein entsprechendes Image am PC heruntergeladen werden: klick. Eine einfache Installationsmöglichkeit bietet die New Out Of Box Software (NOOBS).
Eine Ausführlicher englischsprachiger Anleitung gibt es hier.
Als Betriebsystem sollte Raspbian verwendet werden. Wer unbedingt in Assembler schreiben möchte, sollte sich auch RiscOS anschaun.

Der NOOBS Installer hat jedoch noch den ein oder anderen Bug. Deshalb sollte eine manuelle Installation wie hier beschrieben bevorzugt werden.

 

WLAN Konfiiguration

Zum Login in das eduroam Netzwerk wird das Programm wpa_supplicant verwendet. Hierzu wird im Ordner /etc/wpa_supplicant die datei wpa_supplicant.conf wie folgt verändert:

ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
network={
	ssid="eduroam"
	key_mgmt=WPA-EAP
	eap=PWD
	identity="LRZ_KENNUNG(at)eduroam.mwn.de"
	password="PASSWORT"
}

Das klappt nur mit hinreichend aktuellen Versionen des wpa_supplicants, falls es nicht möglich ist, damit eine Verbindung herzustellen, sollte folgende Konfiguration verwendet werden:

ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
network={
	ssid="eduroam"
	key_mgmt=WPA-EAP
	pairwise=CCMP
	group=CCMP TKIP
	eap=PEAP
	ca_cert="/home/pi/deutsche-telekom-root-ca-2.crt"
	identity="LRZ_KENNUNG(at)eduroam.mwn.de"
	domain_suffix_match="radius.lrz.de"
	phase2="auth=MSCHAPV2"
	password="PASSWORT"
	anonymous_identity="anonymous(at)eduroam.mwn.de"
}

Die Zeile ca_cert="..." wird auf das Verzeichnis, des zuvor von der LRZ Seite heruntergeladene Zertifikat geändert. LRZ-Kennung und Passwort mit den entsprechenden Daten gefüllt. (at) durch @ ersetzten.
Ein Befehl um die .conf mit einem Editior zu Ändern wäre z. B.:

sudo nano wpa_supplicant.conf

Abschließend Speichern und das Raspberry neu starten. Danach die WiFi Config ausführen. Das Netzwerk sollte sich von alleine verbinden.

Access Point einrichten

Für die Einrichtung eines Access Points (im Folgenden AP), ist nicht jede WLAN-Karte geeignet. Die hier beschriebene Methode funktioniert nur mit nl80211 kompatiblen Adaptern (biespielswese dem tp-link tl-wn722n).

Zunächst muss in der Datei /etc/network/interfaces alles in Bezug zur verwendeten WLAN-Karte (i.d.r. wlan0) mit # auskommentiert werden. Am Ende der Datei werden nun folgende Zeilen hinzugefügt:

auto wlan0
iface wlan0 inet static
    address 192.168.42.1

Dieser Eintrag vergibt wlan0 eine feste IP-Adresse. Wobei hier die IP natürlich durch eine beliebig gewünschte ausgetauscht werden. Standard netmask ist 255.255.255.0. Ist ein anderer Addresspool gewünscht, muss dieser mit einer netmaks Zeile hinzugeschrieben werden.

Als nächstest müssen Pakete für den AP und den DHCP-Server (welcher die IPs an die Clients verteilt) installiert werden.

sudo apt-get install hostapd libnl-dev libssh-dev isc-dhcp-server

Nun wird der AP mithilfe des Programms hostapd eingerichtet. Die nötigen Konfigurationen können direkt per git heruntergeladen werden:

git clone git://w1.fi/srv/git/hostap.git

Im Verzeichnis hostap/hostapd muss nun die Datei .config (muss evtl erst durch "cp defconfig .config" erstellt werden.) werden. In der Zeile CONFIG_DRIVER_NL80211=y muss das Kommentar-Tag # entfernt werden. Soll für eine bessere Performance auch der n-Standard aktiviert werden, muss dies auch mit CONFIG_IEEE80211N=y geschehen.
Abschließend speichern nicht vergessen! Mit "sudo make" und "sudo make install" wird der Treiber bereitgestellt. make kann etwas Zeit in Anspruch nehmen.

Bei Fehlermeldungen wie "driver_nl80211.c: fatal error [...]
genl.h no such file or directory" oder "tls_openssl.c: fatal error [..] ssl.h no such file or directory" sollte noch einmal überprüft werden ob libnl-dev und libssh-dev installiert sind.

Im nächsten Schritt wir mit "sudo nano /etc/hostapd/hostapd.conf" die Datei hostapd.conf erstellt. Diese beschreibt die Parameter des APs. Eine beispiel-config:

#wählt das Netzwerkgerät für den AP
interface=wlan0

#lädt den nötigen Treiber (kann sich bei anderer WLAN-Karte unterscheiden!)
driver=nl80211

#erzugt den Namen des WLAN-Netzwerks
ssid=NETWERKNAME

#übertragungsstandard
hw_mode=g

#folgende 2 Befehle nur einfügen wenn n-Draft genutzt werden soll
ieee80211n=1
wmm_enable=1

#WLAN Kanal wählen
channel=3

#MAC-Authentifizierung
macaddr_acl=0
auth_algs=1

#essid sichtbar machen
ignore_broadcast_ssid=0

#WPA2 verschlüsselung verwenden
wpa=2

#Passwort für Netzwerk setzen (hier im KLARTEXT abgelegt!!)
wpa_passphrase=PASSWORT

#Verschlüsselungsparameter
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP
rsn_pairwise=CCMP

Es sollte auch darauf geachtet werden, dass keine Leerzeichen am Ende der Zeilen vorhanden sind. Um die eben erstellte Konfiguration auch zu laden muss /etc/default/hostapd wie folgt verändert werden:

DAEMON_CONF="/etc/hostapd/hostapd.conf"

Im nächsten Schritt wird der DHCP-Server konfiguriert. Hierzu wird die Datei /etc/dhcp/dhcpd.conf angepsst. Zerst wird der Kommentar vor authoritative; entfernt. Danach folgendes an das Ende der Datei hinzugefügt:

subnet 192.168.42.0 netmask 255.255.255.0 {
range 192.168.42.10 192.168.42.50;
option bradcastaddress 192.168.42.255;
option routers 192.168.42.1;
option dmoain-name "local";
option domain-name-servers 8.8.8.8, 8.8.4.4;
}

Natürlich können hier wieder die IP-Adressen gegen andere ausgetauscht werden.
Um nun alles zu starten werden die Befehle

sudo service hostapd start
sudo service isc-dhcp-server start

eingegeben. Wenn nun bei beiden [OK] erscheint, kann der AP direkt getestet werden. Ein bekannter bug des ISC-DHCP-Servers ist, dass dieser nach einem Neustart (shutdown -r now) am Raspberry Pi nicht korrekt funktioniert. Ein vollständiges aus- und einschalten funktioniert tadellos. Fehlermeldungen im Systemlog können mit einem Befehl ausgelesen werden:

tail -f /var/log/syslog

GPIO-Pins

um in einem C/C++-Programm die GPIO-Pins selber zu verschalten, sollte eine passende Library genutz werden. Entweder WiringPi oder bcm2835.


SPI-Schnittstelle

UPDATE: in der neusten Version von Raspbian, kann SPI direkt bei der Installation des Betriebsystems aktiviert werden. Für ältere Versionen gilt folgendes:

Das Raspberry unterstützt hardwarebasiert SPI. Jedoch ist dieses standardmäßig in Raspbian nicht aktiviert. Für die Installation wird zu erst das Firmeware-Update rpi-update installiert.

sudo apt-get install rpi-update

Darauf wird das Programm mit sudo-Rechten ausgeführt. Dies kann einige Zeit dauern, benötigt aber keine weiteren Eingriffe vom Nutzer. Abschließen muss das System neu gestartet werden.

Nun muss die Schnittstelle noch für den Nutzer freigeschaltet werden. Hierzu muss die Datei /etc/modprobe.d/raspi-blacklist.conf mit nano bearbeitet werden. Der Eintrag blacklist spi-bcm2708 wird mit einem # rauskommentieren. In der Datei /etc/modules müssen die Zeilen spi-bcm2708 und spidev hinzugefügt werden. Nach einem Neustart wird in das Verzeichnis /dev gewechselt. Darin sollten nun die Dateien spidev0.0 und spidev0.1 sein.

 

Wenn diese dort nicht zu finden sind, können die Treiber wie folgt geladen werden:

sudo modprobe spidev
sudo modprobe spi_bcm2708

 In /etc/rc.local müssen dann die beiden Zeilen zudem vor der dem Eingtrag exit 0  hinzugefügt werden. Es sollte stehts beachtet werden, dass ein Programm welches auf die spidev0.* Dateien zugreift, sudo-Rechte benötigt.


Ein gutes Beispielprogramm für einen Funktionstest findet man hier. Eine Library wird hierfür nicht benötigt, da alle GPIO-Pins im Beispiel direkt über die Register angesprochen werden.

I2C-Schnittstelle

Um I2C nutzen zu können geht man ähnlich wie bei SPI vor. Es wird in /etc/modprobe.d/raspi-blacklist.conf die Zeile i2c-bcm2708 mit # rauskommentiert werden. In /etc/modules werden die Einträge i2c-bcm2708 und i2c-dev hinzugefügt. Abschließend muss noch mit apt-get das Programm i2c-tools installiert werden. Nach einem Neustart kann die Funktion mit dem Befehl

sudo i2cdetect -y 1

getestet werden. Falls ein Raspi in Revision 1 eingesetzt wird, muss der Befehl auf -y 0 enden, da die Namen der Pins geändert wurde. Das Ergebnis des Tests sollte folgendes Auswerfen:

     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --

Wenn nun beispielsweise ein slave Gerät an Adress 0x04 in den I2C Bus eingebunden wird, gibt i2cdetect folgendes Ergebnis:

     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- 04 -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --

UART-Schnittstelle

folgt

PWM-Signale

Das Raspi bietet einen Hardware-PWM-Port. Sollten mehr PWM Signale benötigt werden, müssen diese (rechenintensiv) per Software generiert werden. Der Hardware wird mit dem Audioausgang geiteilt, da dieser keine eigene D/A-Wandler besitzt. So steht letztendlich entweder ein PWM-Pin oder der Audioausgang zur verfügung.

 SSH-Verbindung

Eine einfache Konfiguration des Raspberries lässt sich auch extern über eine SSH-Verbindung erledigen. Mit dem Befehl

ssh pi@<IP-ADRESSE>

lässt sich eine Verbindung aufbauen. Die IP-Adresse des Raspberry Pi, wird nach dem booten, vor dem Login angezeigt.

Sollte folgender Fehler auftreten:

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
The fingerprint for the ECDSA key sent by the remote host is
74:30:dc:00:81:a5:2e:f6:7f:16:6a:4d:14:ce:95:5d.
Please contact your system administrator.
Add correct host key in /.ssh/known_hosts to get rid of this message.
Offending ECDSA key in /.ssh/known_hosts:2
ECDSA host key for 192.168.1.1 has changed and you have requested strict checking.
Host key verification failed.
NaCl plugin exited with status code 255.
(R)econnect, (C)hoose another connection, or E(x)it?

muss folgender Befehl eingegeben werden um den public-key ändern zu können .

ssh-keygen -R <IP-ADRESSE>