MakerBot + RaspberryPi + Google Chrome = 快樂動手做!

December 18, 2013
Facebook
Twitter
Truth Labs最近添購了一臺Maker Replicator 2,我們深情為它取名Arnold of Villanova II,小名Arnold。我們發揮Maker精神,運用Chrome的擴充功能查看Arnold的工作進度。當然除了擴充功能,我們還應用了一些很酷的科技——像是s3g(Sanguino3 G-Code) 協定、Raspberry Pi、Node.js,當然還是有Google Chrome的擴充功能。接下來看看我們是怎麼做的吧!

图片

圖1. MakerBot Chrome擴充功能

問題:除了定位還是定位

Arnold無法中央定位,所以我們必須多花心思確認列印工作的狀態,而很多次結果都令人沮喪,因為我們發現錯誤通常在Arnold堆疊填充材料時產生。簡單的列印工作至少進行30分鐘,而複雜的列印工作則甚至要數小時。一整天下來我們浪費不少時間來查看Arnold的狀況。

图片

圖2. MakerBot的液晶顯示器會報告進度,但我們想在電腦螢幕上查看。

解決辦法:擁有自我意識的MakerBot

其實也不是真的有自我意識啦,但至少是個開始。一般的MakerBot Replicator 2無法連接網路,但有了Raspberry Pi的幫助,沒有什麼是做不到的。參考物聯網(Internet of Things)的做法,我動手將Arnold接上網路,並且設定一個簡單的通知系統。目前我已經具備幾個可用的資源了,接下來我會解釋如何把它們連接在一起。你也可以從makerbot-status軟體庫中的一些指令範例來開始著手,這裡會告訴你如何用s3g 協定對連接USB的MakerBot查詢訊息。

图片

圖3. Raspberry Pi + MakerBot = 超棒組合

手邊的資源:

MakerBot Replicator 2——執行能透過USB埠進行系列溝通的韌體。

Raspberry Pi——運作簡單的Node.js應用程式,透過s3g 協定與MakerBot進行溝通。

Pidora 18(Raspberry Pi Fedora混合版)——適合Pi使用的一個Linux發布封包。這個版本是以Fedora為基礎,在此我選擇使用這個封包。

Node.js(編譯來自訊號端的資訊)——編譯來自訊號端的Node.js,用來確保node-gyp可在Raspberry Pi上順利運作,並且能與node-serialport封包互相搭配。

Windows Azure——建立一個以雲端系統為基礎的終點,好讓Arnild可以傳遞資訊到此。Azure的網站也架設了一個bayeux伺服器,來管理任何一個擷取新資訊的客戶端。

Google Chrome擴充功能——Chrome瀏覽器可以透過此擴充功能與桌面互連,並輕易地獲取通知。

图片

圖4. 結構圖 (Raspberry Pi基金會的商標正是一顆覆盆子)

重點

這項特別的科技結合可能會遇到一些特殊挑戰,以下是需要注意的地方:

Raspberry Pi當作訊號端來建立Node.js

由於在使用node-gyp時的必要元件以及要透過序列驅動器進行低階溝通,所以我必須要在Raspberry Pi的訊號端建立一個節點(node)。只要你環境設定正確,這個過程其實很簡單。首先,你必須安裝一個Linux版本,你可在Raspberry Pi的官網上下載這個版本。同時注意到下方的安裝步驟是以Pidora為主,在Milage上可能會有些不同。

建立環境設定
在你從訊號端建立Node.js之前,有幾項工作你必須先完成。同時請注意到有些指令需要較高的權限,這些依你的版本而定,你可能需要用到su或sudo這兩個指令。

我們首先要做的是設定系統時鐘。如果系統時鐘錯誤,在建立環境時有些錯誤也會隨之發生。

$ date –set=”18 NOV 2013 18:00:00″

確認日期和時間正確之後,你必須更新封包管理員與所有的已安裝封包,而安裝在Pidora上的封包管理員—–Yum Package Manager。可由下列指令來執行系統的完整更新:

$ yum update

系統更新完成後,我們需要確認Python版本(建議是2.6或2.7)、GCC 4.2(或更新的版本)、GNU Make 3.81(或更新版本)都已安裝完畢。Pi上的Python應該已經裝好了,輸入下列指令可以安裝GCC與Make:


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

下載並建立Node.js
現在我們的環境已經建立完畢,接下來請跟著下列步驟,進行Node.js的下載、建立與安裝:

1.下載node-v0.10.18.tar.gz檔或同樣名稱的檔案
2.將檔案解壓縮到目錄中,並將該目錄設成解壓縮的目錄

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

3.     輸入./configure

 $ ./configure

4.     執行make指令 (這會花點時間)

 $ make

5.     執行make install指令 (也會花點時間)

 $ make install

6.     完成--如果一切順利,你應該可以執行下列指令:

 $ node –version

使用Node.js透過s3g協定Arnold溝通
s3g 協定是MakerWare和其他類似軟體用來和MakerBot溝通的一種序列協定。MakerBots企業在這裡提供了一個該協定的Python 安裝啟動工具。利用Python 協定作為參考,我在Node.js中放入了協定的一個子集,你可以在github上找到它。

s3g 協定查詢
用ArrayBuffer和Buffer物件,我建置了一個簡單的查詢生成器(Query Builder)來建立s3g封包,並透過序列埠傳送到MakerBot。介面目前支援三種s3g查詢:

  •  得知Build Name
  •  得知Build Stats
  •  得知Toolhead Temp



透過node-serialport進行序列通信

node-serialport封包提供一個簡單的序列介面,讓我們可以和MakerBot溝通。我在序列介面上寫了一個可支援分析指令與回覆的封包程式。


傳送狀態到Azure
Raspberry Pi上的節點應用程式每20秒會查詢MakerBot一次。偵測到狀態改變時,Windows Azure Node.js上的POST就會開始動作。使用Windows Azure就可不必再額外為Raspberry Pi提供一個可取得的IP位址,用戶端也可避免負載過多。

Chrome 擴充功能和通知
Chrome支援一部份的W3C網頁通知標準規定,一開始我接觸到使用此規定的執行通知,總覺得還是有一些缺點。像是通知必須通過使用者的允許,以及使用者必須到特定的網站才能獲取通知。為了省去這些限制,我決定安裝Chrome擴充功能。我做了一個簡單的彈出視窗,來顯示MakerBot的目前狀態。圖5即是使用中的擴充功能彈出視窗。為了使彈出視窗沒有動作時一樣可以使用通知,我使用背景頁面顯示通知,以下是有關背景頁面的說明。

图片

圖5. MakerBot Chrome擴充功能

背景頁面
比起一點擊網頁圖示就出現的彈跳視窗,背景頁面是一個腳本的集合,有較長的生命週期。只要開啟Chrome,我們就可以接收更新、看到通知。想要定義一個背景頁面,你必須要在你擴充功能的表單檔中新增一個背景頁面入口檔,任何背景頁面會使用到的附屬程式都會放在它裡面。


“background”: {

  “scripts”: [“jquery.min.1.10.2.js”,

    “faye-browser-min.js”,

    “background.js”]

},

“content_security_policy”: “script-src ‘self’

https://makerstatus.azurewebsites.net; object-src ‘self'”

Faye發佈訂閱訊息系統
你會注意到在表單檔裡的背景頁面入口檔包含了faye-browser-min.js.檔。我們利用Faye建立與Windows Azure Node.js. 服務的連結,Faye主要用來傳送Arnold更新的訊息。為了能讓Faye在擴充功能的沙盒(sandbox)中順利運作,我們必須新增一個入口檔,來解除擴充功能中的內容安全政策(Content Security Policy,CSP)。這讓JSON-P回叫輪詢(callback polling),也就是Faye所用的一個傳送機制得以順利運作。這個步驟十分重要,因為擴充功能和Azure 服務並不是在同一個工作領域中。

通知
為了讓通知能夠運作,必須在表單檔中的允許區塊中加入一行指令。因為我們使用圖示作為通知,我們也需要把圖示加到可獲取的網路資源中。


“permissions”: [

  “notifications”

],

“web_accessible_resources”: [

  “makerbot.logo.notify.png”

]


當所有的指令都完成了,也處理完表單檔中剩下的入口檔後,我們就能看到如下圖所示簡單的通知視窗。

图片

圖6. 桌面通知

總結

我們在這篇文章中討論了一些如何把MakerBot連上網路的步驟。現在基本架構已經成形了,之後可能會新增一些有趣的通知功能,像是完成度百分比,或是透過網頁即時通訊(WebRTC)實況直播建造過程。

好好享受動手做的樂趣吧!


[原文]
Social media & sharing icons powered by UltimatelySocial