凡是能用JavaScript寫出來的,最終都會用JavaScript寫出來。html
—— Atwood定律git
在那篇《最流行的編程語言JavaScript能作什麼?》裏,咱們列舉了JavaScript在不一樣領域的使用狀況,今天讓咱們來詳解一下JavaScript在物聯網中的應用。github
開始以前, 先讓咱們簡單地介紹點物聯網的基礎知識。若是你有點Web開發經驗的話,都知道下圖是CS架構:編程
相比於一個物聯網系統,無非就是多了一層硬件層以及可選的協調層。網絡
這個硬件層決定了物聯網應用比Web應用更加複雜。對於大部分的Web應用來講 ,客戶端都是手機、電腦、平板這些設備,都有着強大的處理能力,不須要考慮一些額外的因素。架構
對於物聯網應用來講,咱們須要考慮設備上的MCU的處理能力,根據其處理能力和使用環境使用不一樣的通訊協議,如咱們在一些設備上須要使用CoAP協議。在一些設備上不具有網絡功能,須要考慮藉助於能夠聯網的協助層,而且還須要使用一些短距離的無線傳輸協議,如低功耗藍牙、紅外、Zigbee等等。框架
兩年半之前,大四,電子信息工程,我選定的畢業論文是一篇關於物聯網的論文——《基於REST服務的最小物聯網系統設計》。這是一篇入門級的物聯網論文,若是大部分學習CS的人有一點硬件基礎,都能寫出這樣的論文。編程語言
這篇論文是以前參加比賽的做品論文的「最小化」,裏面使用到的主要就是建立RESTful服務,而它甚至稱不上是一種技術。在這個做品裏:學習
咱們使用Python語言裏的Django框架做爲Web服務框架,使用Django REST Framework來建立RESTful服務。ui
爲了使用手機當控制器,咱們還要用Java寫一個Android應用。
咱們使用Raspberry Pi做爲硬件端的協調層,用於鏈接網絡,並傳輸控制信號給硬件。
咱們在硬件端使用Arduino做爲控制器,寫起代碼特別簡單,可讓咱們關注於業務。
最後,咱們還須要在網頁上作一個圖表來顯示實時數據。
全部的這些,咱們須要使用Python、Java、JavaScript、C、Arduino五種語言。而若是咱們要寫相應的iOS應用,咱們還須要Objective-C。
一樣的,兩年多之前,剛實習,在咱們的項目裏,咱們的新項目裏咱們使用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在這方面的威力。使用Node.js + Node-CoAP + MQTT.js + MongoDB + Express搭建了一個支持多協議的物聯網:
不過,上圖是完善版的物聯網,代碼天然是在GitHub上啦:Lan。做爲服務端來講,Node.js的能力已是通過驗證的。而在混合應用上,仍然也能夠經受住考驗,混合應用在手機上作個圖表是輕輕鬆鬆的事(只須要獲取數據,而後顯示):
做一個控制端也是輕輕鬆鬆的事(咱們只須要發個POST請求,更具邏輯一點的就是先獲取狀態):
而在硬件端,我並無在書中以JavaScript做爲例子來展現JavaScript的用法,由於這會侷限了用戶的硬件設備。
不過,咱們仍然可使用相似於Johnny-Five這樣的庫來作硬件方面的編程,只是它沒有那麼好玩~~。
既然咱們能夠JavaScript來實現,爲何咱們還要喝杯咖啡等它用C編譯完呢?
你想知道的答案都在這本書裏,已在亞馬遜、京東、噹噹上架:
亞馬遜:https://www.amazon.cn/dp/B01I...
京東:http://item.jd.com/11946585.html
畢竟:
凡是能用JavaScript寫出來的,最終都會用JavaScript寫出來。