在最開始的時候,人們使用CGI來開發動態網頁;也使用CGI 來開發一些聯網應用。早先及現有的物聯網應用使用Web技術作為基礎的技術,接著開始將一些不錯的協定使用在物聯網中,如MQTT。又有一些組織在制定一些協定,如CoAP。同時越來越多的國家和組織在擬定自己的標準。
幸運的是,這些都是依據現有的技術發展而來的。技術在過去的幾十年裡發生了快速的變化,但是它們的本質是解決問題。而問題並沒有發生快速的變化—還是一樣的問題,只是我們有了更多可用的解決方案。
✤ 本書目標
這不是一本詳細介紹物聯網系統的書籍,也不會和一些教學一樣主要集中於射頻、ZigBee、WiFi、藍芽等。我相信這些知識你已經在其他書中學了,而這些書籍更多的是偏重於硬體層級的建置,沒有從系統等級、架構等級對系統進行設計。設計一個完整的系統,則是本書的核心。本書旨在教會使用者如何去設計的思維,以及如何打造物聯網系統的過程。至於系統底層硬體的實現細節則需要使用者去把握。
本書遵循循序漸進的思想,從設計一個極其簡單的物聯網系統,再到以網際網路為基礎的物聯網系統,最後打造了一個以物聯網協定為基礎的物聯網系統。在這個過程中我們還將教會讀者打造物聯網的相關應用—手機APP、溫度趨勢、網頁端控制等。
由於設計這個物聯網系統本身有太多的基礎知識,並且涵蓋各方面的知識,本書將盡可能地向讀者推薦一些擴充閱讀資料,並且建議讀者多多實作。同時,由於章節間是一步步加深的關係,如果你在這其中遇到問題可以及時與作者聯繫。
目標讀者:對物聯網有興趣的創客、極客、程式設計師、設計師;對物聯網有興趣的大學、中學師生;想自己動手設計完整物聯網的相關從業人員。
✤ 為什麼是JavaScript
在思考著用哪種語言來撰寫程式的時候,我考慮到了Python、Java、JavaScript。Python 是我最喜歡的語言,JavaScript 是我最擅長的,Java 是我最常用(工作)的。它們都是非常不錯的跨平台語言,都有廣泛的使用者。
如果考慮將其商業化,我會考慮使用Java 語言。Java 語言是一種「正統」的語言,在電腦科學領域,各個院校都將之列為必學語言。除去Java Web 的流行帶來的需求,Android 也增大了對Java 語言的需求。由於Java 語言是一種編譯語言,並且經過二十多年的發展,累積了大量的技術和智慧,使得它相當穩定。因而多數企業都採用作為其主要語言。儘管Java 語法簡單,但是語法卻比較煩瑣、開發效率低,並不利於我們表述。
如果僅是考慮學習服務端,我會考慮使用Python來寫我們的物聯網系統。Python是一種簡單、易學、易懂的指令碼語言,非常受歡迎。在書中的一些實例裡我會使用Python 語言。Python 語言富有表現力,可以更容易地讓我們將自然語言轉為機器語言。然而,對讀者來說可能存在更多的學習成本。
JavaScript有什麼優點?無論使用Java還是Python語言來開發我們的物聯網應用,凡是有關網頁前端相關的內容,我們都需要JavaScript,這就足夠了!
為什麼我們不使用JavaScript來完成所有的這些工作呢?它有:
■ Node.js 架構 最流行的JavaScript服務端平台,可以建立Web應用。
■ Cordova 架構 最流行的混合應用架構,可以使用Web技術來開發手機應用(iOS、Android、Windows Phone 等)。
這就表示,我們可以用這門語言完成所有的開發工作—服務端、用戶端、行動應用。如果你想,也可以用來完成硬體端的開發。三星推出可以適用於嵌入式裝置的小型JerryScript,Google的兩名前員工推出了適用於物聯網領域的軟體平台Smart.js。並且已經有幾個開發板,如Tessel 2、Espruino,可以讓你使用JavaScript為你的晶片程式設計。
✤ 其他語言
在服務端、用戶端和行動應用的實例裡,我們會用JavaScript、HTML、CSS 來介紹其中的原理。在硬體部分,我們會用C/C++ 語言。在Raspberry Pi 上程式設計的時候,會使用Python。其他部分,如Dashborad和NodeMCU 的介紹,會有一些Lua 或Ruby 語言的實例。
我們之所以在Raspberry Pi 上使用Python 語言,不僅是因為使用Python語言更容易讀懂,而且在這個領域中主要使用的也是Python 語言。同理於Dashboard 的範例,我們使用Dashing 這個流行的架構,因為它更容易上手,並且使用的人較多。這就表示,在遇到問題的時候更容易解決。
我們並不希望這些語言會阻礙你前進。在適當的時候你可以先跳過這一部分—如Dashing,我們展示了如何自己去寫類似的介面,使用這個架構只是為了開發更快。隨後在真正使用它的時候去深入它們。
✤ 本書內容
如下所示,本書分為8 個章節和4 個附錄。
第1 章 概覽
本章介紹了物聯網的歷史背景和相關技術,以及其與網際網路的關係。
第2 章 一個極簡的物聯網:hello,world
本章以一個文字檔的資料為中心,快速架設一個極簡的物聯網原型。其中將介紹物聯網的一些基礎知識。
第3 章 分解物聯網系統
本章將描述常用的物聯網系統架構,並對每一個層級進行詳細的描述和介紹。
第4 章 以Web 為基礎的物聯網系統
本章將介紹常用API 的模式RESTful,並將帶領讀者打造以HTTP 協定為基礎的物聯網系統。
第5 章 連接裝置
本章將介紹一些容易上手的裝置,並將這些裝置連接到物聯網。不僅可以控制LED,也可以上傳感測器資料。
第6 章 物聯網應用範例
本章將介紹用趨勢圖來顯示感測器的資料,還將展示如何打造一個跨平台的APP 來控制物聯網裝置。同時,使用一些目前的雲端服務來降低開發難度。
第7 章 實現超越網際網路的物聯網
本章將介紹MQTT、CoAP 等物聯網協定,它們可以幫助我們更進一步地處理物聯網系統中的訊息通訊。
第8 章 智慧與安全
本章將關注於一些額外的話題,如安全、智慧、私有化。
附錄
附錄提供了簡單的JavaScript 入門指引、Ionic 的一些介紹、物聯網資料及Raspberry Pi 的初始化等。
✤ 程式
本書的程式都可以從Github 上(github.com/phodal/iot-code) 或CSDN Code 上(code.csdn.net/designiot/code)下載。
程式以MIT 協定公開,你可以將其中的程式用於你的開發或專案中。如果你在這個過程中遇到一些問題,請在網頁上建立一個相關的Issues,以便我們能收到這個問題,並幫助其他遇到同樣問題的人解決問題。