Jeffrey Cross
Jeffrey Cross

MakerBot + RaspberryPi + Google Chrome = HappyMaker!

Nous avons récemment acquis un MakerBot Replicator 2 ici chez Truth Labs. Il est affectueusement appelé Arnold de Villanova II (Arnold en abrégé). Dans l’esprit des fabricants, nous avons mis en place notre propre extension en chrome pour nous informer de ce que Arnold est en train de préparer. Nous avons utilisé des technologies intéressantes: protocole s3g, Raspberry Pi, Node.js et, bien sûr, Google Chrome Extensions. Voici comment nous l’avons fait.

Le problème: Emplacement Emplacement Emplacement

Arnold n’est pas situé en centre-ville, ce qui nous oblige à faire un voyage pour vérifier l’état des travaux d’impression, et à plusieurs reprises, à notre grande consternation, nous trouvons Arnold égaré dans une pile de son propre filament. Les travaux d'impression prennent entre 30 minutes pour les modèles simples et quelques heures pour les modèles complexes. La marche aller-retour d'Arnold au cours d'une journée devient donc fastidieuse.

La solution: des MakerBots auto-conscients

Eh bien, pas vraiment MakerBots conscient de soi, mais c’est un début. Un MakerBot Replicator 2 classique n’a pas la capacité de se connecter à Internet, mais avec un peu d’aide d’un Raspberry Pi, tout est possible. En reprenant une page du manuel de l'internet des objets, j'ai décidé de connecter Arnold à Internet et de mettre en place un système de notification simple. Le puzzle contient quelques pièces. Je vais expliquer ci-dessous comment elles s’emboîtent. Vous pouvez également consulter le référentiel makerbot-status pour obtenir un exemple. Le référentiel vous montre comment utiliser le protocole s3g pour interroger les informations d'un MakerBot connecté via USB.

Pièces du puzzle

MakerBot Replicator 2 - Micrologiciel en cours d'exécution capable de communiquer en série via le connecteur USB.

Raspberry Pi - Exécution d’une simple application Node.js chargée de communiquer avec MakerBot via le protocole s3g.

Pidora 18 (Fedora Remix Raspberry Pi) - Un Linux Distro disponible pour le Pi. Il est basé sur Fedora, ma distribution de choix.

Node.js (compilé à partir de la source) - Compilez Node.js à partir de la source pour vous assurer que node-gyp fonctionne correctement sur Raspberry Pi et jouait bien avec le package node-serialport.

Windows Azure - Création d'un point de terminaison dans le nuage pour que Arnold puisse envoyer des informations. Le site Web Azure héberge également un serveur Bayeux pour gérer les clients à l'écoute de nouvelles informations.

Google Chrome (Extensions) - Chrome, par le biais de ses extensions, s’accroche facilement aux notifications du Bureau.

Les points forts

Cette combinaison particulière de technologie offrait des défis uniques. Voici les faits saillants:

Créer Node.js à partir des sources sur Raspberry Pi

En raison de la nécessité de noeud-gyp et de communications de bas niveau via des pilotes série, j'ai dû créer un noeud à partir de la source sur le Raspberry Pi. C'est un processus simple tant que votre environnement est configuré correctement. Vous devez d’abord installer une distribution linux, que vous pouvez trouver sur le site Web de Raspberry Pi. Notez également que les instructions répertoriées ci-dessous ont été complétées avec Pidora. Le kilométrage peut varier.

Configuration de l'environnement de construction

Avant de compiler Node.js à partir des sources, vous devez effectuer plusieurs opérations. Notez également que certaines commandes nécessitent des privilèges élevés et que, selon votre distribution, vous devrez peut-être utiliser les commandes su ou sudo.

La première chose à faire est de régler l’horloge système. Certaines erreurs de construction étranges se produisent lorsque l'horloge système est incorrecte.

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

Une fois que la date et l'heure sont correctes, vous devrez également mettre à jour le gestionnaire de packages et tous les packages installés. Yum Package Manager est le gestionnaire de packages installé sur Pidora. Une mise à jour complète du système peut être effectuée en exécutant les opérations suivantes:

mise à jour $ yum

Une fois que votre système est à jour, nous devons nous assurer que Python (2.6 ou 2.7), GCC 4.2 ou plus récent et GNU Make 3.81 ou plus récent sont installés. Python devrait déjà être installé, pour installer gcc et faire exécuter les commandes ci-dessous:

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

Téléchargez et construisez Node.js

Maintenant que notre environnement de construction est prêt à fonctionner, nous devons télécharger, construire et installer Node.js. Suivez les étapes ci-dessous:

  1. Téléchargez les fichiers source node-v0.10.18.tar.gz ou équivalent
  2. Extrayez les fichiers dans un répertoire, puis changez de répertoire en répertoire extrait

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

  3. Exécuter le script ./configure

    $ ./configurer

  4. Exécute la commande make (cela prendra un peu de temps)

    $ make

  5. Exécutez la commande make install (cela prendra aussi un peu de temps)

    $ make install

  6. Terminé - Si tout se passe bien, vous devriez pouvoir exécuter la commande suivante:

    $ node --version

Parler à Arnold sur le protocole s3g à l'aide de Node.js

Le protocole s3g est un protocole série utilisé par MakerWare et un logiciel similaire pour communiquer avec MakerBots. MakerBot Industries fournit une implémentation Python du protocole ici. En utilisant le protocole Python comme référence, j'ai implémenté un petit sous-ensemble du protocole dans Node.js, vous pouvez trouver la source sur github.

Requêtes de protocole s3g À l'aide des objets ArrayBuffer et Buffer, j'ai implémenté un constructeur de requêtes simple qui crée des paquets s3g bien formés à envoyer au MakerBot via le port série. L'interface supporte actuellement trois requêtes s3g:

  • Obtenir le nom de la construction
  • Obtenir des statistiques de construction
  • Obtenir le temp de la tête

Communication série via node-serialport Le paquet node-serialport fournit une interface série simple pour communiquer avec le MakerBot. J'ai écrit un wrapper autour de l'interface série pour prendre en charge l'analyse syntaxique des commandes / réponses.

Statut de diffusion sur Azure

L'application nœud sur le Raspberry Pi interroge le MakerBot toutes les 20 secondes. Lorsqu'un changement d'état est détecté, un POST sur un service Windows Azure Node.js est effectué. Windows Azure permet d'éviter de devoir fournir une adresse IP accessible de l'extérieur pour le Raspberry Pi et de se décharger de la responsabilité de la maintenance des clients.

Extensions et notifications Chrome

Chrome prend en charge certaines parties du projet de norme W3C Web Notifications. J'ai d'abord envisagé de mettre en œuvre les notifications à l'aide de la norme, mais je pensais qu'il restait des lacunes. En particulier, l'utilisateur doit autoriser les notifications et vous devez accéder au site pour recevoir des notifications. Pour contourner ces limitations, j'ai décidé d'implémenter une extension Chrome. J'ai créé une fenêtre contextuelle simple indiquant l'état actuel de la MakerBot. La figure 5 est la fenêtre contextuelle d'extension en action. Pour autoriser les notifications lorsque le popup était inactif, j'ai utilisé une page d'arrière-plan, qui sera expliquée ci-dessous.

Pages d’arrière-plan Une page d’arrière-plan est un ensemble de scripts dont le cycle de vie est plus long que celui de la fenêtre contextuelle qui s’affiche lorsque vous cliquez sur l’icône d’une extension. Cela permet de recevoir les mises à jour et d'afficher les notifications une fois que Chrome est lancé. Pour définir une page d’arrière-plan, vous devez ajouter une entrée au fichier manifeste de votre extension. Il devrait également inclure toutes les dépendances que votre page d'arrière-plan utilisera.

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

Système de messagerie Faye Publish-Subscribe Vous remarquerez que l’entrée de la page d’arrière-plan du manifeste comprend faye-browser-min.js. Nous utilisons Faye pour établir une connexion au service Windows Azure Node.js. Faye est utilisée pour diffuser les mises à jour d'Arnold. Pour que Faye soit fonctionnel dans le bac à sable de l’extension, nous devons ajouter une entrée pour assouplir la stratégie de sécurité du contenu de l’extension. Cela permet une scrutation des rappels JSON-P, qui est un mécanisme de transport utilisé par Faye. C'est nécessaire ici car l'extension et le service Azure ne sont pas sur le même domaine.

Notifications Pour activer les notifications, il est nécessaire d'inclure une ligne dans la section des autorisations du fichier manifeste. Comme nous utilisons une icône avec notre notification, nous devons également l'ajouter en tant que ressource accessible sur le Web.

"permissions": ["notifications"], "web_accessible_resources": ["makerbot.logo.notify.png"]

Une fois que tous les scripts sont en place et que le reste du fichier manifeste est pris en compte, lorsque nous recevons une mise à jour, nous créons une notification simple, semblable à celle illustrée ci-dessous.

Envelopper le tout

Dans cet article, nous avons suivi certaines étapes pour connecter un MakerBot aux interwebs. Maintenant que la base est implémentée, certains ajouts intéressants peuvent inclure l'ajout d'un pourcentage de génération complète, voire un flux en direct de la progression de la génération via WebRTC.

Heureux de faire!

@ aowola

Part

Laisser Un Commentaire