BibleZ nun auch für Android verfügbar

Seit Firefox Mobile 29 unterstützt Mozilla die Installation von gepackten privilegierten Apps. Das sind Apps, die bestimmte APIs nutzen, z.B. Zugriff auf Netzwerkverbindungen (um Cross-Origin-Request Probleme zu umgehen).

BibleZ ist nun ab heute auch im Firefox Marketplace für Android verfügbar. Wer es dazu auch noch am Rechner installieren möchte, findet die Desktop-Version hier.

Hinweis: BibleZ befindet sich weiterhin in einem Beta-Status. Viele wichtige Funktionen fehlen noch… Wer einen Bug findet, kann ihn gern hier eintragen.

[Update] BibleZ NG

Update: BibleZ ist nun für FirefoxOS im Marketplace verfügbar!

Vor einigen Monaten hatte ich bereits über mein Projekt berichtet, BibleZ HD (die webOS App) in eine “richtige” webApp zu portieren. In den letzten Wochen hatte ich wieder etwas mehr Zeit zum programmieren und so wurden wesentliche Features hinzugefügt.

Ich habe die App für FirefoxOS und auch für Firefox (Desktop, Android) im Marketplace von Mozilla eingereicht. In den nächsten Tagen sollte die App dann veröffentlicht werden. Wer die App bereits jetzt schon testen möchte, kann dies gern tun: http://zefanjas.de/biblezng

Um die App auch als solche zu installieren, öffnet man am besten die Webconsole (STRG + SHIFT + K) und gibt folgendes ein:

navigator.mozApps.install("http://zefanja.github.io/biblez-ng/app/manifest.webapp");
BibleZ NG - Firefox, Ubuntu 12.04

BibleZ NG – Firefox, Ubuntu 12.04

Der Sourcecode befindet sich auf Github.

FirefoxOS 1.3

Noch ein kleines Wort zu FirefoxOS an sich. Mittlerweile gab es einige Neuerungen und Verbesserungen im Handling und der Bedienung. Es fühlt sich teilweise immer noch umständlich im Vergleich zu webOS an, aber nicht mehr so schlimm, wie das noch mit der Version 1.0 war. Ich bin gespannt auf die weitere Entwicklung und hoffe auf leistungsstärkere Smartphones und Tablets!

Losungen 2014

Das neue Jahr hat begonnen und somit gibt es auch ein Update für die Losungen App für webOS. Das Update ist seit ein paar Tagen eingereicht und wird hoffentlich bald als Update verfügbar sein. Wer nicht so lang warten möchte, kann sich die IPK hier herunterladen und mit Preware oder webOSQuickInstall direkt installieren.

Mittlerweile gibt es auch ein Web App für Losungen, welche man sich z.B. auf seinem Firefox OS Gerät oder direkt im Browser installieren kann.

Ich wünsche allen ein gesegnetes neues Jahr!

Build a Robot #2 – Fernsteuerung mit dem Smartphone

Heute soll es uns um die Steuerung des kleinen Roboters mit einem Smartphone/Tablet gehen. Dabei soll die Fernsteuerung möglichst plattform-unabhängig sein. Aus diesem Grund habe ich mich für eine einfache Website entschieden, welche die Daten des Gyroskop ausliest und entsprechende Befehle an den Roboter schickt.

Die Serverseite

Ich habe in den letzten Jahren viel mit Javascript programmiert und aus diesem Grund habe ich mich für eine nodejs basierte Lösung entschieden. Javascript ist für die Steuerung von GPIOs eigentlich nicht wirklich geeignet (single threading, Latenzen, …), aber für das An- und Ausschalten von Motoren passt es ganz gut.

Zuerst sollte man also nodejs auf dem Raspberry Pi installieren. Da die Version in den Repositories nicht gerade aktuell ist, kann man sich manuell ein compiliertes Paket direkt bei nodejs downloaden. Die Installation ist in diesem Artikel ganz gut beschrieben.

Bei Github findet man verschiedene Pakete für die Ansteuerung der GPIOs. Ich habe mich für node-rpio entschieden, da die API der Python-API entspricht, die wir im letzten Beitrag verwendet haben. Weiterhin ist die API synchron, was in unserem Fall sinnvoll ist, da wir sonst mit vielen vielen Callbacks zu tun hätten ;) Um node-rpio zu nutzen, muss es noch compiliert werden. Dazu gibt man einfach den Befehle

npm install -g node-gyp
node-gyp rebuild

ein, nachdem man das Github-Repo geklont hat. Nun ist alles fertig, um die Motoren über nodejs zu steuern. Da die API gleich ist, können wir im Prinzip den Quelltext aus dem letzten Beitrag nehmen und nur ein klein wenig anpassen:

var gpio = require("./node-rpio/lib/rpio");

//Setup GPIO Pins
gpio.setmode(gpio.BOARD);
gpio.setup(13, gpio.OUT);
gpio.setup(15, gpio.OUT);
gpio.setup(16, gpio.OUT);
gpio.setup(18, gpio.OUT);

gpio.output(13, 1);
gpio.output(15, 0);
gpio.output(16, 1);
gpio.output(18, 0);

process.on('SIGINT', function() {
    console.log("\nGracefully shutting down from SIGINT (Ctrl+C)");
    //Cleanup
    gpio.cleanup();
    process.exit();
});

Der letzte Teil dient dazu, dass man mit Ctrl+C das Skript abbrechen kann, denn sonst würden die Motoren ständig weiterdrehen.

Ok, jetzt können wir zwar die Motoren ansteuern, aber nur direkt am Raspberry Pi. Die Verbindung zum Smartphone fehlt noch. Socket.io ist ein großartiges Projekt, welches eine direkte Verbindung über webSockets zwischen Server und Client ermöglicht. Man kann Daten sehr einfach hin- und herschicken und eigene Ereignisse definieren, auf die dann der Server bzw. Client reagieren kann. Was wir brauchen ist nun eine HTML-Datei, welche den Gyroskop ausliest und die entsprechenden Befehle an den nodejs Server sendet, welche dieser dann verarbeitet:

Als nächstes wird der nodejs Server mit

sudo node robot.js

gestartet. Nun muss man nur noch die Adresse: http://IP-des-Raspberry-Pi aufrufen und schon kann man den Roboter mit einem Smartphone oder Tablet steuern.

Stromversorgung und Wlan

Es gibt nur noch ein Problem. Der Rapsberry Pi hängt bisher noch an zwei Kabeln: dem Netzwerkkabel und dem USB-Kabel für die Stromversorgung. Für beiden gibt es Lösungen. Das Netzwerkkabel habe ich durch einen Wlan-USB Dongle ersetzt. Wie man diesen einrichtet und welchen man kaufen sollte, findet man in diesem Artikel.

Das verbleibende USB-Kabel habe ich einfach durch ein mobiles USB-Ladegerät ersetzt, welches man für wenig Geld zu kaufen bekommt. Diese liefern die benötigen 5V. Man sollte darauf achten, dass sie neben den 5V auch mindestens 1A liefern, ansonsten wird der Raspberry Pi nicht starten.

Und so sieht das ganze jetzt aus ;)

mobile Stromversorgung und WLAN-Dongle mobile Stromversorgung und WLAN-DongleIch werde in den nächsten Tagen noch ein ein Video machen…

Wie geht es jetzt weiter? Die Steuerung muss noch verbessert werden. Gerade das Lenken ist noch ungenau und das Fahren somit etwas schwierig. Ein weiteres Ziel ist, mit Hilfe eines Ultraschall-Sensors dem Roboter das autonome Fahren beizubringen.

Bisherige Artikel

 

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

Build a Robot #0 – Ziele und Material

Zurzeit habe ich Ferien und dafür habe mich mir ein kleines Projekt vorgenommen. Ich möchte gern einen kleinen Roboter bauen, welcher sich von einem modernen Smartphone aus steuern lässt. Dazu soll es nicht viel kosten ;) In den letzten Wochen habe ich verschiedene Artikel und Anleitungen gelesen, um die Grundlagen und Umfang eines solchen Projektes abschätzen zu können. Für mich ist es mein erster Ausflug in das Hardware-Lager, da ich bisher nur Software entwickelt habe.

Ziel

Für mich ergeben sich folgende Ziele für das Projekt

  • ein fahrbarer Roboter, welcher sich über ein Smartphone fernsteuern lässt (angedacht ist WLAN)
  • den Roboter erweitern, sodass er sich autonom fortbewegen kann
  • möglichst geringe Kosten

Dazu erhoffe ich mir einige Erkenntnisgewinne, denn wie gesagt, bin ich Neuling in Sachen Schaltkreise, Elektronik und solchen Dingen…

Material

Im Netz bekommt man für wenig Geld sogenannte Roboterbausätze. Ich habe mich für folgenden entschieden (Kostenpunkt 13$):

Mit diesem Set bekommt man zwei Motoren plus Räder, ein Batteriefach und die “Karosserie”.  Ich habe es ausgewählt, da man genug Platz hat zusätzliche Dinge zu befestigen, wie z.B. einen Raspberry Pi, der die Ansteuerung der Motoren übernehmen soll. Dies geht allerdings nicht ohne einen “Motor driver” (L298N). Man bekommt diesen bei jedem besseren Elektronikhandel (oder hier). Neben kleinen Kabeln, einem Lötkolben und  evtl. ein paar Widerständen, sollte erst einmal alles da sein, um die ersten Schritte zu unternehmen.

 

EnyoJS and FirefoxOS screen orientation

Today I wanted to implement something in BibleZ NG that depends on the screen orientation (portrait or landscape) of a FxOS device.  Because I don’t use phonegap for this app (maybe later) here is my solution to handle it more EnyoJS-like. I’ve used enyo.Signals to listen for the orientation changed event and than send a custom event that my enyo kinds can listen to.

Put this in your main App.js file:

window.screen.onmozorientationchange = function () {
    enyo.Signals.send("onOrientationChange");
};

Listen to this custom event in your other enyo kinds:

{kind: "Signals", onOrientationChange: "handleOrientation"}

This is an example function to handle the different screen orientations:

handleOrientation: function (inSender, inEvent) {
    var orientation = screen.mozOrientation;
    if (orientation === "portrait-primary" || orientation === "portrait-secondary" ) {
        //do something
    }
    else if (orientation === "landscape-primary" || orientation === "landscape-secondary" ) {
        //do something
    }
}

via

FirefoxOS, swordJS und BibleZ

So, der Trend geht ja immer mehr weg vom Bloggen. Stattdessen wir getwittert oder Ideen und Updates in sozialen Netzwerken geteilt. Das ist auch bei mir der Fall, sodass hier in den letzten Monaten (eher Jahren) nicht mehr viel passiert ist…

FirefoxOS

Heute möchte ich ganz kurz meine Gedanken zu FirefoxOS loswerden und was weiterhin grad aktuell ist, seitdem die  schöne Zeit mit webOS langsam zu Ende geht. Noch nutze ich ja meinen Pre3 und er läuft weiterhin super, aber in näherer Zukunft muss ein anderen Gerät her. Auch wenn die Jungs von webos-ports OpenWebOS weiter nach vorn bringen, wird es wohl noch eine ganze Zeit dauern, bis man es wirklich auf aktueller Hardware einsetzen kann (Stichwort LunaNext). Deshalb habe ich mir im Sommer ein FxOS – Gerät besorgt (ZTE Open), um das neue OS einmal zu testen. Die Ernüchterung kam sehr schnell. Das Gerät ist erstens sehr billig gebaut, v.a. das Display ist nicht zu vergleichen mit Geräten aus höheren Preisklassen. Das Scrollen funktioniert nicht sehr gut und auch so ist es nicht das schnellste Gerät. Ok, es kostet auch nicht viel, aber es kam keine richtige Freude auf, zudem nicht gerade intuitiv zu bedienen ist. Wenn man sich über Jahre an webOS gewöhnt hat, scheint alles andere unintuitiv. Nichts desto trotz könnte FxOS in die engere Auswahl kommen, wenn es um ein neues Gerät geht, denn die Entwicklung schreitet schnell voran, auch wenn mir noch viele Features fehlen (wie CardDav oder CalDav Sync). In den nächsten Wochen kommt mein Entwicklergerät und ich werde mal die aktuelle Version testen und schauen, was sich in den letzten Monaten getan hat. Das ZTE Open hat die Version 1.0 am Laufen.

BibleZ und swordJS

In den letzten Jahren habe ich immer wieder Anfragen bekommen, ob ich BibleZ nicht auch auf andere Plattformen bringen könnte,  wie iOS oder Android oder Blackberry oder … Da BibleZ HD eine webOS Hybrid-App ist, d.h. es  gibt ein c++ Backend und der Rest ist in HTML/JS/CSS geschrieben, war die Portierung nicht ohne weiteres möglich. Meine Vision ist aber weiterhin, BibleZ auf möglichst vielen Plattformen anzubieten. Verschiedene Versuche die C++ Library vonCrossWire mit Emscripten in die Welt des Webs zu bringen, scheiterten. Aus diesem Grund habe ich mich im Sommer entschieden, eine Javascript Bibliothek von Grund auf zu schreiben, um auf die Module des SWORD Projekts nur mit Webtechniken zuzugreifen. SwordJS wurde geboren und grundlegende Funktionen sind bereits implementiert.

Natürlich braucht man für so eine Biliothek auch eine Referenz-App und so habe ich begonnen BibleZ nach EnyoJS 2 zu portieren. Das Projekt trägt den Namen BibleZ NG (next generation). Diese App werde ich demnächst auch in den Firefox Marketplace einreichen, doch müssen vorher noch ein paar Features ergänzt und Bugs behoben werden ;)

BibleZ NG

BibleZ NG

Leider ist meine Zeit für das Programmieren durch meinen Job sehr begrenzt und ich komme nur aller paar Monate zu coden oder bloggen. Naja, da bin ich sicher nicht der einzige, dem das so geht.

BibleZ HD Pro

Vor ziemlich genau einem Jahr habe ich damals angefangen mich mit dem neuen Framework “enyo” und Hybrid-Apps (d.h. Javascript mit C/C++-Plugin) auseinanderzusetzen. Da es bisher kein Bibelprogramm für webOS gab, welches auf  SWORD basiert, startete ich den Versuch eine Hybrid-App zu entwickeln. Nach vielen Versuchen und Lesen von unzähligen Tutorials (cross compiling, …) klappte die Kommunikation zwischen Javascript und dem nativem Plugin. Im Sommer 2011 erschien BibleZ HD im AppCatalog. Seit gestern nun ist auch die Pro-Version im AppCatalog verfügbar. Viele Vorschläge, Verbesserungen und Features sind in die Entwicklung mit eingeflossen und einige stehen noch auf meiner Liste.

Hier ein kleiner Überblick über die Neuerungen:

  • Kommentare können installiert und angezeigt werden
  • Lesezeichen und Notizen lassen sich durchsuchen und in Ordner und mit Schlagworten organisieren
  • Parallelansicht zweier Module
  • Unterstützung für alle offiziellen Crosswire Repositories
  • Fußnoten, Querverweise, Überschriften und Bucheinführungen
  • Strongs
  • viele andere Verbesserungen (v.a. in Sachen Benutzerfreundlichkeit)

BibleZ HD Pro ist unter der GPLv3 lizenziert (Sources).