Again some new examples for Breakout.js
There were some new examples available. They were uploaded to my dev branch of my Breakout.js fork.
If you want to know more about your IOBoard, give firmware.html a try.
Teensy++
Neben einem R2Duino besitze ich auch ein Teensy++. Statt zwei Relais wie das R2Duino, besitzt das Teensy++ Speicherplatz. Zwar nicht viel aber doch genug, um damit andere Anwendungsfälle abzudecken.
Damt das Teensy++ mit der Arduino-Entwicklungsumgebung benutzt werden kann, braucht es eine Erweiterung. Diese kann von der Entwicklerseite heruntergeladen werden. Es stehen Installer für die gängigen Betriebssysteme bereit.
Nach der Installation der die Arduino-Entwicklungsumgebung zusätzliche Einträge, welche das Teensy++ unterstützen, bereit.
Bei USB Type muss auf Disk(Internal) + Keyboard umgestellt werden, bevor mit einem Projekt begonnen wird. Zum Testen kann der Simple-Sketch (File -> Examples -> Teensy -> USB_Keyboard -> Simple) benutzt werden.
Nach dem Übertragen an das Teensy++ und dem Drücken des Button, wird der definierte String gesendet.
Das nachfolgende Beispiel soll nun zeigen, wie Informationen in eine Datei geschrieben werden. Der Ablauf gestaltet sich so, dass notepad mit einer noch nicht existierenden Datei ausgeführt wird, Daten in die Datei geschrieben und gespeichert werden und notepad geschlossen wird. Grundsätzlich ist es eine Art "Makro". Alle Tastatur-Eingaben werden einfach wiedergegeben.
void setup() { delay(5000); Keyboard.set_modifier(MODIFIERKEY_RIGHT_GUI); Keyboard.set_key1(KEY_R); Keyboard.send_now(); delay(500); Keyboard.set_modifier(0); Keyboard.set_key1(0); Keyboard.send_now(); // Launch notepad Keyboard.print("notepad test.txt"); Keyboard.set_key1(KEY_ENTER); Keyboard.send_now(); Keyboard.set_key1(0); Keyboard.send_now(); // We want a new empty file, we say 'yes' by hitting enter delay(1000); Keyboard.set_key1(KEY_SPACE); Keyboard.send_now(); Keyboard.set_key1(0); Keyboard.send_now(); delay(1000); Keyboard.print("Hello, World"); // We want to save the file delay(1000); Keyboard.set_modifier(MODIFIERKEY_CTRL); Keyboard.set_key1(KEY_S); Keyboard.send_now(); delay(500); Keyboard.set_modifier(0); Keyboard.set_key1(0); Keyboard.send_now(); // Close notepad Keyboard.set_modifier(MODIFIERKEY_ALT); Keyboard.set_key1(KEY_F4); Keyboard.send_now(); delay(500); Keyboard.set_modifier(0); Keyboard.set_key1(0); Keyboard.send_now(); } void loop() { }
Knockout.js
At the moment Breakout.js is lacking a fast way to create overviews of multiple pins. After a couple of Google queries I ended on the website of Knockout.js. This framework seams to provide the kind of functionality which is needed for fast deployment of views. I don't want to do fancy stuff...there are some sensors connected to the Arduino, I want to grab all values, and display the numbers on a web page without defining everything for every pin. Of course, adding/removing pins dynamically would be nice but this is a topic for later.
New examples for Breakout.js
As mentioned earlier this week the Smoothie Charts and the scope example are now uploaded to my dev branch of my Breakout.js fork.
I committed some simple examples to get started, too. Only simple stuff which was already described in the Breakout Bascis.
Breakout.js scope
If you prefer to use an embedded solution over an external one for the visualisation of input data then SignalScope.js will be your friend. Jeff Hoefs ported this piece of software to Javascript and integrated it into Breakout.js.

Only few lines of code are needed to add a simple scope.
function onReady(event) { [...] // Add a marker to scope scope1.addMarker(0.5, '#00FF00') animate(); } function animate() { scope1.update(pot.value); $('#value').text('Value = ' + pot.value.toFixed(3)); requestAnimFrame(animate); }
The complete example will be commit to the Breakout.js example directory soon.
Breakout.js and Smoothie Charts
A while back I wrote about Smoothie Charts and that it would be nice to use it with Breakout.js. Well, here is a simple example.

The used code is straight-forward and easy to adapt to your own project. The sensor value and a timestamp are appended and the line is redrawn.
(function() { setInterval(function() { var timestamp = new Date().getTime(); line1.append(timestamp, (sensor.value * 100).toFixed(0));}, 1000); var timeline = new SmoothieChart({ minValue: 0.0, maxValue: 100.0, millisPerPixel: 20, grid: { strokeStyle: 'rgb(127, 127, 127)', fillStyle: 'rgb(229, 229, 229)', lineWidth: 1, millisPerLine: 500, verticalSections: 4, }, labels: { fillStyle:'rgb(0, 0, 0)' } }); timeline.addTimeSeries(line1, { strokeStyle: 'rgb(0, 0, 255)', fillStyle: 'rgba(0, 0, 0, 0)', lineWidth: 2 }); timeline.streamTo(document.getElementById("graph"), 1000); })();
The complete example will be commit to the Breakout.js example directory soon.
Ferien vorbei
Am nächsten Montag ist fertig mit Ferien. Es war entspannend wieder einmal drei Wochen ohne Handy, Internet und Computer zu verbringen. Ok, ganz ohne Computer war die Zeit nicht, aber ohne E-Mail und Handy, da ich die relevanten Informationen für die Prepaid-Vodaphone-Karte schon nach vier Stunden verloren habe. Eine SIM-Karte ohne PIN ist wie ein Haus ohne Schlüssel...
Ein paar Bemerkungen:
- Campingplätze in Deutschland müssen mit Bedacht gewählt werden, denn der Standard kann trotz guter Bewertung vom ADAC ziemlich niedrig sein. Einzelwaschkabinen (die geben vom ADAC gute Bewertungen) braucht kein Mensch, aber ein Kleiderhaken in der Dusche hat durchaus seine Daseinsberechtigung.
- Holzspäne und Parafin ergeben nach starker Rauchentwicklung meistens eine gute Glut zum Grillen
- Teure, gemäss Hersteller unbrechbar Aluminium-Zeltstangen brechen bei starken Windböen trotzdem.
- Die Deutschen scheinen die Nordsee nicht zu mögen. Sprich dort hat es sehr viel Platz auf dem Campingplätzen, während es an der Ostsee so aussieht, wie früher am Gurtenfestival.
- Strom ist nicht gleich Strom. In Dänemark kann man einen Akku einen Tag laden und seine Laufzeit liegt bei 10 min.
Das Wetter war wie immer, Regen und Gewitter wechselt sich mit Sonnenschein ab und starke Winde mit 30 Grad. Es gibt ein bisschen von allem, ausser Schnee. Am Mittelmeer ist das Wetter sicher sehr viel langweiliger. Deshalb gehe ich gerne in den Norden. Dort ist es erst noch viel länger hell am Abend und die Landschaften sind grüner ;-)
Alpine Linux 2.4.5 released
The Alpine Linux project is pleased to announce the immediate availablity of version 2.4.5 of its Alpine Linux operating system.
This is a bugfix release.
- Fixes MSS clamping in kernel for proper path MTU discovery
- Fixes creating apkovl archives with large number of files
- Fixes include empty dirs in apkovl archives
Wiki: http://wiki.alpinelinux.org/
Bugs: http://bugs.alpinelinux.org/
Download: http://alpinelinux.org/downloads
Breakout.js
Breakout.js ermöglicht das Interagieren zwischen dem Web und der realen Welt, genauer gesagt, mit der Arduino-Plattform. Schon in früher hat ich ein paar Mal das Arduino mit Firmata genutzt. Mit Firmata entfällt das lästige Übertragen von Sketches auf das Arduino.
Mit Breakout lassen sich die Eingänge lesen und Ausgänge eines Arduino setzen. Nachfolgend ein ganz einfaches Beispiel zum Schalten des integrierten LED des Arduino. Die Seite muss in den getting_started-Ordner von Breakout gespeichert werden. Wenn der Breakout-Server dann gestartet ist, kann die Seite in einem modernen Browser geladen werden.
<!DOCTYPE html>
<html>
<head>
<meta charset=utf-8>
<title>Simple LED example</title>
<script src="../../dist/Breakout.js"></script>
<script src="../libs/jquery-1.7.min.js"></script>
<script type="text/javascript">
$(document).ready(function() {
var IOBoard = BO.IOBoard;
var IOBoardEvent = BO.IOBoardEvent;
var LED = BO.io.LED;
var arduino = new IOBoard("localhost", 8887);
var led;
arduino.addEventListener(IOBoardEvent.READY, onReady);
function onReady(event) {
arduino.removeEventListener(IOBoardEvent.READY, onReady);
led = new LED(arduino, arduino.getDigitalPin(13));
$('#button').click(function(){
if ($(this).text()=="LED On") {
$(this).text("LED Off");
led.on();
} else {
$(this).text("LED On");
led.off();
}
});
}
});
</script>
</meta></head>
<body>itch
<button id="button" class="Btns" type="button">LED On</button>
</body>
</html>Qualcomm Gobi 2000 GPS
Der Einbau der Qualcomm Gobi 2000 in mein X300 ist vollbracht. Die WWAN-Verbindung habe ich aber weder eingerichtet noch getestet. Da mich momentan der GPS-Empfänger mehr interessiert. Der Artikel, welcher auch bei der Firmware-Einrichtung nützliche Dienste geleistet hat, wird auch nun helfen. Hoffe ich mal.
Der integrierte GPS-Empfänger könnte meine Navilock-Empfänger unter Umständen überflüssig machen. Ich denke aber, dass das Kabel der USB-Empfänger den Vorteil bietet, dass die Sicht zum Himmel gerade im Auto einfacher zu bewerkstelligen ist. Denn wenn das Laptop an der Windschutzscheibe klebt, kann es nur schlecht bedient werden.
Falls noch nicht installiert, gibt es aus dem Umfeld von gpsd ein paar nützliche Werkzeuge.
sudo yum -y install gpsd-clients
Gemäss Anleitung fehlt noch die Aktivierung
# echo "\$GPS_START" > /dev/ttyUSB2
Nach dem Start von gpsd sollte xgps die Daten der Satelliten anzeigen.
# gpsd /dev/ttyUSB2





