Infos und Anleitungen

TommyB

Team Bitschubse
17. Mai 2010
2.151
80
48
40
127.0.0.1 ;)
Sprachen
  1. C#
  2. VB.Net
  3. LunaAVR
  4. Assembler
  5. Python
--- Bitte in diesem Thread keine Beiträge posten damit er übersichtlich bleibt ---
Außer natürlich ihr möchtet selber eine Anleitung hinzufügen. Aber bei Fragen oder Anmerkungen, da kann gerne ein neuer Thread aufgemacht werden oder der generelle "Laberthread" genutzt werden. Danke :)
Vieles steht zwar schon bereits dort drin, ich hab hier trotzdem nochmal alles ordentlich zusammen gefasst.

Also, als Erstes braucht man das gute Stück natürlich :)
Bei der Bestellung sollte man aber schon ein paar Kleinigkeiten bedenken.
  • Ich rate stark zu dem B Modell, zumindest wenn es der erste ist. Das ist etwas teurer, hat dafür aber 2x USB, doppelt so viel RAM wie das A Modell und einen Netzwerk Port. Man könnte zwar WLAN Sticks verwenden, nur gestaltet sich die Installation des ggf. benötigten Treibers etwas komplizierter ;)
  • Bestellt gleich einen aktiven USB Hub mit (sprich mit Netzteil) sofern ihr keinen mehr über habt. Der Raspberry kann nur knapp über 100mA an den USB Port(s) ausgeben, das reicht für Tastatur und Maus, aber ist nicht genug für WLAN, externe Festplatten oder DVB-T Sticks. Netter Nebeneffekt: Ihr habt gleich ne Stromquelle für den Kleinen.
  • Schaut nach ob ihr noch USB und Netzwerkkabel habt (nicht so wie ich ^^)
  • Jetzt braucht ihr noch eine SD Karte. Sie muss mindestens 2GB haben (dann ist die aber schon fast voll), 4 oder 8 sind besser. Zu groß tut nicht not, man kann wie gesagt auch externe Platten anschließen. Man sollte aber nicht so sehr auf den Preis sondern eher auf die Geschwindigkeit der Karte achten. Ich hab eine Class 6 drin mit rund 12MB/s, das reicht normalerweise aus, außer man will was von DVB-S aufnehmen und darauf speichern.
  • Fehlt noch das Betriebssystem für den kleinen, also eine Internetverbindung ist von Nöten.

Wenn der Kleine denn endlich da ist kanns auch schon direkt los gehen. Zumindest fast :)
Erstmal muss natürlich das Betriebssystem auf die Karte drauf und da gibt es ein paar mehr von die sich alle etwas unterscheiden. Ich hab mal diverse angetestet (wenn nicht direkt verlinkt alle auf der Homepage vom Raspberry Pi zu finden):
  • Raspbian "Wheezy". Nicht umsonst für Anfänger empfohlen, es ist die beste Basis die ich bisher getestet habe. Sie startet in der Befehlszeile ein kleines Config-Programm (raspi-config) wo man einiges einstellen kann, vor allem ob zukünftig in Konsole oder in LXDE (eine Windows-ähnliche Oberfläche) gestartet werden soll. Auch kann hier einfach die kleine Image (meißt 2GB) auf die echte Größe der Karte vergrößert werden. Sinnvoll, sonst wäre der Speicher ja verschwendet ;) Andere Distributionen machen das teilweise automatisch beim ersten Start.
  • RiscOS. Klein und startet schnell (grafische Oberfläche), hat aber gewaltige Probleme wenn man Maus oder Tastatur von Microsoft anschließt. Daher konnte ich es nicht weiter testen.
  • ArchLinux. Wer sich wenig mit Linux auskennt sollte definitiv die Finger davon lassen. Es bootet in die Kommandozeile, das wars. Keine Hilfe, keine Infos, nix. Ideal für Leute mit Maus-Phobie :D
  • Pidora. Man könnte es mit Raspbian vergleichen, obwohl es komplett anders ist. Zum Beispiel ist die "Installationsroutine" schöner gestaltet, also das was man nach dem ersten Start sieht. Pidora setzt als GUI auf XFCE statt LXDE was Raspbian nutzt. Das ist etwas langsamer aber besser. Auch ist hier anders dass man bevor was geht immer wieder das Passwort eingeben muss was im laufe der Zeit nervig wird. Verschiedene Befehle sind auch anders, so setzt es auf yum statt apt-get was allein schon bei manchen nicht so versierten für Verwirrung sorgen könnte. ssh und xrdp funktioniert auch nicht ohne Hand anlegen.
  • RaspBMC. Eher ein dediziertes System für die Medienwiedergabe. Quasi macht man damit seinen Pi zur besseren (und billigeren) AppleTV Box. Startet direkt in XBMC und hat sonst keine grafische Oberfläche. Für Leute die Linux nicht grad so kennen und mehr machen wollen eher weniger geeignet.
  • OpenElec. Es ist wie RaspBMC, ich sehe keine Unterschiede außer dass Menüeinträge und die per default gesetzten rss Feeds anders sind. Aber einen gewaltigen Unterschied gibt es. Man läd sich kein fertiges Image runter sondern muss erst selber die SD Karte von Hand neu partitionieren (~130MB FAT32, Rest ext4). Unter Windows geht das nicht ohne Zusatztools wie MiniTool Partition Wizard Home Edition. Dann noch einzelne bestimmte Dateien wo anders hin kopieren als sie im Archiv sind... Argh... Es gibt bestimmt Unterschiede, aber allein schon nach der Installations-Prozedur war ich entnervt. So wirklich flüssig lief es bei mir auch nicht, da war RaspBMC besser.
Die Anmeldedaten (also Benutzername und Passwort) sind bei jeder Distribution anders, schaut also nach.
Ich werde hier auch noch mal (wenn fertig) ein vorkonfiguriertes Image hoch laden was auf dem Wheezy basiert, jedoch mit speziellem Augenmerk auf Multimedia Wiedergabe und vor allem den GPIO Pins (nebst SPI und I²C/TWI). Das interessiert hier wohl die meisten ;)

Wie zu erraten ist, am besten mit dem Raspbian Wheezy starten :)
Es gibt 2 Versionen davon, mit FPU Unterstützung (schneller) und ohne (lahm, aber denn läuft auch Java auf dem Kleinen). Die "Installation" ist denkbar einfach und bei allen Distributionen (außer OpenELEC) die selbe. In der .zip Datei liegt eine .iso drin, die muss auf die Karte. Dazu braucht man (unter Windows) ein kleines Tool, unter Linux reicht dd. Anleitungen und Download sind auf der Homepage vom Raspberry Pi zu finden.

Was man auch noch bedenken sollte:
Der Kleine ist locker fähig Filme in Full-HD wiederzugeben und hat dabei noch genug Ressourcen für Anderes über. Aber nur dann wenn die GPU das Video dekodiert; die CPU ist dafür zu schwach. Dazu muss für MPEG2 und VC-1 (das ist das Silverlight / WMV Format) der Codec erworben werden. Beide zusammen kosten unter 5€, ist also erschwinglich :)
Bestimmt für ein paar etwas ärgerlich: Bezahlt werden muss per PayPal. Ich gehe hier in den nächsten Beiträgen aber noch näher darauf ein :)

So, und jetzt?
Ich würde jetzt erstmal Updates installieren. Dazu braucht der Kleine ne Internet Verbindung.
Dazu eine Konsole öffnen und diese Befehle eingeben:
Code:
sudo apt-get update
sudo apt-get dist-upgrade
sudo apt-get upgrade
sudo shutdown -r now
Da das ganze recht lange dauert (~1 Stunde) wäre es jetzt eine gute Idee mal den Raspberry herunter zu fahren und ein Image, also ein Backup von der Karte zu ziehen. Denn muss man nicht immer wieder bei 0 anfangen :)

Ich würde mal anraten einfach ein bisschen rum zu spielen. Hilfreich dabei sind:
  • Synaptic Package Manager (sudo apt-get install synaptic). Das erleichtert das finden und austesten von neuen Programmen.
  • XRDP (sudo apt-get install xrdp). Damit kann man bequem vom (Windows) PC über RemoteDesktop auf dem kleinen arbeiten (grafisch). Start, (ausführen), mstsc
  • SSH. Ist bereits drauf, kann wenn noch nicht geschehen einfach über "sudo raspi-config" aktiviert werden. Als Client empfehle ich Putty.
Für XRDP und SSH braucht man natürlich die IP Adresse. Die kann man am einfachsten in der Konsole mit dem Befehl "ifconfig" sehen.


Für diesen Post ists erstmal genug.
In den nächsten gehts denn um Multimedia und den GPIO Port. Aber ich brauch nu erstma n Kaffee :)
Als kleiner Einstieg sollte es aber schon reichen.
 
Hilfe, komisches Bild :(

Der Titel verräts schon :)

Ich weiß nicht wie viele das betrifft, mich schon. Ich habe mein Pi an einem Samsung SyncMaster XL2370 (via HDMI). Ich hatte da unter Windows aber auch schon Probleme dass der nicht richtig erkannt worden ist; erst nach Treiberinstallation. Vielleicht wollte Linux den auch nicht sofort haben. Ich hatte rundum schwarze Balken und das Bild war "matschig".

Kleine Info am Rande:
Bei jeder Distribution die ich bisher getestet hab ist es so dass auf der Image (also der SD Karte) 2 Partitionen liegen. Eine kleine FAT16 (eingehängt als /boot) und der Rest als Ext4 (/). Die FAT16 ist die interessante. Darin liegt eine config.txt die (laut Angaben im Netz) direkt von der CPU (wohl eher vom Bootloader? Egal...) ausgewertet wird. Diese Datei kann man so unter Windows im WordPad (nicht Notepad, der kommt mit Linux Zeilenumbrüchen nicht klar!) öffnen und bearbeiten.

Man öffnet also die config.txt und liest sich die am Besten erstmal durch, vieles ist bereits kommentiert.
Eine komplette Liste der Einträge findet man hier.

In meinem Fall musste ich ein paar Sachen von Hand eintragen.
disable_overscan=1 hat mein Problem mit den schwarzem Rand leider nicht gelöst, und die Auflösung stimmte auch nicht. Daher hab ich den Kleinen mit diesen Zeilen dazu gezwungen:
Code:
overscan_left=-48
overscan_right=-48
overscan_top=-48
overscan_bottom=-48
framebuffer_width=1920
framebuffer_height=1080
Das -48 scheint der richtige Wert für den Overscan zu sein (gedacht ist das für Fernseher damit das komplette Bild angezeigt wird. Ist bei nem Monitor natürlich nutzlos). Die Auflösung (die framebuffer Einträge) müsste natürlich für den jeweiligen Monitor verändert werden.

Das betrifft jetzt die Ausgabe über HDMI. Über Composite kann ich nichts sagen, ich hab kein Fernseher. Vielleicht mag das mal ein Anderer austesten und mir per PM Bescheid geben, denn füge ich das hier mit hinzu.

Wo wir grade schon bei der config.txt sind... Man kann den damit auch übertakten.
Das wären zum Beispiel meine Einstellungen (800 statt 700MHz)
Code:
arm_freq=800
core_freq=350
sdram_freq=450
over_voltage=0
Damit läuft der auch ohne zusätzliche Kühlung sehr stabil und wird nicht zu heiß. In einem Forum hab ich einen gesehen der es auf 1250MHz geschafft hat 0.0 Aber nur mit aktiver Kühlung und aktiviertem over_voltage, sprich die CPU wird gut gequält. Stellt sich nur die Frage wie lange die das mit macht... Naja, jedem das seine :)

Mit in diese Datei gehören übrigens noch die Codec Keys (wenn gekauft). Es steht zwar auch in der E-Mail drin die man bekommt, aber so schauts denn aus (Codes geändert):
Code:
decode_MPG2=0x1234567
decode_WVC1=0x89abcdef
Aber mehr dazu etwas später etwas weiter unten :)
 
I²C/TWI und SPI Einrichtung

Jetzt geht es um I²C (auch TWI genannt) und um SPI.

Ich gehe hier davon aus dass bereits das System auf dem neustem Stand ist (update, upgrade, dist-upgrade. Siehe oben).

Um den I²C Support zu installieren müssen wie gewohnt einige Schritte gemacht werden.
Wie gewohnt also in die Konsole und dann diese Zeilen eingeben: (wer SSH installiert hat kann die etwas komfortabler einfach kopieren und in Putty einfügen)
Code:
sudo apt-get install python-dev
sudo apt-get install python-rpi.gpio
sudo apt-get install python-smbus
sudo apt-get install i2c-tools

Danach müssen noch ein paar Dateien bearbeitet werden. Ich bleibe mal hier in der Konsole / SSH.
Code:
sudo nano /etc/modules
Hier müssen 2 Zeilen eingefügt werden:
Code:
i2c-bcm2708
i2c-dev
Schaut denn so aus:
i2cspi_1.png

Welch Wunder, es ist Linux. Also das war noch nicht alles. Also noch einmal eine Datei bearbeiten:
Code:
sudo nano /etc/modprobe.d/raspi-blacklist.conf
Darin die folgenden Zeilen auskommentieren (sprich ein # davor setzen):
Code:
blacklist spi-bcm2708
blacklist i2c-bcm2708
RPi_I2C_2.png
Das aktiviert SPI und I²C nach einem Neustart (sudo shutdown -r now)
Will man eins von Beiden nicht nutzen kann man die # natürlich davor lassen, umso mehr freie Pins hat man denn für andere Dinge.

SPI und I²C/TWI müssen selbstverständlich auch verkabelt werden.
Was wo liegt hab ich hier mal grafisch dargestellt:
RPi-GPIO-Rev1.png (rev. 1) RPi-GPIO-Rev2.png (rev. 2)
Wichtig ist hier aber mehreres. Es gibt 2 Revisionen. Diese Grafiken zeigen die Pin Belegungen für beide Revisionen. Leider unterscheiden die sich etwas. Das Hauptmerkmal woran man es erkennt ist dass bei Revision 1 der P5 fehlt (also garnicht existent ist, aufgelötet ist der auch in Revision 2 nicht).
P5 ist dieser hier, direkt neben den GPIO's:
P5.jpg
Bei Revision 1 sind folgende Pins anders belegt:
Der I²C Bus ist bei Rev. 1 0, bei Rev. 2 1. (Rev. 2 hat dafür 2x I²C)
GPIO 0 + 1 (in Rev. 1) wurden zu GPIO 2 + 3
GPIO 21 (in Rev. 1) wurde zu GPIO 27 und hat PCM DOUT verloren (liegt jetzt auf P5).
Wer Python verwendet (kommt im nächstem Beitrag) braucht das aber kaum zu beachten weil man dort einstellen kann ob man die GPIO Nummer benutzen will oder die Pin Nummer.
Vorsicht beim P5! der ist so gelegt dass der auf die Unterseite gelötet werden müsste. Selbstverständlich kann man den auch oben hin löten wenn man ihn nutzen will, aber dran denken dass die Pins denn Spiegelverkehrt sind!

Zur Hardware noch eine Kleinigkeit:
Die 3,3V Leitung sollte nicht zu stark belastet werden (50mA sind angegeben, für alle zusammen) und die 5V gehen mit durch die interne Sicherung, zu viel sollte auch hier also auch nicht gezogen werden. Für I²C wird ein 1,8K Widerstand für SCL und SDA vorgeschlagen (PullUp).
Und ganz wichtig: Die Pins sind nicht 5V tolerant! Der Pi arbeitet mit 3,3V. Gab mehrere die es drauf ankommen haben lassen. Kurz hats funktioniert. Dann war der Port Pin tot. Das wäre natürlich ärgerlich ;)

I²C kann man jetzt schon testen :)
Mit dem Befehl
Code:
sudo i2cdetect -y 1
kann man den I²C Bus nach angeschlossenen Clients absuchen lassen. Wie oben bereits erwähnt, Board Revision nutzt I²C Port 0, Revision 2 die 1. Solltet ihr ein älteres Modell erwischt haben müsst ihr die 1 am Ende des Befehls in 0 ändern.

Wenn hier Zahlen innerhalb der Tabelle auftauchen läufts, wenn nicht, naja ... denn halt nicht :)
Noch mal die Verkabelung prüfen. Aber bei mir hat es auf Anhieb geklappt.
Ich hätte hier jetzt noch ein Bild angehängt, aber ich darf nicht mehr (hmpf!). Landet mit im nächstem Post :)

Wie man SPI, I²C und GPIO ansteuert kommt im nächstem Beitrag :)
 
I²C / TWI und SPI ansteuern

Vorweg hier noch das Bild was in den früheren Beitrag mit rein sollte:
RPi_I2C_1.png
Hier zu sehen dass am I²C Bus 0 nichts gefunden wurde (kein Wunder, ist auch nichts angeschlossen), aber am Bus 1 wurde er fündig (an den Adressen 0x20 und 0x27).

Sooo, nachdem nun alles geupdatet, installiert, vorkonfiguriert, ... ist gehts jetzt an die Verwendung :)

Prinzipiell kann man die Port Pins wie SPI und I²C/TWI überall mit ansteuern. C(++), PHP, Python und (etwas eingeschränkt) sogar über die Konsole. Ich hab auch schon mal etwas gehört dass alles auch mit C# gehen soll (via dem Mono Framework).

Ich bin kein großer Fan von C-ähnlichen Sprachen mit den ganzen rumgeklammere, daher fiel meine Wahl auf Python.
Das ist an die Basic Syntax angelehnt.

Bei der Raspbian Wheezy ist bereits IDLE vorinstalliert, das ist eine grafische Entwicklungsumgebung für Python. Wichtig ist nur dass man die mit Root Rechten startet, sonst hat man keinen Zugriff auf die GPIO Pins.
Der geschmeidigste Weg ist wohl eine Verknüpfung auf dem Desktop zu erstellen (geht im Startmenü mit nem Rechtsklick) und diese dann im Leafpad öffnen (das ist n Texteditor). In der Zeile exec= nach dem = "sudo " einfügen (ohne "" natürlich).

Los gehts mit ganz was billigem, eine Duo-LED und 2 Taster am GPIO. Ich hab noch mal ein bisschen mehr Quelltext mit drin. Das waren meine ersten Schritte, auch mit dieser Sprache. Es sollte aber alles verständlich sein. Wenn nicht einfach hier mal fragen :)
Code:
# Example script how to use GPIO on Raspberry PI (and to use Python).
# For clearance I close blocks like try with a comment like in Visual Basic
# even this is not required.
#
# Wireing for this example:
#   Pin  7: Duo-LED Red
#   Pin  9: Duo-LED Kathode
#   Pin 11: Duo-LED Green
#   Pin 14: Switch 1, a
#   Pin 16: Switch 1, b
#   Pin 17: Switch 2, a
#   Pin 18: Switch 2, b
#
# Switch 1 turns on the green LED, Switch 2 turns it off while the red LED is flashing with 1hz.



#Import sys (for version & error info) and time (for sleep) modules
import sys
import time



# Import GPIO module
try:
    import RPi.GPIO as GPIO
except RuntimeError:
    print("Error importing RPi.GPIO! This is probably because you need " + \
          "superuser privileges. You can achieve this by using 'sudo' to " + \
          "run your script.")
except:
    print("Unexpected error: ", sys.exc_info()[0])
#end try



# Print some version info
print("Installed Python version: %s.%s.%s" % sys.version_info[:3])
print("Installed GPIO Version:   " + GPIO.VERSION)
print("Raspberry PI revision:    " + str(GPIO.RPI_REVISION))



# Set up pin numbering. BCM=Pin number from the controller, BOARD=Pin number from the header.
GPIO.setmode(GPIO.BCM)

# Set warnings on (if a pin is already used by another script). It's the default anyway.
GPIO.setwarnings(True)

# Setup two pins as input.
# Port 23 (pin 16) will be pulled up (3.3V), Port 24 (pin 18) down.
GPIO.setup(23, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.setup(24, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)

# Setup two pins as output.
GPIO.setup(17, GPIO.OUT)        # GPIO 17 (pin 11)
GPIO.setup(4, GPIO.OUT)         # GPIO 4  (pin 7)



# Callback if button 1 is pressed
def key1_down(channel):

    GPIO.output(17, True)

#end def



# Callback if button 1 is pressed
def key2_down(channel):

    GPIO.output(17, False)

#end def



# Subroutine which is called in the main application loop that simply turns an LED
# on GPIO4 (pin 7) on and off. Also demonstrates the sleep command.
def led_blink():
    GPIO.output(4, True)
    time.sleep(0.5)
    GPIO.output(4, False)
    time.sleep(0.5)
#end def



# Add event listeners to the 2 input signals (like interrupt service routines)
GPIO.add_event_detect(23, GPIO.FALLING, callback=key1_down)
GPIO.add_event_detect(24, GPIO.RISING, callback=key2_down)



# Main application loop
try:
    while True:
        led_blink()
    #end while
except KeyboardInterrupt:
    # Ctrl+C pressed, cleanup
    GPIO.cleanup()
#end try
    
# At the end of the program and on exceptions always clean up.
GPIO.cleanup()



Weiter gehts mit I²C :)
Ich hab einfach einen PCF8574 genommen (8 Bit port expander). Die Verkabelung sollte klar sein. GND an GND, VCC an +3,3V, SCL an SCL und SDA an SDA (beide mit 1,8K PullUp Widerstand an VCC). Die Adress-Bits hab ich auf GND gelegt, resultiert in der Adresse 0x20. Und eine LED an eins der Datenpins.

Hier ist der python Quelltext. Hoffe ich hab den verständlich genug kommentiert.
Code:
# I²C test script
#
# Uses an PCF8574 (8 Bit port expander). Address is 0x20 (all address pins low).
# Don't forget the pullUp's on SCL and SDA (even it may work without).
#
# Also, this script uses the GPIO port (of course). You must run it as root:
#  sudo python I2CTest.py
# otherwise it will crash because a user account don't have permissions for the hardware.
#
# Complete list of I2C commands is available here:
#  http://wiki.erazor-zone.de/wiki:linux:python:smbus:doc

# Import I2C module (jeah, it's called smbus here)
import smbus
import time                 # for time.sleep
import RPi.GPIO as GPIO     # to detect the board revision

# Some "constants"
PcfAddr = 0x20          # the I²C slave address of the PCF8574
I2C = smbus.SMBus(1)    # set to 0 for revision 1 boards, 1 for revision 2

# You can also detect the revision to use the correct port for each model
if str(GPIO.RPI_REVISION) == 1:
    I2C = smbus.SMBus(0)
else:
    I2C = smbus.SMBus(1)
#end if

# Let's read the pin state and print it (binary format)
current = I2C.read_byte(PcfAddr)
print("Current pin state: 0b" + str(bin(current)[2:].zfill(8)))

# Now let's toggle the output pins in a loop
print("Toggle output pins. Press CTRL+C to abort")
try:
    while True:
        I2C.write_byte(PcfAddr, 0xFF)
        time.sleep(0.5)
        I2C.write_byte(PcfAddr, 0x00)
        time.sleep(0.5)
    #end while
except KeyboardInterrupt:
    print("Exiting...")
    I2C.write_byte(PcfAddr, 0x00)
#end try

SPI ist ähnlich simpel. Allerdings kann ich jetzt nur ein Pseudo-Beispiel hier rein setzen. Ich habe nur ein LCD was via SPI angesprochen wird, da wäre der Code etwas zu komplex als Beispiel. Die Verkabelung ist genau so einfach, gibt ja nur MOSI, MISO, SCLK und (beim Raspberry Pi) 2 Enable Signale. Letzteres wird automatisch gesetzt, man muss sich also nicht drum kümmern, nur beim Initialisieren muss man angeben welche Enable Leitung genutzt werden soll (0 oder 1).
Code:
# Open SPI port 0, CE 0, Mode 3
spi = spidev.SpiDev()
spi.open(0,0)
#spi.lsbfirst = True    # sad but true, this is not supported
spi.mode = 3
spi.bits_per_word = 8
spi.max_speed_hz = 10000 # DEBUG: Limit SPI speed to 10KHz

...

# Create data to send and xfer it
TxData = [0x01, 0x02, 0x03]
RxData = spi.xfer2(TxData) # xfer 3 bytes using SPI

# Display the received data
for b in RxData:
    print bin(b)
#end for

...

# Helper routine which reverses the bits in a byte (if LSB first is required which is not supported by the Raspberry PI)
def ReverseBits(byte):

    byte = ((byte & 0xF0) >> 4) | ((byte & 0x0F) << 4)
    byte = ((byte & 0xCC) >> 2) | ((byte & 0x33) << 2)
    byte = ((byte & 0xAA) >> 1) | ((byte & 0x55) << 1)
    return byte

#end def

Ich werde in einem anderem Thread die Tage noch mal ausführlichere Codebeispiele posten. Die werden auch alle mit auf der Image liegen (hatte ich oben ja schon mal erwähnt) :)
 
Ohne umstöpseln auf Dateien zugreifen (FTP)

Heute geht es um die Einrichtung des FTP Servers, auch wenn die denkbar einfach ist.
Es kommt ja häufiger vor dass man mal Dateien bearbeiten möchte, z. B. wenn man etwas installiert hat was nun nach der Ersteinrichtung lechzt. Man hat die Webseite mit Informationen aber am PC offen, also fällt Copy & Paste flach. Hmpf.

Es gibt mehrere Möglichkeiten, eine wäre Samba (quasi die Dateifreigabe unter Windows). Ich hatte in der Vergangenheit damit aber nur negative Erfahrungen gemacht und so wirklich gut laufen soll es heute immer noch nicht. Aber man kann ja als Alternative FTP nutzen. Hier würde sich ProFTPD anbieten.

Kleine Anmerkung: Ich gehe jetzt mal davon aus dass ihr euren eigenem Netzwerk vertrauen könnt :)
Auf sicherheitsrelevante Teile gehe ich hier nicht ein. Wer darauf acht legen möchte kann auf der Homepage von ProFTPD mehr Infos dazu finden.

Um den FTP Server zu installieren genügt schon ein Befehl
Code:
sudo apt-get install proftpd
Während der Installation wird man gefragt ob man den Server als "standalone" also eigenständig, oder durch inetd laufen lassen will. Jede hat so ihre Vor- und Nachteile. Ich empfehle hier aber die standalone Version.

Viel Konfiguration ist für den einfachen Betrieb nicht nötig. Aber die Konfig-Datei liegt in "/etc/proftpd/proftpd.conf".
Um diese zu bearbeiten:
Code:
sudo nano /etc/proftpd/proftpd.conf
Man könnte hier z. B. UseIPv6 und IdentLookups auf off schalten (beschleunigt die Verbindungen etwas), den ServerName ändern, und andere lustige Sachen.
Wenn man diese Zeile mit einfügt wird nochmal etwas an Geschwindigkeit herausgekitzelt:
Code:
UseReverseDNS off

Nachdem die Datei bearbeitet und gespeichert ist muss der Dienst neu gestartet werden
Code:
sudo /etc/init.d/proftpd restart

Jetzt sollte es möglich sein mit Programmen wie FileZilla auf das Dateisystem des Kleinen zuzugreifen. Anmeldedaten sind die vom System.
Die Datenübertragungsrate ist erstaunlich hoch, die 100MBit werden voll ausgelastet (sprich ~10MB/s, vorausgesetzt die Karte ist schnell genug).


Jetzt noch das ultimative non+ultra :)

Man kann diese "Freigabe" unter Windows auch als Laufwerk einbinden.
Dazu braucht man aber ein Zusatztool. NetDrive wäre da die Lösung dafür. Das Programm läuft auch unter Windows 7 x64 ganz gut und ist für Privatanwender kostenlos.

Die Einrichtung ist ähnlich wie bei jedem FTP Client. Einzig anzumerken ist dass der Server immer im Home Verzeichnis startet. Gibt man nur die IP als Server ein ist man darauf "gefesselt". Wenn man aber die url eingibt und mit // beendet (z. B. ftp : // 192.168.58.6//) landet man im Stammverzeichnis.
NetDrive 1.3.4.0.png
Eine Kehrseite gibt es aber doch. Während mit FileZilla alles fluppt ist es mit NetDrive lahm wie Sau, ich komm nur auf ~1,5MB/s, also noch nicht mal genug um Filme darüber zu schauen. Leider ist NetDrive aber die einzige kostenlose Möglichkeit für diesen Zweck. Naja, für kleine Dateien reicht es ja :)
 
I²C, die 2.

Bei meinen Experimenten mit I²C EEPROMs bin ich doch sehr schnell an die Grenzen des oben genannten SMBus Plugins gestoßen.
Aber es gibt ein weiteres Plugin (oder Modul) was ebenfalls alles bereit stellt und auch besser dokumentiert ist: quick2wire.

Die Installation ist recht einfach. Erstmal (wie immer) ist es anzuraten den Raspberry wieder up2date zu bekommen. Wie steht im erstem Post.
Dann müssen die Keys installiert werden:
Code:
curl -L  https://q2wi.re/swkey | sudo apt-key add -
# Hinweis: Der Befehl funktionierte bei mir nicht. Ich musste erst den Link aufrufen (ist eine Weiterleitung) und die echte url einfügen. Also:
curl -L  https://raw.github.com/quick2wire/quick2wire-software-users/master/software@quick2wire.com.gpg.key | sudo apt-key add -
Danach muss noch eine Datei bearbeitet werden:
Code:
sudo nano /etc/apt/sources.list
Hier diese Zeilen am Ende einfügen:
Code:
# Quick2Wire Software
deb http://dist.quick2wire.com/raspbian wheezy main 
deb-src http://dist.quick2wire.com/raspbian wheezy main
Mit Strg+O speichern und mit Strg+X wieder raus.
Jetzt die Paketlisten aktualisieren und die 2 Pakete installieren:
Code:
sudo apt-get update
sudo apt-get install quick2wire-gpio-admin
sudo apt-get install quick2wire-python3-api

Wichtig zu wissen: Das funktioniert nur mit Python3 (SMBus läuft dagegen nur mit Python2).
Bei einigen Entwicklungsumgebungen muss man das umstellen da per Default immer die v2 genommen wird.
Ich nutze Geany. Da musste ich unter "Erstellen" - "Kommandos zum Erstellen konfigurieren" beide Befehle von "python ..." in "python3 ..." ändern. Und dann klappt das mit dem Nachbarn :)

Auf der Homepage (oben bereits verlinkt) sind im Blog schon viele Beispiele zu finden. Wer mehr Hilfe braucht kann den Python internen Hilfebetrachter verwenden oder (wie ich finde) komfortabler in den Quelltext auf GitHub rein schauen. Ein (etwas komplexeres) Beispiel um I²C EEPROMs hab ich hier schon in einem anderem Thread gepostet.

quick2wire kann auch die GPIO und SPI Pins ansteuern, dies habe ich allerdings noch nicht probiert. Kommt vielleicht noch :)
 
Um es mal wieder etwas aktuell zu halten ;)

Ich habe meinen PiZero jetzt mit Jessie neu aufgesetzt (ich habe mich erstmal für die Lite Version ohne Desktop entschieden).
Im Laufe der Zeit hat sich ein bisschen was geändert, wenn auch nur minimal. Aber ich poste hier noch mal die wichtigsten Schritte um alles (Python, GPIO, SPI, I2C) zum Laufen zu bekommen:

Code:
# OS updaten
sudo apt-get update
sudo apt-get dist-upgrade
sudo apt-get update
sudo shutdown -r now

#--- Neustart abwarten! ---

# Python 2 und 3 installieren
sudo apt-get install python-dev python3-dev
sudo apt-get install python-pip python3-pip

# GPIO Support
sudo apt-get install python-rpi.gpio python3-rpi.gpio

# I2C Support
sudo apt-get install python-smbus python3-smbus libi2c-dev

# SPI Support
wget https://github.com/Gadgetoid/py-spidev/archive/master.zip
unzip master.zip
rm master.zip
cd py-spidev-master
sudo python setup.py install
sudo python3 setup.py install
cd ..
sudo rm -f -r py-spidev-master

# WireingPi (bisher noch nichts mit gemacht, klingt aber nicht schlecht)
sudo apt-get install git-core
git clone git://git.drogon.net/wiringPi
cd wiringPi
./build
cd ..
rm -f -r wiringPi

Sollte fürs Erste reichen ;)
 
Zuletzt bearbeitet:
Über FTP hatte ich ja schon früher geschrieben.
Es gibt aber noch andere Möglichkeiten Dateien zwischen dem Pi und PC hin und her zu schaufeln.
Eine Andere wäre der Samba Server (Unter Windows bekannt als "Datei und Druckerfreigabe")

Die Installation ist sehr einfach:
Code:
sudo apt-get install samba samba-common-bin

Die Konfiguration gestaltet sich etwas schwieriger, da man es doch sehr komplex aufbauen kann mit verschiedenen Logins, mehreren Freigaben, Domains, …
Die Konfigurationsdatei ist aber kommentiert und es gibt unzählige Hilfeseiten im Netz zu diesem Thema (zum Glück).

Für meine Zwecke reicht aber ein simples "hau einfach rein" Verzeichnis, auf das anonym zugegriffen werden kann.
Dafür habe ich mir das Verzeichnis /share erstellt und jedem Rechte hierrauf gegeben:
Code:
sudo mkdir /share
sudo chmod 0777 /share
Dann muss die Konfigurationsdatei bearbeitet werden:
Code:
sudo nano /etc/samba/smb.conf
Hier am Ende der Datei folgendes einfügen:
Code:
[share]
  path = /share
  browseable = yes
  read only = no
  writeable = yes
  guest ok = yes
und den Samba Server hiermit neu starten:
Code:
sudo /etc/init.d/samba restart

Sicher ist das natürlich nicht! Aber für (m)ein privates Heimnetzwerk genug.

Jetzt kann man sich einfach vom (Windows) PC per \\IpAdresse darauf verbinden oder sogar ein Netzwerklaufwerk erstellen. Wie das unter Linux / MacOS aussieht… Vermutlich ähnlich :)
 

Über uns

  • Makerconnect ist ein Forum, welches wir ausschließlich für einen Gedankenaustausch und als Diskussionsplattform für Interessierte bereitstellen, welche sich privat, durch das Studium oder beruflich mit Mikrocontroller- und Kleinstrechnersystemen beschäftigen wollen oder müssen ;-)
  • Dirk
  • Du bist noch kein Mitglied in unserer freundlichen Community? Werde Teil von uns und registriere dich in unserem Forum.
  •  Registriere dich

User Menu

 Kaffeezeit

  • Wir arbeiten hart daran sicherzustellen, dass unser Forum permanent online und schnell erreichbar ist, unsere Forensoftware auf dem aktuellsten Stand ist und der Server regelmäßig gewartet wird. Auch die Themen Datensicherheit und Datenschutz sind uns wichtig und hier sind wir auch ständig aktiv. Alles in allem, sorgen wir uns darum, dass alles Drumherum stimmt :-)

    Dir gefällt das Forum und unsere Arbeit und du möchtest uns unterstützen? Unterstütze uns durch deine Premium-Mitgliedschaft!
    Wir freuen uns auch über eine Spende für unsere Kaffeekasse :-)
    Vielen Dank! :ciao:


     Spende uns! (Paypal)