無所不在的JavaScript與物聯網裝置
物聯網風潮將原本稱霸Web前臺技術的JavaScript順勢帶入物聯網。學習JavaScript,也就能同時掌控前臺、後臺和感測端的軟硬體。
物聯網(Internet of Things,IoT)一詞,是由美國麻省理工學院Auto-ID中心主任Kevin Ashton,於1999年進行RFID研究時所提出的概念。物聯網是指為每個東西,包括一般物品(例如:超商以及它所販售的所有商品)、感測器,甚至人類和動物,都標上唯一識別碼(Unique Identifier,如:條形碼、IP地址、身份證號碼等),彼此之間通過約定好的通訊協議,利用網際網路相連、分享資料。
物聯網不僅是兩個裝置之間的互相連線,它們通常也連線到負責收集資料,以及協調這些裝置運作的(雲)伺服器。此外,控制器、感測器等物聯網裝置,通常也都要具備讓使用者操作和監控的介面,無論是網頁還是App形式。下面是物聯網的基本架構:
可連線網際網路裝置的數量,在2011年時超越地球總人口數。這些裝置包含消費性電子產品、工廠機器、家電、醫療器材、感測器等。以往,資料通過人力輸入到計算機(例如,抄錄水、電、燃氣用量),現在多半則是由裝置直接提供資料給另一個裝置。
舉例而言,你的手機認得“你”和“家人”,當你的小孩抵達校園時,“學校”會自動傳送簡訊通知;手機可以記錄你的運動習慣並協調智慧型溫控器,在你到家之前調整好室溫:若是下班快抵達家門時,手機可以自動過濾公司電話,並通知住家的房子自動開啟車庫門。宅配的貨車可實時更新網購商品位置和預計送達時間,也能讀取送貨路線的交通狀況,並適時提醒或規劃避開車流量大的路線。
所以,機器和機器相互連線、協同合作(Machine to Machine, M2M),就能完成代理人或者貼身祕書的工作。隨著寬頻網路基礎建設的普及、各式雲服務推陳出新,加上感測器、通訊晶片和微控制器技術的提升與價格下降,使得“物聯網”從概念融入真實的日常生活中。
0.1 JavaScript與物聯網
許多嵌入式系統採用的是運算效能、儲存器容量相對較低的8位微控制器,它們也通常採用專屬的庫和開發工具,並且多采用C/C++語言開發。就像電視機、空調等家電,逐漸脫離“單獨”運作的時代,為了搶食物聯網市場大餅,原本軟硬體較為封閉的嵌入式控制器,也開始擁抱開放的網際網路和Web標準。
這股風潮,也將原本稱霸Web前臺技術的JavaScript(注:在網頁上提供互動功能的程式語言)順勢帶入物聯網。例如,Pebble智慧表提供的開發工具PebbleKit和Pebble.js,讓你用JavaScript來開發手錶的App。又如,2014年被Google收購的Nest Labs公司推出的Nest溫度控制器,也有供JavaScript程式碼使用的API(Application Interface,應用程式介面,也就是提供讓外部程式控制的渠道),因此,程式設計師可用JavaScript讀取或調控Nest溫控器的狀態。基本上,凡具備Web瀏覽器的裝置,就能執行JavaScript。
在瀏覽器內操作的應用(像YouTube, Google Docs和Office 365),叫作Web應用。Web應用分成前臺和後臺(伺服器端)兩大部分,以電子郵件服務網站(如:QQ和Gmail)為例,顯示在瀏覽器裡電子郵件操作的介面(網頁)是前臺,提供使用者填寫信件的介面,負責傳送郵件的則是後臺。網頁介面的架構通過HTML定義,外觀樣式由CSS定義,動態改變字型樣式、大小、插入表情圖案等互動功能則是用JavaScript寫成的。
JavaScript語言具有下列幾個特色:
- 所有瀏覽器都支援,也是網頁的標準語言。
- 語法簡單,學習門檻低,容易入門。
- 不需要特殊的開發工具,在計算機、平板電腦或手機上,用文字編輯軟體和瀏覽器就能開發和除錯JavaScript程式碼。
- 有為數眾多的開發者,以及書籍、網路等參考資源和示例。
用於伺服器和微控制器的JavaScript
當QQ使用者單擊“傳送”按鈕之後,信件內容會從瀏覽器傳給QQ伺服器,而在伺服器上執行的程式碼,將負責寄送信件和儲存郵件等功能。不像瀏覽器,在伺服器端執行的程式語言並沒有統一,常見的語言和執行環境有PHP、ASP.NET、Ruby等。
其實,伺服器端程式也能用JavaScript語言開發。可在瀏覽器之外獨立執行Ja¬vaScript程式碼的Node.js於2009年問世,並相繼被沃爾瑪、PayPal(線上支付款項系統)和Netflix(網飛,線上電視)等大型企業所採納,用來建置可應付購物旺季高流量的高效能網站後臺程式。
Node.js並不是第一個可在瀏覽器外執行的JavaScript環境,但它是最成功的一個。
Node.js能夠在Windows、Mac OS X以及Linux系統中執行;不只是個人計算機,風靡創客的Raspberry Pi(以下稱“樹莓派”)、BeagleBone Black(http://beagleboard.org/BLACK),以及9美元的開源微電腦C.H.I.P.(https://getchip.com/),還有基於x86處理器架構的Intel Galileo控制板也都能執行Node.js。
某些採用32位處理器的控制板,更直接把JavaScript語言當作“母語”,例如Espruino(http://espruino.com/)和Tessel 2(http://tessel.io/),而三星電子公司在2015年5月發表了一個“瘦身”版的JavaScript語言,叫作JerryScript(https://samsung.github.io/jerryscript/),可運用在僅有64KB記憶體的微控制器上。換句話說,在這些控制板上讀取和設定I/O腳,都用JavaScript。因此,從前臺網頁、後臺伺服器,到微控制器和感測器終端,都能用相同的JavaScript語言編寫;學習JavaScript,也就能同時掌控前臺、後臺和感測端的軟硬體!
0.2 MPU、MCU與SoC介紹
處理器晶片依照功能來區分,大致分成如下三種型別。
MPU:全名是Microprocessor Unit(微處理器單元),其實就是CPU(中央處理器),可執行指令,進行運算和邏輯處理。
MCU:全名是Microcontroller Unit(微控制器),把微處理器(MPU)和快快閃記憶體儲器、主儲存器(記憶體)包在同一個晶片裡,相當於一臺微型計算機,耗電量低,但是處理器的效能不高(時脈頻率在200MHz以內),而且儲存器容量不大(以KB為單位)。
當今的MCU通常也會整合模擬-數字轉換器(模數轉換)、USB和其他外圍介面控制器。Arduino UNO的ATmega328晶片屬於MCU。
SoC:全稱為System on a Chip(系統晶片),整合微處理器和特定功能,例如,影像處理單元(顯示卡)、WiFi網路、藍芽、音效處理等。智慧手機以及某些個人計算機的處理器,都屬於SoC。採用這類處理器的裝置,通常需要較高速的運算效能(時脈頻率達數百MHz至數GHz)以及較大的儲存器容量(單位是MB或GB),所以儲存器不在同一個晶片上,耗電量也較大。
樹莓派的處理器晶片屬於SoC。就功能而言,SoC大於MCU:
以穿戴裝置應用來說,MCU足以勝任普通數字手環所需,而且能長時間運作;具備多媒體功能的智慧手錶,就必須採用SoC。某些智慧手錶甚至同時搭載SoC和MCU,前者處理複雜的多媒體運算,後者用於連線感測器以及電源管理。
0.3 章節導讀
第1章JavaScript入門:介紹JavaScript的由來、基礎語法、瀏覽器的DOM(文件物件模型)、事件處理程式、使用Chrome瀏覽器除錯JavaScript程式碼、在網頁中嵌入JavaScript程式碼等主題。
第2章 認識jQuery庫:jQuery是當今使用最廣泛的JavaScript庫,主要作用是讓動態網頁開發變得更簡單。本章將通過整合Arduino乙太網路與jQueryUI(互動介面)程式,帶領讀者認識jQuery語法、網頁資訊交換格式(CSV、XML和JSON)和“不重新整理網頁,動態更新內容”的AJAX技術。
第3章Node.js入門:Node.js是一個獨立的JavaScript執行環境,可以讓我們使用JavaScript開發應用,在瀏覽器之外執行。本章將介紹Windows、Mac OS X和Linux(樹莓派)系統的Node.js安裝方式,並通過非阻塞I/O讀取檔案、自定義與引用程式模組、使用npm工具管理模組、使用Express框架開發網站應用、從Arduino傳遞溫溼度值給Node網站等數個例項認識Node.js。
第4章Node.js串列埠通訊與樹莓派GPIO控制:串列埠是連線Arduino與個人計算機和Linux微電腦控制板最常用的介面。GPIO則是樹莓派控制板的標準外圍介面,本章除了介紹如何使用Node.js連線與控制串列埠和GPIO介面,也將介紹GPIO介面整合自制Arduino控制板的方法,還有MOSFET電子元器件,以及通過MOSFET組成5V和3.3V的電壓轉換板。
第5章 使用霹靂五號操控Arduino:Johnny-Five(霹靂五號)是一個Node.js庫,讓計算機(或Linux微電腦控制板)以JavaScript程式操控連線在USB介面的Arduino。本章將比較“霹靂五號”與Arduino的C語法異同,並且通過讀取開關(數字)訊號、模擬輸入和PWM輸出、LM35溫度感測器、舵機控制,還有瀏覽器與矩陣LED作畫等例項,讓讀者瞭解“霹靂五號”和網頁實時通訊程式(socket.io)。
第6章 電子郵件、串流視訊、計算機視覺與操控舵機:本章的示例以樹莓派攝像頭為主,第一個示例搭配PIR人體紅外感測器,在偵測到入侵者時,自動拍照併傳送E-mail。第二個示例介紹使用socket.io和M-JPEG壓縮程式,在網頁上顯示串流視訊。第三個示例介紹簡易的攝像頭+DIY舵機雲臺,並通過觸控屏、鍵盤和電玩把手控制雲臺。最後一個例子是在計算機的瀏覽器上,通過JavaScript擷取攝像頭的視訊,並偵測其中是否有人類臉孔,若有的話,控制舵機跟著臉孔轉動。
第7章 使用MongoDB資料庫以及ejs模板引擎建立動態網頁:MongoDB是一款適合處理大資料與物聯網資料的免費、開源資料庫,本章將介紹MongoDB的安裝方式、基本架構以及資料的新增、擷取(篩選)、修改和刪除等基本操作,並通過Node.js的Mongoose包(package)連線資料庫,儲存Arduino上傳的資料。
第8章 資料視覺化——使用C3.js與D3.js繪製圖表:若只在網頁上用文、數字列舉資料,未免太乏味,本章將介紹如何採用知名的C3.js和D3.js庫,以活潑生動的量表(gague)和圖表(chart)形式呈現儲存在MongoDB資料庫裡的資料,以及Arduino傳入的實時資料,並且通過簡易的數字濾波手法過濾噪聲。
本文選自《完美圖解物聯網IoT實操》,點此連結可在博文視點官網檢視此書。
想及時獲得更多精彩文章,可在微信中搜尋“博文視點”或者掃描下方二維碼並關注。
相關文章
- 如何保護物聯網裝置
- 智慧生活無處不在 物聯網將路途與家庭綁在一起
- Android與物聯網裝置通訊-概念入門Android
- 這些年黑客這般入侵與控制物聯網裝置的黑客
- Android與物聯網裝置通訊-網路模型分層Android模型
- 英特爾與騰訊優圖聯合推出智慧AI裝置,讓智慧“無處不在”AI
- 物聯網路卡能用於個人裝置嗎
- Android與物聯網裝置通訊 - 位元組報文組裝與解析Android
- Android與物聯網裝置通訊-利用UDP廣播來做裝置查詢AndroidUDP
- 物聯網裝置殭屍網路趨勢分析
- Android與物聯網裝置通訊-UDP&TCP協議AndroidUDPTCP協議
- 從裝置聯網走向萬物互聯三大趨勢引領物聯網未來
- 騰訊IOT之樹莓派物聯網裝置樹莓派
- 物聯網路卡能不能更換裝置
- NB-IoT物聯網流量監測裝置
- 裝置接入物聯網平臺必知必會--裝置接入類
- Android與物聯網裝置通訊-資料傳遞的本質Android
- 守護物聯網的邊界:從裝置開始從裝置結束
- 日本政府計劃“入侵”公民的物聯網裝置
- 物聯網裝置的5個關鍵考慮因素
- 如何優化物聯網邊緣裝置的能源使用優化
- 基於PLC電氣成套裝置的無線監控物聯網解決方案
- 【無源物聯網】物聯網的下一個風口?
- Android與物聯網裝置通訊-自定義報文與位元組序Android
- 如何使用物聯網裝置來確保兒童安全?
- 物聯網 IOT 裝置如何脫離資訊孤島?
- 物聯網產品設計中的裝置升級功能
- 物聯網裝置可能使企業網路面臨威脅
- NB物聯網路卡與物聯網路卡的區別
- 常見的物聯網無線技術與案例
- Ockam為物聯網裝置帶來區塊鏈無伺服器身份識別區塊鏈伺服器
- 阿里雲物聯網平臺裝置模擬器阿里
- 高通降低晶片能耗 讓物聯網裝置也用上LTE晶片
- 如何解決物聯網(IoT)裝置充電難題
- 物聯網智慧硬體裝置常見攻擊方法
- 物通博聯提供Modbus TCP裝置連線到物聯網雲平臺的解決方案TCP
- 智慧工廠物聯網,建立裝置到雲端的可靠連線
- 智慧電網:分散式光伏裝置物聯網解決方案分散式