Schlagwort-Archive: Python

Build a Robot #1 – Motoren ansteuern

Wie ich in meinem letzten Beitrag erwähnte, möchte ich gern den Roboter mit dem Raspberry Pi steuern. Da man mit einem Pi Motoren nicht direkt ansteuern kann, benutze ich das L298N Chip als Motor Driver.  Nach folgendem Video habe ich alles zusammengesteckt bzw. alle fehlenden Kabel noch angelötet. Im Video wird nur ein Motor angeschlossen, aber die restlichen 4 GPIO Pins habe ich genutzt, um den zweiten Motor zu steuern.

Ich habe das im Video verwendet Testskript für den zweiten Motor erweitert, um die Motoren zu testen.

import RPi.GPIO as gpio
import time

gpio.setmode(gpio.BOARD)
gpio.setup(7, gpio.OUT) 
gpio.setup(11, gpio.OUT) 
gpio.setup(13, gpio.OUT) 
gpio.setup(15, gpio.OUT) 
gpio.setup(12, gpio.OUT) 
gpio.setup(16, gpio.OUT) 
gpio.setup(18, gpio.OUT) 
gpio.setup(22, gpio.OUT)

gpio.output(7, True) 
gpio.output(11, True) 
#Enable B für den 2. Motor 
gpio.output(12, True) 
gpio.output(22, True) 

#Motor 1 
gpio.output(13, True) 
gpio.output(15, False) 
#Motor 2 
gpio.output(16, True) 
gpio.output(18, False) 
time.sleep(2) 

gpio.output(13, False) 
gpio.output(15, True) 
gpio.output(16, False) 
gpio.output(18, True) 
time.sleep(2) 

gpio.output(13, False) 
gpio.output(15, False) 
gpio.output(16, False) 
gpio.output(18, False)   

gpio.cleanup()

Mit diesem kleinen Testskript kann man den Roboter vor und zurück fahren lassen. Das mitgelieferte Batteriefach hat Platz für 3 AA Batterien. Diese liefern insgesamt zu wenig Spannung für die Motoren, sodass das Fahrzeug zwar fährt, aber nicht genügend Drehmoment („Kraft“) hat. Ich werde ein neues besorgen, welches Platz für vier oder mehr AA Batterien hat.

Und hier noch ein Bild:

Der aktuelle Stand - Raspberry Pi mit L298N

Der aktuelle Stand – Raspberry Pi mit L298N

Zugriff auf das DOM mit Python in webkitgtk

Während der Entwicklung von SaleZ stand ich vor dem Problem, dass ich Werte aus dem Document Object Model (DOM) auslesen wollte. In Webkit gibt es zwar die Funktion get_dom_document, allerdings ist sie noch nicht in der Version von Webkit enthalten, welche mit Ubuntu 10.04 mitgeliefert wird. Nach einiger Suche im Netz habe ich dann eine Lösung für das Problem gefunden.

Mit Hilfe des folgenden Codes kann man sich den Inhalt eines bestimmten Elements ausgeben:

import jswebkit

ctx = jswebkit.JSContext(webView.get_main_frame().get_global_context())
text = ctx.EvaluateScript("document.getElementById("fooBar").innerHTML")

Möchte man hingegen das DOM manipulieren, kann man die  execute_script Funktion eines WebViews nutzen:

webView.execute_script('document.getElementById("foobar").innerHTML = "foo bar"')

SaleZ – your eBay Listing Tool: Betatester gesucht

Ein neues Projekt ist geboren: SaleZ. Es handelt sich hierbei um ein Verkaufstool für eBay, welches sich derzeit aber noch im Alpha Status befindet (deshalb kann ich auch keine Haftung für irgendwelche entstehenden Schäden übernehmen – klar) . Vor einigen Monaten habe ich angefangen ein wenig mit Quickly zu experimentieren (ich berichtete) und herausgekommen ist jetzt SaleZ.

SaleZ - your eBay Listing Tool

Folgende Features sind enthalten:

  • Artikel können als SofortKaufen oder Auktion eingestellt werden
  • WYSIWYG Editor für Auktionsbeschreibung
  • Unterstützung für Auktionstemplates (näheres schreibe ich später dazu)
  • übersichtliches UI
  • bis zu 10 Bilder können kostenlos eingebunden werden

Um SaleZ zu testen, muss zunächst das PPA hinzugefügt und danach SaleZ installiert werden:

sudo add-apt-repository ppa:salez/salez-ppa
sudo apt-get update && sudo apt-get install salez

Ich hab SaleZ nur unter Ubuntu Lucid (10.04) getestet; das Paket für Ubuntu 10.10 ist das gleiche, es sollte aber auch unter 10.10 laufen. Bugs können auf Launchpad gemeldet werden oder hier in den Kommentaren (für die, die keinen Launchpad Account haben).

In diesem Sinn viel Spaß beim Testen!

quickly-widgets: DictionaryGrid

Seit einiger Zeit gibt es ein Tool zum Erstellen von Anwendungen für Ubuntu welches sich Quickly nennt. Quickly nimmt einem eine ganze Menge an Arbeit ab, sodass man mehr Zeit hat sich um die eigentliche Anwendung zu kümmern. Vor ca. einem halben Jahr bin ich durch einen Blogpost im ubuntuusers Planeten darauf aufmerksam geworden und hab seit dem immer wieder mal ein wenig damit rumgespielt. Eine praktische Erweiterung für Quickly sind die Quickly Widgets (ehemals Quidgets).

Installieren lässt es sich mit

sudo apt-get install quickly-widgets

Heute möchte ich das DictionaryGrid vorstellen. Wer sich schon einmal mit einem Gtk.Treeview beschäftigt hat, weiß, dass dieser sehr flexibel ist und man viele Dinge darin abbilden kann. Doch diese Vielfalt führt auch zu einer gewissen Komplexität, sodass man für eine einfache Tabelle einige Zeilen an Code schreiben muss (Columns, CellRenders, …). An dieser Stelle setzt DictionaryGrid an. Wie der Name schon vermuten lässt, braucht man nur noch eine Liste von Dictionaries und kann aus dieser, mit ein paar wenigen Zeilen Code, eine Tabelle erzeugen.

Beispiel:

from quickly.widgets.dictionary_grid import DictionaryGrid
#unsere Dictionaries
dicts = [{"ID": 0, "key2": 5, "tags": "aaa bbb ccc"},
      {"ID": 1, "key2": 6, "tags": "bbb ccc ddd"},
      {"ID": 2, "key2": 7, "tags": "ccc ddd eee"},
      {"ID": 3, "key2": 8, "tags": "ddd eee fff"},
      {"ID": 4, "key2": 9, "tags": "eee fff ggg"}]
grid = DictionaryGrid(dicts)
grid.show()

Und so sieht das ganze dann aus:

In DictionaryGrid kann man noch mehr Paramter angeben, so z.B. in welcher Reihenfolge die Spalten erscheinen sollen. Dazu legt man eine List von keys an, welche die Reihenfolge repräsentieren.

keys=["tags", "ID"]
grid = DictionaryGrid(dicts, keys=keys)
grid.show()

Und hier wieder der Screenshot:

Wie man sieht kann man nicht nur die Reihenfolge der Spalten anhand der keys bestimmen, sondern auch welche Spalten angezeigt werden sollen oder nicht. Neben DictionaryGrid gibt es noch weitere interessante Widgets in quickly-widgets zu entdecken.

BibleZ 0.4

biblez64Vor einiger Zeit hatte ich schon einmal hier von BibleZ berichtet. Seitdem ist viel passiert und mit diesem Blogpost möchte ich ein kleines Update über den aktuellen Stand der Entwicklung geben. BibleZ ist in Python geschrieben und nutzt Qt als Grafikbibliothek.

Die wichtigsten Neuerungen fasse ich einfach mal kurz zusammen:

  • Moduldownloader: Module müssen nicht mehr von Hand importiert werden
  • Tag-Unterstützung: Bibelverse lassen sich zu selbst festgelegten Stichworten zuordnen
  • Lesezeichen
  • Notizfunktion
  • Strongsintegration
  • Parallelstellen werden angezeigt
  • verbesserte Suche: UND und ODER Verknüpfungen mit zusätzlicher Buchauswahlmöglichkeit
  • Parallelansicht: Bibel lassen sich nebeneinander anziegen
  • Bi-direktionale Sprachunterstützung: Rechts-nach-Links Leserichtung wird für Hebräische und arabische Module
  • Verbesserte Vorschaufunktion für Notizen, Parrallelstellen und Anmerkungen
  • eine Standardbibel lässt sich festlegen, welche beim Start automatisch ausgewählt wird
  • Formatierungsoptionen: Schriftfarbe, -art und -größe lässt sich für jedes Modul einstellen
  • Hilfe wurde ins Wiki ausgelagert
  • Windows-Port: BibleZ ist nun auch für Windows verfügbar
  • und weitere viele kleine Änderungen und BugFixes

BibleZ lässt sich am besten über das PPA installieren oder man lädt sich die entsprechende Windowsversion.

Neues Projekt: BibleZ

Über Twitter hatte ich bereits davon berichtet: In den letzten Wochen habe ich mir mal Zeit genommen und mich näher mit Python und Qt4 auseinander gesetzt. Nachdem mein Examen nun geschafft ist, hatte ich dafür auch wieder mehr Zeit. Der Anlass für mich war, dass ich gerne ein Programm, ähnlich wie MyBible, für Ubuntu haben wollte. Es gibt zwar einige Bibelprogramme für das Sword-Projekt, allerdings keines, welches die Zefania XML Module verwendet. Diese Lücke soll nun BibleZ füllen.

screenshot_100(010)

BibleZ - 0.1.0

Was ist BibleZ?

BibleZ ist im Grunde nichts anderes als ein XML-Betrachter für eine bestimmte Art von XML-Dateien. Dazu kommen natürlich noch einige Features (aktueller Entwicklungsstand):

  • Import der Zefania XML Module (API ist aber noch nicht vollständig implementiert)
  • Vorschläge bei der Eingabe
  • Erklärungen werden als Mouse-Over angezeigt
  • rudimentäre Schnell-Suche (durchsucht derzeit nur das aktuelle Buch)
  • Tabs
  • zwei verschiedene Ansichten (Fließtext, Absätze)

Über dieses Projekt und dessen Fortschritt werde ich in einem separaten Blog unter biblez.zefanjas.de posten. Wer also gern auf dem laufenden bleiben möchte, sollte diesen RSS-Feed abonnieren oder mir auf Twitter folgen. Wer  Vorschläge, Kritik und Feature-Requests hat, kann sie gern im Forum mitteilen.

Heute habe ich mal die Ergebnisse der letzten Wochen in einem ersten Release zusammengefasst. Entsprechende Installationsanweisungen habe ich hier aufgeschrieben.

P.S.: Für mich ist es das erste mal, dass ich überhaupt so ein „größeres“ Projekt starte. Ich habe zwar schon ein paar Sachen hin und wieder programmiert, aber noch nie mit einem Framework wie Qt. Viele Sachen sind deshalb neu für mich, so auch z.B. die Distribution und Lokalisation des Projekts. Deswegen bin ich für jeden konstrutiven Hinweis sehr dankbar.