《完美圖解物聯網技術》系列圖書是當前物聯網開發技術應用的集大成者。本書內容強調串聯網絡軟件和微電腦控制板,以JavaScript 為主軸,開發網絡應用程序、手機App、互動網頁、數據庫程序和操控微電腦。書中包含網頁式遠程遙控LED 燈、即時溫濕度網站、自動感測拍照搜證、網頁式遠程LED 繪圖板、即時影像監控網站、影像辨識擺頭控制攝像機云臺、云端溫濕度監控、即時信息動態圖表等多元化范例。希望本書能幫助讀者了解物聯網程序設計,進而開發出自己的云端物聯網應用。
目前開源硬件及物聯網概念是當前社會技術領域的熱點,社會需要大量精通技術的工作人員,但社會上的參考書籍卻很少。《完美圖解物聯網技術》系列圖書是當前物聯網開發技術應用的集大成者,填補了這一空白。本書作者趙元杰是臺灣地區暢銷書《超圖解Arduino實作入門》的作者,《完美圖解物聯網IoT實操:使用JavaScript,Node.JS,Arduino,Raspberry Pi》為該暢銷書的姊妹篇,使用圖片注釋的方式,精心寫作,是同領域的精品。
《完美圖解物聯網IoT實操:使用JavaScript,Node.JS,Arduino,Raspberry Pi》圖文并茂,生動有趣,讓軟件工程師們快速地進入物聯網領域!
序
本書探討的核心主題是串聯、匯流整合。互聯網從最初的人際溝通橋梁,拓展成機器之間協同合作的交流管道。
本書強調的是串聯網絡軟件和微電腦控制板,以JavaScript 為主軸,開發網絡應用程序、手機App、互動網頁、數據庫程序和操控微電腦。筆者假設讀者曾經使用Arduino 開發工具寫過Arduino 程序。
本書使用在物聯網應用中兩種最根本的語言來創建應用程序:
Arduino 的 C 語言 :Arduino 系列控制板是電子互動
Maker 的最愛,許多非Arduino 控制板,也強調跟Arduino 的程序開發環境或者控制引腳相容,盡管控制板廠商不斷推陳出新,但是C 語言仍是當家主流。
JavaScript:在全球信息網(World-Wide
Web)中,最通行的語言是 JavaScript,也是所有網頁/ 網站開發人員必知必會的程序語言。經過數年的發展,JavaScript 的應用也擴展到計算機應用程序、手機App 開發,甚至操控微電腦控制板領域。
本書中采用的控制板類型比較多元化,不限于Arduino,但它們的控制程序都是用C 或JavaScript 編寫的。
當今市場上不乏大師級的JavaScript 相關著作,像本書的每個章節,從互動網頁、網站數據庫程序設計、動態圖表到手機App 開發,都有專門的參考書籍,但它們都鮮少提及JavaScript 在物聯網和微控制器方面的整合應用。所以本書的定位,并不是要取代這些書籍,而是一種延伸和擴充。
感謝電子工業出版社編輯林瑞和先生以及葛娜女士在出版過程中給予的寶貴意見和指正,讓本書順利問世。衷心期盼本書能幫助讀者了解物聯網程序設計,進而開發出自己的云端物聯網應用。
趙英杰
2017 年6 月15 日于中國臺灣·糖安居
趙英杰,網昱多媒體
技術總監,美國密歇根 S.V. 州立大學傳播與多媒體碩士,開源硬件技術達人。
專長為Arduino、Flash、Dreamweaver 等,在臺灣大學、臺灣科技大學等大專院校及教育訓練單位擔任講師、并著有《超圖解Arduino 互動設計入門》、《超圖解物聯網IoT 實作入門》、
《Dreamweaver CS6 教學范本(適用SiliconStone 認證考試教材)等多本相關書籍。
《超圖解 Arduino 互動設計入門》
已授權 Arduino 原廠發行多國語言版本,為華文世界 Arduino 教材首例!
目錄
0無所不在的JavaScript 與物聯網設備 .........................................1
0.1 JavaScript 與物聯網.........................................................................3
0.2 MPU、MCU 與SoC 介紹........................................................................ 6
0.3 章節導讀.......................................................................................... 9
1 JavaScript 入門 ........................................................................13
1.1 JavaScript 入門..............................................................................14
1.2 JavaScript 語言基礎.......................................................................19
1.3 函數定義與事件處理程序................................................................ 29
1.4 定時產生隨機數............................................................................. 32
1.5 Array(數組)對象......................................................................... 34
1.6 認識Object(對象)類型................................................................ 36
1.7 BOM(瀏覽器對象模型)與DOM(文檔對象模型)..............................41
動手做 操作網頁對象........................................................................... 43
1.8 在網頁中嵌入JavaScript................................................................. 44
1.9 事件觸發程序................................................................................. 46
2 認識jQuery 庫 ..........................................................................53
2.1 jQuery 簡介.................................................................................... 54
2.2 jQuery 語法基礎............................................................................. 59
2.3 AJAX 技術:動態更新HTML 內容....................................................... 64
動手做 從Arduino 輸出純文本溫度........................................................ 66
2.4 網頁消息交換格式........................................................................... 69
2.5 Arduino 輸出JSON 消息.................................................................... 73
2.6 調整燈光亮度的網頁界面................................................................. 76
動手做 接收調光值的Arduino 網站程序................................................. 76
2.7 使用jQuery UI 附加網頁用戶界面元素............................................. 79
動手做 制作滑塊界面網頁..................................................................... 82
2.8 AJAX 的安全限制............................................................................. 85
3 Node.js 入門 .............................................................................91
3.1 在電腦以及樹莓派上安裝Node.js..................................................... 94
3.2 Node 編程起步................................................................................ 99
3.3 使用http 模塊創建網站服務器程序................................................ 103
3.4 事件驅動、非阻塞I/O 示范:讀取文件........................................... 107
3.5 global(全局)對象與模塊文件.................................................... 113
3.6 安裝與管理模塊:使用npm 工具程序.............................................115
3.7 使用Express 框架開發網站應用程序............................................. 118
3.8 接收URL 數據............................................................................... 122
3.9 接收與處理POST 數據.................................................................... 125
3.10 使用package.json 管理Node 項目的模塊程序................................ 129
動手做 從Arduino 傳遞溫濕度值給Node 網站..................................... 131
3.11 使用JSONP 格式跨網域訪問信息.................................................. 136
4 Node.js 串口通信與樹莓派GPIO 控制 ...................................143
4.1 安裝編譯Node 模塊所需的軟件.....................................................144
4.2 安裝C/C 編譯器..........................................................................147
動手做 Node.js 串口通信..................................................................... 150
動手做 從Node.js 發送串口數據.......................................................... 154
4.3 通過Node.js 運行系統指令(運行raspistill 指令拍照)................... 157
4.4 樹莓派的GPIO 簡介....................................................................... 162
4.5 Node.js 程序GPIO 控制:使用onoff 模塊........................................ 166
動手做 GPIO 輸入/ 輸出信號練習:按開關閃爍LED............................... 167
動手做 通過紅外傳感模塊拍攝照片..................................................... 170
4.6 樹莓派GPIO 集成Arduino 控制板................................................... 172
4.7 5V 和3.3V 電壓準位轉換................................................................ 182
4.8 MOSFET 邏輯電位轉換電路原理解說................................................ 185
5 使用霹靂五號操控Arduino .....................................................189
5.1 霹靂五號:用JavaScript 控制Arduino........................................... 190
動手做 用霹靂五號指揮Arduino 閃爍LED............................................ 192
動手做 啟用上拉電阻并讀取開關信號...................................................200
動手做 模擬輸入與PWM 輸出程序實驗.................................................. 201
動手做 檢測溫度.................................................................................203
動手做 控制舵機................................................................................ 207
動手做 控制LED 矩陣顯示圖像.............................................................209
5.2 使用socket.io 創建實時連接......................................................... 211
動手做 創建實時通信程序...................................................................214
動手做 瀏覽器與矩陣LED 作畫............................................................ 217
6 電子郵件、串流視頻、計算機視覺與操控舵機 .......................227
6.1 通過Node 發送電子郵件................................................................ 228
動手做 云搜證:拍照自動發送E-mail................................................. 233
動手做 串流視頻:推播實時影像........................................................ 234
6.2 使用MJPG 壓縮與串流視頻............................................................. 240
6.3 控制舵機云臺............................................................................... 246
動手做 使用方向鍵操控舵機云臺........................................................ 247
動手做 攝像頭云臺的Node 服務器代碼................................................ 249
6.4 使用觸摸屏幕虛擬搖桿操控攝像頭云臺...........................................250
6.5 瀏覽器連接游戲控制器(電玩控制器)............................................ 254
動手做 使用gamepad.js 庫創建游戲器操作的網頁程序..........................255
6.6 計算機視覺(computer vision)應用...............................................260
6.7 使用tracking.js 偵測人臉............................................................. 264
動手做 臉孔偵測與舵機聯動............................................................... 270
動手做 偵測顏色................................................................................ 273
7 使用MongoDB 數據庫以及ejs 模板引擎創建動態網頁 ..........279
7.1 數據庫簡介.................................................................................. 280
7.2 安裝MongoDB................................................................................ 285
7.3 MongoDB 的基本操作...................................................................... 289
7.4 查詢數據...................................................................................... 294
7.5 更新與刪除數據.................................