Jeffrey Cross
Jeffrey Cross

MakerBot + RaspberryPi + Google Chrome = HappyMaker!

Kürzlich haben wir hier bei Truth Labs einen MakerBot Replicator 2 erworben. Er ist liebevoll als Arnold von Villanova II (kurz Arnold) bekannt. Im Herstellergeist haben wir unsere eigene Chrom-Erweiterung gedreht, um uns wissen zu lassen, was Arnold vorhat. Wir haben ein paar coole Technologien verwendet - s3g Protocol, Raspberry Pi, Node.js und natürlich Google Chrome Extensions. So haben wir es gemacht

Das Problem: Ort Ort Ort

Arnold ist nicht zentral gelegen, weshalb wir uns auf eine Reise begeben müssen, um den Status von Druckaufträgen zu überprüfen, und zu unserer großen Bestürzung finden wir Arnold oft auf einem Haufen seines eigenen Filaments. Druckaufträge dauern für einfache Modelle zwischen 30 Minuten und für komplexe bis zu ein paar Stunden. Der Weg von und nach Arnold über einen Zeitraum von einem Tag wird langweilig.

Die Lösung: Self-Aware MakerBots

Nun, nicht gerade selbstbewusste MakerBots, aber es ist ein Anfang. Ein herkömmlicher MakerBot Replicator 2 kann nicht mit dem Internet verbunden werden, aber mit etwas Hilfe eines Raspberry Pi sind alle Dinge möglich. Ich zog eine Seite aus dem Internet of Things Playbook heraus und wollte Arnold mit dem Internet verbinden und ein einfaches Benachrichtigungssystem einrichten. Es gibt ein paar Teile des Puzzles, ich werde erklären, wie sie zusammenpassen. Sie können auch den Makerbot-Status-Repo überprüfen, um zum Beispiel Code zu erhalten. Das Repo zeigt Ihnen, wie Sie mit dem s3g-Protokoll Informationen von einem über USB verbundenen MakerBot abfragen.

Teile des Puzzles

MakerBot Replicator 2 - Laufende Firmware für serielle Kommunikation über den USB-Anschluss.

Raspberry Pi - Ausführen einer einfachen Node.js-Anwendung, die für die Kommunikation mit dem MakerBot über das s3g-Protokoll verantwortlich ist.

Pidora 18 (Raspberry Pi Fedora Remix) - Eine für das Pi verfügbare Linux-Distribution. Es basiert auf Fedora, meiner bevorzugten Wahl.

Node.js (aus Quelle kompiliert) - Kompilieren Sie Node.js aus der Quelle, um sicherzustellen, dass node-gyp auf dem Raspberry Pi ordnungsgemäß funktioniert und gut mit dem node-serialport-Paket gespielt wird.

Windows Azure - Erstellt einen Cloud-basierten Endpunkt, an den Arnold Informationen senden kann. Auf der Azure-Website befindet sich auch ein Bayeux-Server, auf dem alle Clients verwaltet werden, die auf neue Informationen warten.

Google Chrome (Erweiterungen) - Chrome kann über seine Erweiterungen problemlos in Desktopbenachrichtigungen eingebunden werden.

Die Höhepunkte

Diese besondere Kombination von Technologien bot einige einzigartige Herausforderungen. Hier sind die Highlights:

Erstellen von Node.js aus dem Quellcode auf Raspberry Pi

Aufgrund der Notwendigkeit von node-gyp und niedriger Kommunikation über serielle Treiber musste ich auf dem Raspberry Pi einen Knoten aus der Quelle erstellen. Dies ist ein unkomplizierter Prozess, solange Ihre Umgebung korrekt eingerichtet ist. Zuerst müssen Sie eine Linux-Distribution installieren, die Sie auf der Raspberry Pi-Website finden können. Beachten Sie auch, dass die unten aufgeführten Anweisungen mit Pidora ausgeführt wurden. Laufleistung kann variieren.

Build-Umgebung einrichten

Es gibt ein paar Dinge, die Sie tun müssen, bevor Sie Node.js aus dem Quellcode erstellen. Beachten Sie auch, dass für einige Befehle erhöhte Berechtigungen erforderlich sind. Je nach Ihrer Distribution müssen Sie möglicherweise su- oder sudo-Befehle verwenden.

Als erstes stellen wir die Systemuhr ein. Einige seltsame Build-Fehler treten auf, wenn die Systemuhr falsch ist.

$ date --set = "18 NOV 2013 18:00:00"

Wenn das Datum und die Uhrzeit korrekt sind, müssen Sie auch den Paketmanager und alle installierten Pakete aktualisieren. Der Yum Package Manager ist der auf Pidora installierte Paketmanager. Eine vollständige Systemaktualisierung kann durchgeführt werden, indem Sie Folgendes ausführen:

$ yum Update

Wenn Ihr System auf dem neuesten Stand ist, müssen Sie sicherstellen, dass Python (2.6 oder 2.7), GCC 4.2 oder neuer und GNU Make 3.81 oder neuer installiert sind. Python sollte bereits installiert sein, um gcc zu installieren und die folgenden Befehle auszuführen:

$ yum install gcc-c ++. armv6hl $ yum install make.armv6hl

Laden Sie Node.js herunter und erstellen Sie sie

Nun, da wir unsere Build-Umgebung fertig haben, müssen wir Node.js herunterladen, erstellen und installieren. Folgen Sie den unteren Schritten:

  1. Laden Sie die Quelldateien von node-v0.10.18.tar.gz oder gleichwertige Dateien herunter
  2. Extrahieren Sie Dateien in ein Verzeichnis und wechseln Sie dann in das extrahierte Verzeichnis

    $ tar xvfz node-v0.10.18.tar.gz $ cd node-v0.10.18

  3. Führen Sie das Skript ./configure aus

    $ ./configure

  4. Make-Befehl ausführen (dies dauert eine Weile)

    $ machen

  5. Führen Sie den Befehl make install aus (dies dauert ebenfalls eine Weile)

    $ make install

  6. Fertig - Wenn alles gut geht, sollten Sie den folgenden Befehl ausführen können:

    $ node --version

Mit Arnold über s3g Protocol unter Verwendung von Node.js sprechen

Das s3g-Protokoll ist ein serielles Protokoll, das von MakerWare und einer ähnlichen Software für die Kommunikation mit MakerBots verwendet wird. MakerBot Industries bietet hier eine Python-Implementierung des Protokolls. Mit dem Python-Protokoll als Referenz habe ich eine kleine Teilmenge des Protokolls in Node.js implementiert. Sie finden die Quelle auf github.

s3g-Protokollabfragen Mit ArrayBuffer- und Buffer-Objekten habe ich einen einfachen Abfrage-Builder implementiert, der gut gebildete s3g-Pakete erstellt, die über den seriellen Port an den MakerBot gesendet werden. Die Schnittstelle unterstützt derzeit drei s3g-Abfragen:

  • Holen Sie sich den Build-Namen
  • Baue Statistiken ab
  • Toolhead-Temp. Abrufen

Serielle Kommunikation über Node-Serialport Das Node-Serialport-Paket bietet eine einfache serielle Schnittstelle für die Kommunikation mit dem MakerBot. Ich habe einen Wrapper für die serielle Schnittstelle geschrieben, um die Befehls- / Antwortanalyse zu unterstützen.

Übertragungsstatus an Azure

Die Knotenanwendung auf dem Raspberry Pi fragt den MakerBot alle 20 Sekunden ab. Wenn eine Statusänderung erkannt wird, wird ein POST für einen Windows Azure Node.js-Dienst ausgeführt. Windows Azure wird verwendet, um zu vermeiden, dass eine extern zugängliche IP-Adresse für den Raspberry Pi bereitgestellt werden muss, und um die Verantwortung für die Wartung von Clients zu entlasten.

Chrome-Erweiterungen und Benachrichtigungen

Chrome unterstützt Teile des Entwurfsstandards für W3C Web Notifications. Ich habe mich zunächst mit der Implementierung von Benachrichtigungen nach dem Standard befasst, habe aber immer noch Mängel festgestellt. Insbesondere muss der Benutzer die Berechtigung für Benachrichtigungen erteilen, und Sie müssen zur Website navigieren, um Benachrichtigungen zu erhalten. Um diese Einschränkungen zu umgehen, habe ich mich für eine Chrome-Erweiterung entschieden. Ich habe ein einfaches Popup erstellt, das den aktuellen Status des MakerBot anzeigt. Abbildung 5. Ist das Erweiterungspopup in Aktion. Um Benachrichtigungen zuzulassen, wenn das Popup inaktiv war, habe ich eine Hintergrundseite verwendet, die weiter unten erläutert wird.

Hintergrundseiten Eine Hintergrundseite ist eine Sammlung von Skripts, die einen längeren Lebenszyklus haben als das Popup, das angezeigt wird, wenn Sie auf das Symbol einer Erweiterung klicken. Auf diese Weise können Aktualisierungen empfangen und Benachrichtigungen angezeigt werden, sobald Chrome gestartet wird. Um eine Hintergrundseite zu definieren, müssen Sie der Manifestdatei Ihrer Erweiterung einen Eintrag hinzufügen. Es sollte auch alle Abhängigkeiten enthalten, die Ihre Hintergrundseite verwenden wird.

"background": {"scripts": ["jquery.min.1.10.2.js", "faye-browser-min.js", "background.js"]}, "content_security_policy": "script-src 'selbst "https://makerstatus.azurewebsites.net; object-src" self ""

Faye Publish-Subscribe Messaging System Sie werden feststellen, dass der Hintergrundseiteneintrag im Manifest faye-browser-min.js enthält. Wir verwenden Faye, um eine Verbindung zum Windows Azure Node.js-Dienst herzustellen. Faye wird verwendet, um Updates von Arnold zu senden. Damit Faye in der Sandbox der Erweiterung funktionsfähig ist, müssen Sie einen Eintrag hinzufügen, um die Inhaltssicherheitsrichtlinie der Erweiterung zu lockern. Dies ermöglicht JSON-P Callback-Polling, einen von Faye verwendeten Transportmechanismus. Dies ist hier erforderlich, da sich die Erweiterung und der Azure-Dienst nicht in derselben Domäne befinden.

Benachrichtigungen Um Benachrichtigungen zu aktivieren, muss eine Zeile in den Berechtigungsabschnitt der Manifestdatei eingefügt werden. Da wir in unserer Benachrichtigung ein Symbol verwenden, müssen wir es auch als Webressource hinzufügen.

"Berechtigungen": ["Benachrichtigungen"], "web_accessible_resources": ["makerbot.logo.notify.png"]

Sobald alle Skripts vorhanden sind und der Rest der Manifestdatei erscheint, erstellen wir nach Erhalt eines Updates eine einfache Benachrichtigung wie die unten abgebildete.

Alles einpacken

In diesem Beitrag haben wir einige Schritte durchlaufen, um einen MakerBot mit den Interwebs zu verbinden. Nun, da wir die Basis implementiert haben, können einige interessante Ergänzungen das Hinzufügen eines vollständigen Prozentsatzes oder sogar einen Live-Stream des Build-Fortschritts über WebRTC umfassen.

Glücklich machen!

@aowola

Aktie

Leave A Comment