Aus Raspberry Pi Geek 02/2014

Fahrzeugdaten übertragen mit dem Raspberry Pi (Seite 3)

Es gilt also, erst einmal auf den Standard-Kernel von Raspbian zu wechseln (Listing 2, Zeile 1) und anschließend in der Datei /boot/config.txt den neuen Kernel einzutragen (kernel=vmlinuz-3.6-trunk-rpi). Nach einem anschließenden Neustart fehlt zwar noch der Peak-Treiber [3] (Listing 2, Zeile 2), aber es liegen zumindest die passenden Header-Files vor, sodass man den Treiber nun übersetzen und installieren kann (Listing 3).

Listing 2

 

$ sudo apt-get install linux-image-3.6-trunk-rpi linux-headers-3.6-trunk-rpi libpopt-dev
$ grep CAN_PEAK /boot/config-3.6-trunk-rpi
# CONFIG_CAN_PEAK_USB is not set

Listing 3

 

$ wget http://www.peak-system.com/fileadmin/media/linux/files/peak-linux-driver-7.9.tar.gz
$ tar xvzf peak-linux-driver-7.9.tar.gz
$ cd peak-linux-driver-7.9
$ make PCI=NO_PCI_SUPPORT USB=USB_SUPPORT
$ sudo make install
$ sudo depmod -a

Damit liegt das Modul nun einsatzbereit vor. Man lädt es entweder selbst mit sudo modprobe pcan oder steckt den CAN-Adapter ein – das Modul wird dann automatisch geladen. Im Fall eines Kernel-Updates darf man allerdings nicht vergessen, den CAN-Treiber wieder zu kompilieren und neu zu installieren.

Der PCAN-Treiber legt bei der Installation automatisch die Datei /etc/modprobe.d/pcan.conf an. Um die Bitrate des CAN-Busses auf 1 Mbit/s zu erhöhen, muss man bei diesem Modul die Geschwindigkeit beim Laden des Moduls angeben – automatisiert klappt das beispielsweise mit options pcan bitrate=0x0014 in dieser Datei. Werte für andere Geschwindigkeiten finden Sie in der Tabelle “PCAN-Modul: Geschwindigkeiten” (entnommen aus dem PCAN-Quellcode). Bei anderen CAN-Modulen erreichen Sie dasselbe mit folgendem Befehl:

# ip link set can0 type can bitrate 1000000

PCAN-Modul: Geschwindigkeiten

Bitrate

Moduloption

1000 kbit/s

0x0014

500 kbit/s

0x001C

250 kbit/s

0x011C

125 kbit/s

0x031C

100 kbit/s

0x432F

50 kbit/s

0x472F

20 kbit/s

0x532F

10 kbit/s

0x672F

5 kbit/s

0x7F7F

Zum Zugriff auf das CAN-Netzwerk-Device gibt es im Userspace die Can-Utilities [4], die man nach dem Herunterladen des Quellcodes mit make; sudo make install installiert. Zum Auslesen des CAN-Busses dient das Tool candump (siehe Listing 1). Ein Datenpaket auf dem CAN-Bus besteht aus einer 11 Bit langen CAN-ID, es folgen eine Längenangabe (1 bis 8 Byte) sowie die Daten. Bei Bedarf ließen sich mit cansend sogar eigene Nachrichten in den CAN-Bus schreiben.

Netzanbindung

Zur Datenübertragung aus dem Rennwagen auf einen Laptop kommt eine Internetverbindung via 3G-Datenstick zum Einsatz. Der Raspberry Pi erkennt den Stick beim Einbinden automatisch als Datenspeicher, was unter Windows zwar den Installationsvorgang erleichtert, unter Linux aber nichts bringt. Um hier auf den Netzwerkmodus umzuschalten, gilt es, einen SCSI-Code an den Stick zu senden. Dazu dient das Programm sg_raw aus dem Paket sg3_utils:

$ /usr/bin/sg_raw /dev/sr0 11 06 20 00 00 00 00 00 01 00

Alternativ klappt die Umstellung auch mit dem Programm usb_modeswitch [5]. Nach der Umstellung bleibt der Stick im neuen Modus. Der Windows-Treiber allerdings lässt sich nun nicht mehr erreichen – möchten Sie den Stick auch auf einem Windows-Rechner nutzen, müssen Sie den Treiber vorher herunterkopieren.

Unter Linux lässt sich der UMTS-Stick nach der Umstellung über das Device /dev/ttyUSB0 ansprechen, mittels wvdial stellt man eine Netzwerkverbindung her. Um den Vorgang zu automatisieren, tragen Sie in /etc/network/interfaces die Zeilen aus Listing 4 ein.

Listing 4

 

auto ppp0
iface ppp0 inet wvdial
  provider Providername

Die Datei /etc/wvdial.conf nimmt dabei die providerspezifische Konfiguration auf. Hier darf man durchaus mehrere Provider eintragen. Bei einem Formula-Student-Wettbewerb im Ausland lässt sich dann einfach eine landesspezifische SIM-Karte einsetzen und der Providername in /etc/network/interfaces ändern.

Nun besitzt der RasPi über den UMTS-Stick eine Internetanbindung. Um die öffentliche IP-Adresse des Minirechners herauszufinden, wurde ein einfacher Redirect-Service programmiert: Der RasPi ruft mit wget eine externe Webseite auf, diese speichert die IP-Adresse, und eine weitere Webseite leitet mit dem PHP-Befehl header("Location: http://$ip/"); (wobei $ip die gespeicherte IP enthält) auf den RasPi weiter. Ein (öffentlicher oder selbst programmierter) DynDNS-Dienst könnte Ähnliches leisten.

Die Telemetriedaten erscheinen benutzerfreundlich aufbereitet auf einer Webseite. Dazu läuft auf dem Raspberry Pi ein Apache-Webserver. Dieser lässt sich mitsamt aller benötigten Pakete mit dem Befehl aus Listing 5 einrichten

Listing 5

 

$ sudo apt-get install apache2 php5-mysql libapache2-mod-php5 mysql-server
DIESEN ARTIKEL ALS PDF KAUFEN
EXPRESS-KAUF ALS PDFUmfang: 8 HeftseitenPreis €0,99
(inkl. 19% MwSt.)
RASPBERRY PI GEEK KAUFEN
EINZELNE AUSGABE Print-Ausgaben Digitale Ausgaben
ABONNEMENTS Print-Abos Digitales Abo
TABLET & SMARTPHONE APPS Raspberry Pi Geek bei Google Play Readly Logo
Nach oben