JavaScript在智能設備物聯網中的崛起
注* 這是一篇老文,略有刪減,不過文中所述目前似乎正在變成現實。有人用Javascript制造機器人和火箭,甚至有人用JavaScript在工業時代的單片機上制作一個天氣預報屏。比XML數據更密集,性能更好的JSON數據交換格式也在成為物聯網傳輸的***。支持NodeJS的硬件平臺也在不斷增多,如RaspberryPI, Tessel, Arduino 。還很多不知名的JS庫 devicejs.org Sylon.js等;很顯然,采用Node.JS來驅動你的物理設備,將極大地降低“創客”們的技術門檻。
星期五,2012年7月13日
在2010年9月7日,我犯了個錯誤,在node-serialport 串口驅動開源項目中添加了一個“不建議使用”的聲明。我已經有了一些使用各種無線頻譜在較大項目庫之間進行通信的經驗(開放API,像X10 ),通過傳感器監測。本來我使用的是非常強大的pyserial庫驅動,剛開始很順利,但在一些與感應器交互的關鍵地方我還是感到了不便。我承認,這種感覺是非常不爽,我不是懷疑這個庫,它已經做得也非常好了。
就在這個時候,JSConf EU(歐盟)展示了一個Nikolai Onken 和 Jörn Zaefferer 關于JavaScript智能設備的提案。在提案中,他們表示使用JavaScript控制設備將會非常簡單,比如:
- $("livingroom").bind("motion", function() {
- $(this).find("lights").brightness("75%").dimAfter("120s");
- });
這個東西撥動了我的神經。
通過模擬現實世界中的的對象和行為。鏈式的,事件化的處理過程看上去非常自然。對于我的情況,我處理的是串口響應,這樣做的***例子就是“當大門打開后,切換所有的燈”。就像上文那段相似的jQuery代碼那樣。因為項目規模的增加,我們已經不需要一個非 常了解串行端口和Python的大師程序員,它只需要對JavaScript和jQuery有一個粗略的理解就可以了。我覺得這里有一些非常有價值的東 西,我開始坐下來實現這些代碼。
在編寫node-serialport的***個版本時,我想我應該分享幾個非常另人振奮的東西。我看到 很多同樣的問題,采用Node.JS進行串口編程時經常會碰到的那種,我想表達一下我的看法。我更喜歡使用的Node.js驅動arduinos,無線裝 備,打印機,烤面包機等(一切可以通過串口連接的東西)。首先最直接的原因就是簡單。NodeJS的模塊系統和耦合非常低的原生綁定允許我能迅速完成底層 功能的開發,而不必引用太多的Node庫,通過幾段代碼。這也讓我減小了對庫維護的工作,充分利用時間去解決實際問題,而不必整天測試串口的功能。 Node.js與傳統的C+ +代碼連接是如此之簡單,幾乎是微不足道的實施(保證正確性的前提下),這就是為什么我馬上愛上了它的原因。我認識的人也有類似的感覺(或者恨)對 Python或Ruby的本地綁定,但個人而言,我認為C和JavaScript之間的語法相似性使得它們之間的編程過程更加的流暢,盡管跨越兩種語言。 如果你看一下Node.JS的底層代碼,一個串口的C++,你也許可以完全理解,即使你只有JavaScript編程的經驗。無可否認,這可能會造成一點 混亂,但對我來說只是一點點,完全無法掩蓋我對操作底層串行端口的喜悅。這是值得研究的。
盡管底層代碼已經寫完了,但是我繼續為 Node.js串口編碼貢獻代碼的原因是,我希望我可以以一種比較優雅的方式來解決這類問題。如前所述,我在我的系統中使用了Node,串口 (Arduino的,等等)。在大多數系統中,在他們會等待某些事件或數據,然后處理一些事件的反應。這可以說是JavaScript的優勢,絕大部分人 都可以處理,他們可以使用Node和JavaScript來思考。你也可以用其他語言,但JS無疑是最簡單的,從低層的c++的代碼,到事件處理都得心應 手,毫不費力。在有關Node.JS無線擴展機器人一文中,有人詢問為 何不是Clojure或scala或Python或Ruby而選擇JavaScript我最直接的答案是,大量代碼成就了響應式的系統(包括 eventmachine/ twisted/ Redis/ PubSub/等)此類系統的快速增長增加了對事件驅動機制的喜愛。現在誠實地講,因為多種開源硬件平臺的出現(Raspberry pi, arduino, x10等),軟件工程師現在也可以玩硬件了。在這種背景后,我相信會有越來越多的Ruby開發人員使用Node.js創建智能硬件原型。它更輕量級,操作 簡單,并且很容易編寫復雜的響應式系統。最重要的是它基于JavaScript,因此即使你的原型因為某些“更值得生產的”東西而失敗了,你也不會損失太 多時間。
下面這個例子是展示Node.JS的應用有多輕量級, 在Johnny-Five工作的Rick Waldron做出的驚艷的框架,看看從acceleromator處理事件的源代碼。它非常易于閱讀,易于理解而且僅需要10行代碼。控制伺服機構的代碼,也僅有10多行。
所有這些都讓我相信,JS將是未來智能設備控制器的***編程語言。
我這樣說是因為我每天都聽到越來越多的人作出更新,更亮,更智能的東西。對于我來講,它打破了軟件和硬件的邊界,這讓我很開心,相對于純碎地寫代碼,智能硬件領域讓我們更接受真實,我們有更大的潛力做些更多更好的事情。
原文地址: voodootikigod.com
譯文:http://ourjs.com/detail/540d6ec9f50bcc0a66000007
譯者:ourjs