Schlagwort-Archive: Raspberry

Primzahlen berechnen

Vor wenigen Tagen bekam ich eine (größere) Primzahl mit 91 Stellen vorgelegt.

Das weckte meinen Ehrgeiz: Bis zu welcher Größe kann man denn auf einem RaspberryPi und mit Python Primzahlen im Sekundenbereich berechnen/finden oder bestätigen?

In meinen Tests konnte ich für Zahlen bis 1.000.000.000.000 relativ locker ausprobieren, ob es sich um eine Primzahl handelt oder nicht, bei 3 Nullen mehr sollte ich mir dann einen Kaffee gönnen ……

Das „Sieb des Eratosthenes“ gelingt auf dem Raspberry bis 9.999.999 recht gut, die erzeugte Liste hat dann 664579 Primzahlen und benötigt ungefähr 40 MByte Speicher. Damit kann man bequem 7-stellige Zahlen in ihre Primfaktoren zerlegen oder 14-stellige Primzahlen testen. Und auch ein Laie wie ich kann den Ansatz nachvollziehen.

Falls man mal eine Primzahl braucht, kann man mit diesen einfachen Verfahren einen Bereich von Zahlen testen und findet dann auch relativ schnell eine Primzahl im gewünschten Größenbereich.

Allerdings fehlen mir immer noch gut 70 Stellen zur vorgegebenen Primzahl ….

Vielleicht sollte ich mich mal mit speziellen Verfahren für größere Primzahlen beschäftigen. Zum Beispiel mit Mersenne-Primzahlen und dem dazu passenden Lucas-Lehmer-Test.

Der Raspberry im Internet

Auf meinem RaspberryPi läuft seit einiger Zeit der WEB-Server lighttpd, ist aber nicht von außen erreichbar. Ich wollte ja nur einmal mit HTML, PHP und CGI/Python spielen …

Aber zumindest testweise wollte ich jetzt aus dem freien Internet heraus einmal erreichbar sein. Also ran an die Netzwerk-Umgebung.

Mein Ansatz: Ich bin mit meiner Fritzbox über Vodafone/KD mit dem Internet verbunden, aber hatte dort als normaler Kunde nur ein IPv6-Anschluss mit einer DS-Lite-Komponente für die IPv4-Verbindungen. Das reicht wohl in vielen Fällen aus, nicht aber, wenn man frei von außen in das Heimnetz hineinkommen will. (Zumindest bei mir ging es nicht, andere Experten bestätigten das Problem. Die Dokumentation war dort sehr schwammig.)

Ich bekam aber auf einen Anruf hin von Vodafone/KD ein „Upgrade“ auf echtes Dual-Stack mit einer zugewiesenen IPv4 und einer zugewiesenen IPv6-Adresse. Dann brachten die Einstellungen in der Fritzbox den gewünschten Effekt: Anfragen am Port 80 wurden durch Portfreigabe an den RaspberryPi weitergeleitet und von dort beantwortet. Die Auflösung der immer nur temporär vergebenen Adressen habe ich über die Registrierung bei myfritz.net gelöst. Eigentlich alles ganz einfach, wenn nicht das Problem mit dem DS-Lite gewesen wäre.

Testen kann man das Ganze vom Handy aus, wenn man diesem den WLAN-Zugang zum eigenen Router sperrt. Vorsicht: Handy-Netze sind meist nur IPv4-fähig!

Wichtigste Erfahrung: In der URL-Schreibweise setzt man die IPv6-Adresse in eckige Klammern. Ich muss mich aber mit der Logik und dem Aufbau der IPv6-Adressen noch etwas beschäftigen.

Jetzt sind wieder aus Sicherheitsgründen die Zugangsmöglichkeiten aus dem Internet über die Fritzbox abgeschaltet. Man nimmt einfach einige Häkchen im Menü weg …

LED-Lämpchen NEOPIXEL WS2812 am Raspberry und Arduino

Durch einen Artikel angeregt, wollte ich die Technik von im Strang steuerbaren LED-Lämpchen erkunden. Um die Kosten niedrig zu halten entschied ich mich für 10 „nackte“ LED-Lämpchen mit integriertem WS2812-Controller. Da war man mit 7 Euro bei Amazon dabei. Ein Netzteil war nicht notwendig, da der Raspberry und der Arduino mit 3 Lämpchen an dem 5V-Ausgang gut zurecht kommen.

dscn0683_aw

Die Logik des WS2812 ist eigentlich ganz einfach. Die Lämpchen entnehmen den beiden Leitungen (GND, 5V) ihren Saft und lauschen auf ein 800KHz-Signal auf dem Daten-Input. Falls sie ein Signal erkennen, interpretieren sie die ersten 3 Bytes für sich als RGB-Wert und geben die restlichen Bytes über den Daten-Output weiter. Hier kann man dann weitere Lämpchen anbauen. Eine Pause im Signalstrom ist der Reset. Das klingt einfach und genial.

Die Beinchen der LED sind lang, lang, kurz, kurz -> D-out, GND, 5V, D-in. Auf die Signalleitung bekommt der Raspberry aber nur 3,3 Volt, scheint aber zu funktionieen.

Für den Raspberry fand ich Warnungen, das könne nicht gutgehen, aber ich fand auch Treiber für diese Anwendung. Diese setzen auf der SPI-Logik des Raspberry Pi auf und modulieren in Echtzeit, soweit das auf einem Unix-System geht. Ich benutzte ein Python-Modul von https://github.com/joosteto/ws2812-spi. Dieses Modul ist selbst komplett in Python und schien mir recht einfach,

Zunächst steuerte ich ein Lämpchen an und konnte somit den Farbverlauf regeln. Danach baute ich auf meinem Mini-Steckbrett 3 Lämpchen zusammen, die ich auch erfolgreich steuern konnte. Damit war mein Interesse zufriedigen gestellt.

dscn0685_aw

Probleme gab es einige: Zum einen war die zeitliche Steuerung sehr ungenau, aber es gab einen Hinweis auf einen Vorwiderstand in der Signalleitung. 100 oder 200 Ohm halfen Wunder. Jetzt bin ich bei einer Fehlerrate von unter einem Prozent bei den Farbeinstellungen. Einmal hatte ich 3 defekte Lämpchen, was natürlich den Versuch auch scheitern lässt. Ohne Messgeräte ist doch alles ein Blindflug. Die Jumper an dem einen Lämpchen habe ich mir von Walter (Danke!) anlöten lassen. Das ist einfacher und schöner als die kleinen Beinchen zu verbiegen.

Auf meinem ARDUINO UNO (… den besitze ich ja auch noch ….) mit der Bibliothek „Adafruit_NeoPixel.h“ ließen sich die LEDs unkompliziert und exakt aus einem kleinen Sketch ansteuern. Hier hatte der ARDUINO eindeutig die Nase vorn.

Es ist also doch sinnvoll, einen Arduino Uno und einen Raspberry Pi zu besitzen.

RFID-Technik am Raspberry Pi

An meinem Arduino konnte ich mit meinem RFID-Modul (Milfare RC522) die ID von RF-Chips auslesen. Ich musste mich einfach an die Anleitung halten. Und die „Treiber“ waren bei meinem Sunfounder-Paket ja dabei. Die anderen Möglichkeiten des Chips blieben verborgen.

 

DSCN0440_W DSCN0437_W

Die notwendigen Teile (der rote Leser und die beiden Tags) kosten zusammen ungefähr 5 Euro!

Das Auslesen am Raspberry Pi gelang mir nicht auf Anhieb. Hier musste man zunächst einmal das SPI-Protokoll im Betriebssystem aktivieren und danach natürlich noch im Python die richtigen Module und Befehle für den MF RC522 finden. Es gab eben kein perfekt vorgefertigtes Paket.

Eine Lösung schien mir erfolgversprechend, aber ich war anschließend im Python 2.7 und eigentlich wollte ich in das neuere Python 3.x.

Folgende Lösung führte dann zu einem Ergebnis:

Install the SPI-Py library:
 git clone https://github.com/lthiery/SPI-Py
 cd SPI-Py
 sudo python3 setup.py install

Download the pi-rc522 files:
 cd ~
 git clone https://github.com/ondryaso/pi-rc522.git

Im ersten Schritt konnte ich dann mit den mitgelieferten Python-Programmen die UID meiner RFID-Tags auslesen. Im zweiten Schritt konnte ich einen Datenbereich auslesen, da dieser nur mit dem Standardschlüssel FF FF FF FF FF FF geschützt war. Und im dritten Schritt konnte ich dann diese Daten mit dem bekannten Schlüssel dauerhaft verändern.

Beim Auslesen bekam ich dann folgende Daten im Python zu sehen, wobei die die Blöcke S1.0B0 und S1.0B1 von mir vorher verändert wurden.

RFID_Lesen_W

Viele Fragen (vor allem rund um die Authentifizierung) sind noch offen, mir fehlt irgendwie der richtige Zugang.

Ich werde hier noch weiter basteln und probieren …..

Die PiNoIR-Kamera am RaspberryPi

Die PiNoIR-Kamera ist ein kleines Modul (1″ Kantenlänge) mit einem 20 cm Flachbandkabel zum Anschluß an den speziell hierfür vorgesehenen CSI-Stecker und wird dann dort mit einem Klemm-Mechanismus fest verbunden. Also auch für ungeübte Hände geeignet.

Die Kamera muss in dem „rasp-config“-Menü aktiviert werden.

Das Python-Module „picamera“ ist in der aktuellen Auslieferung vorhanden und kann ohne spezielle Vorbereitungen genutzt werden. Die Funktionen muss man sich, wie anscheinend immer in Python, erst etwas mühsam zusammensuchen.

Die Grundfunktionen für „Einzelbilder“ und „Videos“ sind schnell gefunden und lasssen sich über eine Menge Parameter den eigenen Wünschen anpassen. Die üblichen Formate „jpg“ für Bilder und „h264“ für Videos sind vorhanden. Die Bildqualität ist gut.

Die Kameraauflösung reagiert anscheinend auf mehrere Parameter und verändert auch den Bildwinkel. Da muss ich noch etwas probieren und klären. Die Brennweite scheint einem Weitwinkel zu entsprechen.

Das überall beschriebene „preview“-Bild ist bei meiner X11/VNC-Anbindung des RaspberryPi an den PC nicht sichtbar, da das Bild direkt auf den HDMI-Ausgang gelegt wird. Damit kann ich aber leben. Ich bin bei dieser Gelegenheit auf den „tightvncserver“ umgestiegen, da dieser eine bessere Bildqualität, eben einen echtes X-Terminal, auf den PC bringt.

Die fertigen Programme „raspistill“ und „raspivid“ habe ich noch nicht ausprobiert, da ich eigentlich alles über Python erledigen will.

Ich konnte auch Bilder in Python via MIME zu einer Email zusammenbauen und diese dann über „sendmail“ versenden.

 

 

Webserver „lighttpd“ auf meinem Raspberry

Um meine Elektronikspielwiese üppiger zu gestalten, wollte ich noch einen Webserver auf dem Raspberry Pi installieren.

Ich habe mich an die Empfehlungen im Internet gehalten und den kleineren „lighttpd“ genommen, nicht den Apache. Zusätzlich kam noch das PHP5-Paket hinzu. In der „.conf“ habe ich dann das cgi-Modul für Python eingerichtet. Das ist alles etwas spartanisch, aber es sollte für meine Ansprüche mehr als reichen. Auf ein ausgewachsenes SQL habe ich verzichtet, bei Bedarf gibt es ja in Python ein SQLite3.

Die default-html-Datei von lighttpd wurde auch beim ersten Aufruf im Explorer angezeigt, mit meiner ersten PHP-Datei hatte ich aber Probleme. Die Datei wurde nicht gefunden (Fehler 404). Das Root-Verzeichnis meiner Installation liegt offensichtlich unter „/var/www/html“ und nicht unter „/var/www“. Andere Anwender scheinen auch schon über diese Unstimmigkeit gestolpert zu sein. Die Unix-Rechte der Dateien und Verzeichnisse machen einem etwas Kummer, da der Webserver unter einem anderen Benutzer läuft.

Aber jetzt funktioniert HTML, PHP und Python3. Damit ist mein Ziel „Webserver auf dem Raspberry Pi“ zunächst erreicht.

Ein Durchgriff über PHP zur Shell und auf die PiNoIR-Kamera funktionierte auf Anhieb. Ich kann somit ein Bild aktuell über den Browser aufnehmen lassen und anzeigen.

PS: Der Webserver läuft nur im internen LAN, ist also für Fremde von außen nicht sichtbar.

Der Raspberry mit dem Explorerhat Pro

Da ich zu Weihnachten einen „Explorerhat Pro“ unter meinen Geschenken fand, musste ich dieses Teil auch unverzüglich ausprobieren. Aufgesteckt, Treiber über Github installiert und los.

DSCN9060_W

Der Explorerhat Pro ist ein kleiner Aufsatz („Hat“), der von sich aus 8 betriebsfertige Tastschalter und 4 betriebsfertige LED-Lämpchen mitbringt. Die muss man schon einmal nicht mehr stecken und verdrahten.

Dann gibt es noch schön beschriftete Anschlüsse, je vier für den digitalen Input, den analogen Input und den digitalen Output. Das Ganze sogar 5V-fest. Die anderen Anschlüsse habe ich mir noch nicht intensiv angesehen.

Gesteuert wird der Aufsatz über die mitgelieferte Library via Python. Die Dokumentation ist etwas spärlich, aber einen Photoresistor und einen LM35-Temperaturfühler konnte ich problemlos in Betrieb nehmen. Für solche Versuche reicht auch das kleine Steckbrett mit 2*17*5 Kontaktlöchern.

Mein Python-Code: ExplorerHat_LM35.py

Einziger Nachteil: Bei aufgestecktem Explorerhat sind die anderen Anschlüsse auf dem Raspberry nicht erreichbar. Man muss also je nach Versuch das Gesamtsystem umbauen.

 

Erste Experimente mit dem Raspberry

Da nach der ersten Lieferung doch noch Wünsche offen waren, wurde in der Zwischenzeit noch ein transparentes Gehäuse und ein USB-WLAN-Stick dazugekauft. Beides passt und ist auch in Gebrauch. Passend zum WLAN-Stick ist auch ein Akkubetrieb des Raspberrys über einen externen Handy-Akku möglich.

Als Alternative zu Bildschirm, Tastatur und Maus habe ich die Softwarelösung über „x11.vnc“ installiert. Der Raspberry bootet dann nackt und ich lasse mir anschließend den Bildschirm auf den PC spiegeln. Und das Programm gibt dann Tastatur und Maus an den Raspberry weiter. So habe ich einen sehr aufgeräumten Arbeitsplatz.

Von meinen Zubehörteilen des Arduino kann ich jetzt die LED-Lämpchen, die Taster und auch den PIR-Bewegungsmelder vom Raspberrry aus betreiben. Der PIR-Bewegungsmelder hatte glücklicherweise ein Ausgangssignal von 3,3 Volt wie es für den Raspberry notwendig ist. Dieser Umstieg von 5,0 auf 3,3 Volt war mir nicht richtig bewusst, man sollte ihn aber beachten.

Programmiert habe ich diese einfachen Schaltungen mit Python 3 und dem RPi.GPIO-Modul, welches schon bei dem NOOBS-System dabei war. Durch diese Lösung konnte ich auch Bewegungsdaten auf der SD-Karte aufzeichnen.

Die nächsten Bauelemente stehen auch schon fest: der RF-Link-Sender für die Funksteckdose,  der RF-ID-Leser und ein A/D-Wandler für die einfachen Sensoren mit einem analogen Ausgang. Ich suche aber noch nach einer guten Programmieranleitung. Für den Arduino wurden Anleitungen und Bibliotheken immer griffbereit angeboten, die auf dem Controller laufende Software war eben sehr einheitlich.

Himbeeren

Zeitgleich mit den wohl letzten Himbeeren (Sorte: autumn bliss) dieses Jahres aus dem eigenen Garten kam ein Päckchen mit einem „Raspberry Pi 2„, damit ich die langen Wintertage besser überstehen kann.

DSCN8977_W

Der „Raspberry Pi 2“ ist ein Mikrocomputer für 40 Euro, der mehrere Aspekte meiner EDV-Aktivitäten der letzten Zeit zusammenführt. UNIX/Linux, Python und Arduino. Also ein Interessanter Ansatz.

Für die 40 Euro bekommt man den nackten Computer, braucht dann aber noch ein USB-Netzteil, eine Mikro-SD-Karte, einen HDMI-Bildschirm, eine Maus und eineTastatur. Mein vorhandenes „Wireless Touch Keyboard“ Logitech K400r mit dem USB-Adapter funktionierte auch schon beim Setup. Und unser Monitor/Fernseher hat einen HDMI-Anschluss.

Die Inbetriebnahme war problemlos. Das Softwarepaket NOOBS mit Raspbian (Debian Jessie) aus dem Internet laden (ca. 1 GB), auf die Mikro-USB-Karte kopieren, den Raspberry booten, einafche Angaben zur Sprache und zur Tastatur machen und noch 15 Minuten warten. Dann hat man einen Linux-PC mit einem aufgeräumten Desktop vor sich stehen. Dauer insgesamt ca. 1 Stunde. Auf der 8GB-SD-Karte sind dann noch ca. 2 GB frei. Und man hat sein vollständiges Recovery-System weiterhin auf der SD-Karte …

Auf dem Desktop findet man dann einen Browser (ein RJ45-Anschluss ist vorhanden), Libreoffice und Python (Version 2.x und 3.x) als Programmiersprache. Damit kann man schon etwas anstellen.

Was mir noch fehlt:

  • Drucker- / Scanner-Treiber (Canon MP560)
  • Browser (Chromium oder Firefox/Iceweasel)
  • USB-WLAN-Adapter
  • NAS-Laufwerk der Fritz-Box mounten
  • Gehäuse

Dann könnte man schon von einem ordentlichen Notfall-PC reden.