Sonntag, 12. Januar 2014

Tag 5 - FTP und Kleinkram

Zwischendurch habe ich noch einen FTP-Dienst auf dem Raspberry installiert, um schneller Dateien hin- und herzuschieben. Und das geht so:

sudo apt-get install vsftpd
Außerdem müssen folgende Zeilen in der "/etc/vsftpd.conf" aktiviert / editiert werden:
anonymous_enable=NO
local_enable=YES
write_enable=YES
force_dot_files=YES

Danach den ganzen Spaß mit "sudo service vsftpd restart" in Schwung bringen und schon kann man von außen auf den Pi zugreifen - und das mit den Logins des Pi.


Außerdem habe ich inzwischen noch Zubehör gekauft: ein GPS-Modul GTPA010. Leider ohne Beine, muss ich also den Lötkolben schwingen. Außerdem noch diese praktischen Kabel, ein 2A Netzteil und den allseits bekannten Cobbler. Das macht die Bastelei insgesamt entspannter. Neue Kosten: ca. 45,- Euro. Läuft.

Tag 4 - I²C auf Anhieb

Ich habe schon erwähnt, daß im Sortiment auch ein Kompassmodul CMPS10 ist, mit dem man eben die Richtung, aber auch Neigung erfragen kann. Das kompakte Ding lässt sich über I²C, Seriell und PWM abfragen. Ich habe keine Ahnung was das alles bedeutet. Weiß aber, daß die Himbeere I²C kann und bringe sie dazu, daß sie das auch will:
sudo apt-get install python-smbus
sudo apt-get install i2c-tools
Falls sich in der Raspberry Installation die Datei "/etc/modprobe.d/raspi-blacklist.conf" befindet, muss man dort außerdem zwei Zeilen deaktivieren bzw. entfernen:
#blacklist spi-bcm2708
#blacklist i2c-bcm2708
Dann das Früchtchen neu starten und mit dem Befehl "sudo i2cdetect -y 1" gucken, ob das grundsätzlich erstmal funktioniert. Da erscheint dann eine Art Adresstabelle mit einer Menge Striche. Soweit gut.


Jetzt müssen wir den CMPS10 an die Beere 
knoten. Im Datenblatt findet sich u.a. nebenstehende Grafik: Ground, 3.3V, SDA (Daten) und SCL (Signal) finden sich auch am Raspberry - also ran damit. Die Adresstabelle sieht jetzt plötzlich anders aus:

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

Hurra, da erscheint der Sensor mit der Adresse 0x60. Läuft. Es ist mir fast schon unheimlich, wie einfach das ganze zu bewerkstelligen ist. Aber weiter im Text: Abfrage des Sensors mit Python.

Im Netz finde ich bei Daniel eine kleine Anleitung, wie man einen Drucksensor per I²C abfragt und ein weiteres Code-Beispiel (allerdings in C) für die Abfrage des CMPS10. Ich schaue nochmal ins Datenblatt, werfe alles zusammen und voilà! folgendes Script spuckt die gewünschten Werte aus:
import smbus
import time
bus = smbus.SMBus(1)
device = 0x60
    
while True:
  try:
    b1 = bus.read_byte_data(device, 0x02)
    b2 = bus.read_byte_data(device, 0x03)
    pitch = bus.read_byte_data(device, 0x04)
    roll = bus.read_byte_data(device, 0x05)
    pitch = pitch-256 if pitch > 127 else pitch
    roll = roll-256 if roll > 127 else roll
    print int(((b1 << 8) + b2) / 10), pitch, roll
    time.sleep(0.1)
  except:
    print "abbruch"
    break
Die Werte von Pitch (Nicken) und Roll (Rollen) sind vorzeichenbehaftet und müssen daher entsprechend "geschoben" werden. Die beiden Bytes B1 und B2 bilden laut Datenblatt zusammen einen Wert von 0 bis 3599 (also 0-359.9 Grad). Den bastel ich in der "print"-Zeile zusammen und kürze die Nachkommastelle weg. Läuft!

Tag 3 - erste Schritte mit Motor

Als eins der ersten Dinge möchte ich den Stepper Motor mit Board ausprobieren. Christoph hat eine schöne Anleitung geschrieben, die auch ein paar Details erklärt. Ich probiere das und versuche es mit ersten unsicheren Schritten in Python gleich etwas umzuschreiben. Nach einigem Stolpern habe ich nun ein Script, daß den Motor per Parameterübergabe eine bestimmte Anzahl Grad links- bzw. rechtsrum dreht.

Zur Parameterübergabe benutze ich OptionParser:

from optparse import OptionParser
parser = OptionParser("")
parser.add_option("-g", dest="g", help="")
(optionen, args) = parser.parse_args()
g = int(optionen.g)

Um die 4096 bzw. 8*512 Schritte des Motors auf 360° einer Umdrehung umzurechnen, multipliziere ich das einfach und rufe dann die passenden Steps vorwärts (rechtsdrehend) oder rückwärts (linksdrehend) mit der gewünschten Gradzahl g auf:

def turn_cw(g):
z = 11.3777 * g / 8
for i in range (int(z)):
for s in range (1, 9):
Step(s)

def turn_ccw(g):
z = 11.3777 * g / 8
for i in range (int(z)):
for s in range (8, 0, -1):
Step(s)

Kein schlechter Anfang will ich meinen. Ich bin ein bißchen stolz.
Endlich macht meine Beere was sinnvolles. ;-)

Samstag, 11. Januar 2014

Tag 2 - ab ins WLAN

Am nächsten Abend will ich die Abhängigkeit vom Kabel beenden und den WLAN-Schnuppi aktivieren. Da die Zahl der USB-Jünger nun langsam größer wird, hänge ich schnell noch einen 4er-Hub dazwischen (nochmal 10,- Euro) - jetzt haben alle Platz. Der EDIMAX wird auch auch gleich erkannt, bei der Datenreise findet sich eine feine Anleitung. Allerdings gibt es in meinem WLAN eine Besonderheit: sie ist unverschlüsselt, ohne Key, ohne Passwort, der Router lässt nur ausgewählte Geräte rein. Ich versuche drei Stunden lang, die Einstellungen der o.g. Anleitung entsprechend zu modifizieren: keine Chance, der Pi will sich nicht verbinden. Frust!

Am nächsten Tag bekomme ich einen Tipp - die "/etc/network/interfaces" muss folgendermaßen aussehen:

auto lo
iface lo inet loopback
iface eth0 inet dhcp
allow-hotplug wlan0
iface wlan0 inet dhcp
wireless-essid network-name

Jubel bricht aus - es läuft! Wichtig: unbedingt die WLAN-Sleep-Funktion mittels der "/etc/modprobe.d/8192cu.conf" deaktivieren. Dort hinein einfach die folgende Zeile schreiben und den Spaß neu starten:

options 8192cu rtw_power_mgnt=0 rtw_enusbss=0

In meinem Kopf entspinnen mögliche Aufgaben für die Himbeere, ich schaffe daher vorsorglich an: einen CMPS10 Kompass und Neigungssensor (EXP), zwei Stepper Motoren samt Board (Amazon), eine Reihe LEDs aus dem Sortiment bei Conrad, mehrere Infararot-Dioden und Fototransistoren (auch von Conrad). In der Kiste finde ich noch einen Servo (VSD-18MBWG). Von meinem Bruder bekomme ich außerdem einen MPU-6050 (Beschlunigungs- und Neigungssensor) und einen MPL3115A2 (Druck- und Höhensensor). Damit ist der Gabentisch reich gedeckt und viele kommende Abende verplant.

Kassensturz: die Ausgaben erhöhen sich um ca. weitere 60,- Euro.

Tag 1 - Auspacken, Anschließen

Ich hatte mir aus Begeisterung schon letztes Jahr einen Raspberry Pi Version 2 bestellt, der bis heute liegengeblieben ist. Jetzt soll er endlich in Betrieb gehen. Bis dahin sind aber diverse Probleme zu bewältigen, die ich kurz schildern möchte. Vielleicht ist das für den einen oder anderen hilfreich.

Erstens: es fehlt ein passender Monitor. Die Himbeere hat einen HDMI-Ausgang, meine alte Glotze aber nur VGA. Ich hole mir für 35,- Euro einen gebrauchten Belinea TFT mit DVI und sogar Lautsprechern dran. Läuft.

Zweitens: Maus & Tastatur die noch rumliegen, haben beide PS2-Stecker. Die Himbeere hat nur USB. Ansich kein Problem, jedoch funktionieren die Adapter nicht, also noch schnell eine einfache Cherry bei Cyberport geholt und aus dem Büro die Schokomaus entwendet. Läuft.

Drittens: müssen WLAN-Stick und für später gleich noch ein Bluetooth-Stick angeschafft werden, da man mit dem kleinen Brett sonst schlecht ins Netz kommt. Zunächste mache ich das oldschool mit einem Kabel, bin aber froh als die Sticks dann eintreffen. WLAN läuft natürlich nicht auf Anhieb, dazu später mehr.

Viertens: als Speicher soll eine alte 2GB-SD-Karte fungieren, ich spiele mir das NOOBS drauf und ... beim ersten Installieren von z.B. des Bluetooth Dongles zeigt sich: kein Platz mehr auf der SD-Karte. Hä? Nagut, ich renne nochmal schnell los, um mir eine 4GB-Karte zuzulegen, ohne vorher zu prüfen, dass die Karte nur zum Teil genutzt wird. Hinweise ergeben dann nämlich, dass die Karten nicht voll genutzt werden können, ohne mit viel Aufwand und Risiko an den Partitionen rumzuspielen - sinnlos!!! Meine Empfehlung daher: unbedingt gleich das Wheezy Image (etwas weiter unten auf der Seite) zur Installation nehmen, da lässt sich (im Gegensatz zum NOOBS) dann im Anschluss auch "expand rootfs" anwenden und sich so der ganze SD-Keks nutzbar machen.

Kleiner Überschlag, der bisherigen Ausgaben: ca. 130,- Euro. Läuft.
Das ganze spielt sich natürlich nicht an einem Tag ab und wieviele Stunden ich jetzt schon investiert habe, ohne das der Pi irgendwas sinnvolles von sich gegeben hat, möchte ich gar nicht wissen. Allein die Begeisterung hält an. :-)