JavaScript在物聯網中的應用
凡是能用JavaScript寫出來的,最終都會用JavaScript寫出來。
—— Atwood定律
在那篇《最流行的程式語言JavaScript能做什麼?》裡,我們列舉了JavaScript在不同領域的使用情況,今天讓我們來詳解一下JavaScript在物聯網中的應用。
基礎:物聯網的三個層級
開始之前, 先讓我們簡單地介紹點物聯網的基礎知識。如果你有點Web開發經驗的話,都知道下圖是CS架構:
相比於一個物聯網系統,無非就是多了一層硬體層以及可選的協調層。
這個硬體層決定了物聯網應用比Web應用更加複雜。對於大部分的Web應用來說 ,客戶端都是手機、電腦、平板這些裝置,都有著強大的處理能力,不需要考慮一些額外的因素。
對於物聯網應用來說,我們需要考慮裝置上的MCU的處理能力,根據其處理能力和使用環境使用不同的通訊協議,如我們在一些裝置上需要使用CoAP協議。在一些裝置上不具備網路功能,需要考慮藉助於可以聯網的協助層,並且還需要使用一些短距離的無線傳輸協議,如低功耗藍芽、紅外、Zigbee等等。
一個物聯網系統:六種語言
兩年半以前,大四,電子資訊工程,我選定的畢業論文是一篇關於物聯網的論文——《基於REST服務的最小物聯網系統設計》。這是一篇入門級的物聯網論文,如果大部分學習CS的人有一點硬體基礎,都能寫出這樣的論文。
這篇論文是之前參加比賽的作品論文的“最小化”,裡面使用到的主要就是建立RESTful服務,而它甚至稱不上是一種技術。在這個作品裡:
- 我們使用Python語言裡的Django框架作為Web服務框架,使用Django REST Framework來建立RESTful服務。
- 為了使用手機當控制器,我們還要用Java寫一個Android應用。
- 我們使用Raspberry Pi作為硬體端的協調層,用於連線網路,並傳輸控制訊號給硬體。
- 我們在硬體端使用Arduino作為控制器,寫起程式碼特別簡單,可以讓我們關注於業務。
- 最後,我們還需要在網頁上做一個圖表來顯示實時資料。
所有的這些,我們需要使用Python、Java、JavaScript、C、Arduino五種語言。而如果我們要寫相應的iOS應用,我們還需要Objective-C。
![你是在逗我嗎?](http://articles.phodal.com/js-iot/6359758744428735171956612167_are-you-serious-wtf-meme-baby-face.jpg )
JavaScript在物聯網領域的發展
同樣的,兩年多以前,剛實習,在我們的專案裡,我們的新專案裡我們使用Backbone作為單頁面應用框架的核心來打造Web應用。這時,我開始關注Node.js實現物聯網應用的可能性。
當時,已經有了物聯網協議MQTT和CoAP協議的庫,於是我照貓畫虎地寫了一個支援HTTP、CoAP、WebSocket和MQTT的物聯網。由於,當時缺乏一些大型應用的開發經典,所以做得並不是很好,但是已經可以看到JavaScript在這方面的遠景。
一年多以前,Ionic還沒推出正式版的時候,我發現到了這個框架真的很棒——它自帶了一系列的UI,還用NgCordova集成了Cordova的一系列外掛。我便開始使用Ionic寫了一些移動應用,發現還挺順手的。接著,我就開始拿這個框架嘗試寫物聯網應用,這需要一些原生的外掛,如BLE、MQTT。後來,我也寫了一個簡單的CoAP外掛。
後來我們不再需要編譯Node.js,就可以在ARM處理器上執行Node.js。並且我們已經有Tessel、Espruino、Kinoma Create、Ruff這些可以直接執行JavaScript的開發板。三星還推出iot.js,可以讓更多的嵌入式裝置可以使用JavaScript語言作為開發語言。
人們開始在硬體上使用JavaScript的原因有很多,如Web的開發人員是最多的、JavaScript很容易上手。
現在,這次我們在這三個層級上都可以使用JavaScript,只需要一種語言。
使用一種語言開發物聯網應用:JavaScript
在我寫的那本《自己動手設計物聯網》中,我就試圖去展示JavaScript在這方面的威力。使用Node.js + Node-CoAP + MQTT.js + MongoDB + Express搭建了一個支援多協議的物聯網:
不過,上圖是完善版的物聯網,程式碼自然是在GitHub上啦:Lan。作為服務端來說,Node.js的能力已經是經過驗證的。而在混合應用上,仍然也可以經受住考驗,混合應用在手機上做個圖表是輕輕鬆鬆的事(只需要獲取資料,然後顯示):
作一個控制端也是輕輕鬆鬆的事(我們只需要發個POST請求,更具邏輯一點的就是先獲取狀態):
而在硬體端,我並沒有在書中以JavaScript作為例子來展示JavaScript的用法,因為這會侷限了使用者的硬體裝置。
不過,我們仍然可以使用類似於Johnny-Five這樣的庫來做硬體方面的程式設計,只是它沒有那麼好玩~~。
既然我們可以JavaScript來實現,為什麼我們還要喝杯咖啡等它用C編譯完呢?
你想知道的答案都在這本書裡,已在亞馬遜、京東、噹噹上架:
亞馬遜:https://www.amazon.cn/dp/B01IBZWTWW
京東:http://item.jd.com/11946585.html
畢竟:
凡是能用JavaScript寫出來的,最終都會用JavaScript寫出來。
轉載於:https://my.oschina.net/phodal/blog/731052