具體描述
編輯推薦
本書是樹莓派實戰類圖書的經典圖書,經過全新的升級,本書針對樹莓派3進行瞭全麵、細緻的講解,結閤Python語言等編程實例,幫助讀者更好地利用樹莓派。本書有源代碼的支持,讀者可以快速上手嘗試。非常適閤程序員、計算機軟硬件愛好者,以及對樹莓派感興趣的讀者閱讀,也適閤作為樹莓派相關實踐課程的指導用書。 內容簡介
樹莓派(Raspberry Pi)是一款基於Linux係統的、隻有一張信用卡大小的卡片式計算機。研發樹莓派的起初目的是通過低價硬件和自由軟件來推動學校的基礎計算機學科教育,但很快樹莓派就得到計算機和硬件愛好者的青睞;他們用它學習編程,並創造齣各種各樣新奇的、風靡一時的軟硬件應用。
本書由多産作傢Simon Monk編寫,是將內容進行全麵升級之後的第2版,囊括瞭豐富的實踐示例,詳細講解瞭樹莓派的配置與管理、網絡連接、操作係統及軟件。另外,本書還介紹瞭使用Python進行樹莓派開發的各項技巧,書中介紹瞭有關Python編程的基礎知識、列錶與字典、Python高級特性。同時,本書還介紹瞭有關機器視覺、硬件基礎、控製硬件、電機、數字輸入、傳感器、顯示設備、物聯網及Arduino等相關知識。
本書適閤程序員和計算機軟、硬件愛好者,以及對樹莓派感興趣的讀者閱讀,也適閤作為樹莓派相關實踐課程的指導用書。 作者簡介
Simon Monk博士(英國普雷斯頓)擁有控製論和計算機科學本科學位以及軟件工程博士學位。Simon在迴歸工業界之前,曾經從事多年的學術研究工作,並與人閤作創立瞭移動軟件公司Momote Ltd。
目前,Simon是一位職業作傢,撰寫包括樹莓派和Arduino在內的各種開源硬件方麵的作品,以及多部通用電子方麵的圖書。 目錄
第1章 配置與管理 1
1.0 引言 1
1.1 選擇樹莓派型號 1
1.2 封裝樹莓派 3
1.3 選擇電源 4
1.4 選擇操作係統發行包 6
1.5 通過NOOBS刷寫microSD卡 7
1.6 裝配係統 9
1.7 連接DVI或VGA顯示器 10
1.8 使用復閤視頻顯示器/TV 10
1.9 調整顯示器中的圖像尺寸 12
1.10 優化性能 13
1.11 修改密碼 15
1.12 讓樹莓派開機後直接進入窗口係統 16
1.13 關閉樹莓派 17
1.14 安裝樹莓派攝像頭模塊 18
1.15 使用藍牙設備 21
第2章 網絡連接 23
2.0 引言 23
2.1 連接有綫網絡 23
2.2 查看自己的IP地址 25
2.3 配置靜態IP地址 26
2.4 為樹莓派配置網絡名稱 28
2.5 配置無綫網絡連接 29
2.6 使用控製颱綫聯網 31
2.7 利用SSH遠程控製樹莓派 33
2.8 利用VNC遠程控製樹莓派 35
2.9 利用RDP遠程控製樹莓派 36
2.10 在Mac網絡中實現文件共享 38
2.11 在Mac上共享樹莓派的屏幕 39
2.12 將樹莓派用作網絡存儲服務器 41
2.13 網絡打印 44
第3章 操作係統 47
3.0 引言 47
3.1 通過圖形界麵移動文件 47
3.2 啓動一個終端會話 49
3.3 利用終端瀏覽文件係統 50
3.4 復製文件或文件夾 52
3.5 重命名文件和文件夾 53
3.6 編輯文件 54
3.7 查看文件內容 56
3.8 不藉助編輯器的情況下創建文件 57
3.9 創建目錄 57
3.10 刪除文件或目錄 58
3.11 以超級用戶權限執行任務 59
3.12 理解文件權限 60
3.13 修改文件的權限 61
3.14 修改文件的屬主 62
3.15 屏幕截圖 63
3.16 利用apt-get安裝軟件 64
3.17 刪除利用apt-get安裝的軟件 65
3.18 利用Pip安裝Python軟件包 65
3.19 通過命令行獲取文件 66
3.20 利用Git獲取源代碼 67
3.21 在係統啓動時自動運行程序或腳本 67
3.22 讓程序或腳本作為服務自動運行 68
3.23 定期自動運行程序或腳本 70
3.24 搜索功能 71
3.25 使用命令行曆史記錄功能 72
3.26 監視處理器活動 73
3.27 文件壓縮 75
3.28 列齣已連接的USB設備 76
3.29 將輸齣從命令行重定嚮到文件 76
3.30 連接文件 77
3.31 使用管道 78
3.32 將輸齣隱藏到終端 78
3.33 在後颱運行程序 79
3.34 創建命令彆名 80
3.35 設置日期和時間 80
3.36 查看SD卡剩餘存儲空間 81
第4章 軟件 83
4.0 引言 83
4.1 搭建媒體中心 83
4.2 安裝Oice軟件 84
4.3 安裝其他瀏覽器 86
4.4 使用樹莓派商店 87
4.5 打造網絡攝像頭服務器 88
4.6 運行老式遊戲控製颱模擬器 90
4.7 運行樹莓派版Minecraft 92
4.8 運行Minecraft服務器 93
4.9 運行Open Arena 95
4.10 樹莓派無綫電發射器 96
4.11 運行GIMP 98
4.12 互聯網廣播 99
第5章 Python入門 101
5.0 引言 101
5.1 在Python 2和Python 3之間做齣選擇 101
5.2 使用IDLE編輯Python程序 102
5.3 使用Python控製颱 104
5.4 利用終端運行Python程序 105
5.5 變量 106
5.6 顯示輸齣結果 107
5.7 讀取用戶輸入 107
5.8 算術運算 108
5.9 創建字符串 109
5.10 連接(閤並)字符串 110
5.11 將數字轉換為字符串 111
5.12 將字符串轉換為數字 111
5.13 確定字符串的長度 112
5.14 確定某字符串在另一個字符串中的位置 113
5.15 截取部分字符串 113
5.16 使用字符串替換另一個字符串中的內容 114
5.17 字符串的大小寫轉換 115
5.18 根據條件運行命令 116
5.19 值的比較 117
5.20 邏輯運算符 118
5.21 將指令重復執行特定次數 119
5.22 重復執行指令直到特定條件改變為止 120
5.23 跳齣循環語句 120
5.24 定義Python函數 121
第6章 Python語言中的列錶與字典 123
6.0 引言 123
6.1 創建列錶 123
6.2 訪問列錶元素 124
6.3 確定列錶長度 125
6.4 為列錶添加元素 125
6.5 刪除列錶元素 126
6.6 通過解析字符串創建列錶 127
6.7 遍曆列錶 127
6.8 枚舉列錶 128
6.9 列錶排序 129
6.10 分割列錶 130
6.11 將函數應用於列錶 131
6.12 創建字典 131
6.13 訪問字典 133
6.14 刪除字典元素 134
6.15 遍曆字典 134
第7章 Python高級特性 137
7.0 引言 137
7.1 格式化數字 137
7.2 格式化時間和日期 138
7.3 返迴多個值 139
7.4 定義類 140
7.5 定義方法 141
7.6 繼承 142
7.7 嚮文件中寫入內容 143
7.8 讀文件 144
7.9 序列化(Pickling) 145
7.10 異常處理 146
7.11 使用模塊 147
7.12 隨機數 148
7.13 利用Python發送Web請求 149
7.14 Python的命令行參數 150
7.15 從Python運行Linux命令 151
7.16 從Python發送電子郵件 152
7.17 利用Python編寫簡單Web服務器 153
7.18 同時進行多件事情 154
7.19 讓Python無所事事 156
7.20 將Python應用於樹莓派版Minecraft 156
第8章 機器視覺 159
8.0 引言 159
8.1 安裝SimpleCV 159
8.2 為機器視覺配置USB攝像頭 160
8.3 將樹莓派的攝像頭模塊用於機器視覺 162
8.4 數硬幣 163
8.5 人臉檢測 166
8.6 運動檢測 168
8.7 光學字符識彆 170
第9章 硬件基礎 173
9.0 引言 173
9.1 GPIO連接器使用說明 173
9.2 使用GPIO接口時樹莓派的安全保護 176
9.3 配置I2C 176
9.4 使用I2C工具 178
9.5 配置SPI 179
9.6 安裝PySerial以便從Python訪問串口 180
9.7 安裝Minicom以檢測串口 181
9.8 使用帶有跳綫的麵包闆 182
9.9 使用樹莓派的排綫連接麵包闆 183
9.10 使用樹莓派Squid 184
9.11 使用Raspberry Squid按鈕 186
9.12 利用兩個電阻將5V信號轉換為3.3V 187
9.13 利用電平轉換模塊將5V信號轉換為3.3V 189
9.14 利用電池為樹莓派供電 190
9.15 利用鋰電池為樹莓派供電 192
9.16 Sense HAT入門指南 193
9.17 Explorer HAT Pro入門指南 194
9.18 RaspiRobot Board入門指南 196
9.19 使用Pi Plate原型闆 198
9.20 製作樹莓派擴展闆(Hardware At Top,HAT) 201
9.21 樹莓派的計算模塊 204
9.22 Pi Zero 205
第10章 控製硬件 207
10.0 引言 207
10.1 連接LED 207
10.2 讓GPIO引腳進入安全狀態 209
10.3 控製LED的亮度 210
10.4 製造蜂鳴聲 213
10.5 利用晶體管開關大功率直流設備 214
10.6 使用繼電器控製大功率設備的開關 216
10.7 控製高壓交流設備 219
10.8 編寫用於控製開關的用戶界麵 220
10.9 編寫控製LED和電機的PWM功率的用戶界麵 221
10.10 改變RGB LED的顔色 223
10.11 使用大量LED(Charlieplexing方式) 225
10.12 將模擬儀錶用作顯示器 228
10.13 中斷編程 230
第11章 電機 233
11.0 引言 233
11.1 控製伺服電機 233
11.2 精確控製伺服電機 237
11.3 控製多颱伺服電機 239
11.4 控製直流電動機的速度 242
11.5 控製直流電機的方嚮 244
11.6 使用單極步進電機 248
11.7 使用雙極步進電機 252
11.8 利用步進電機HAT驅動雙極步進電機 253
11.9 使用RaspiRobot闆驅動雙極步進電機 256
11.10 打造一款簡單的機器人小車 257
第12章 數字輸入 261
12.0 引言 261
12.1 連接按鈕開關 261
12.2 通過按鈕開關切換開關狀態 264
12.3 使用雙位撥動開關或滑動開關 265
12.4 使用三位撥動開關或滑動開關 266
12.5 按鈕去抖 269
12.6 使用外部上拉電阻 271
12.7 使用鏇轉(正交)編碼器 272
12.8 使用數字鍵盤 275
12.9 檢測移動 278
12.10 為樹莓派添加GPS 280
12.11 攔截按鍵 283
12.12 攔截鼠標移動 285
12.13 使用實時時鍾模塊 286
第13章 傳感器 291
13.0 引言 291
13.1 使用電阻式傳感器 291
13.2 測量亮度 296
13.3 利用熱敏電阻測量溫度 298
13.4 檢測甲烷 301
13.5 測量電壓 304
13.6 為測量而降低電壓 306
13.7 使用電阻式傳感器與ADC 309
13.8 使用ADC測量溫度 310
13.9 測量樹莓派的CPU溫度 312
13.10 利用Sense HAT測量溫度、濕度和氣壓 313
13.11 利用數字傳感器測量溫度 315
13.12 利用MCP3008模塊測量加速度 318
13.13 使用Sense HAT的慣性管理單元(IMU) 321
13.14 利用Sense HAT尋找磁北 323
13.15 利用簧片開關檢測磁鐵 323
13.16 利用Sense HAT感應磁場 325
13.17 測量距離 325
13.18 電容式觸摸傳感技術 328
13.19 顯示傳感器的值 331
13.20 利用USB閃存驅動器記錄日誌 332
第14章 顯示設備 335
14.0 引言 335
14.1 使用四位LED顯示設備 335
14.2 在I2C LED矩陣上麵顯示消息 337
14.3 使用Sense HAT LED矩形顯示器 339
14.4 在Alphanumeric LCD HAT上顯示消息 341
14.5 在Alphanumeric LCD模塊上顯示消息 343
14.6 使用OLED圖形顯示器 347
14.7 使用可尋址的RGB LED燈條 349
第15章 物聯網 355
15.0 引言 355
15.1 使用Web接口控製GPIO輸齣 355
15.2 在網頁上麵顯示傳感器讀數 360
15.3 使用IFTTT發送電子郵件及其他通知 363
15.4 利用ThingSpeak發送Tweets 367
15.5 CheerLights 369
15.6 嚮ThingSpeak發送傳感器數據 370
15.7 使用Dweet和IFTTT響應Tweet 373
第16章 Arduino與樹莓派 377
16.0 引言 377
16.1 通過樹莓派對Arduino進行編程 378
16.2 利用Serial Monitor與Arduino進行通信 380
16.3 配置PyFirmata以便通過樹莓派來控製Arduino 382
16.4 通過樹莓派對Arduino的數字輸齣進行寫操作 384
16.5 使用PyFirmata與TTL串口 386
16.6 使用PyFirmata讀取Arduino的數字輸入 388
16.7 利用PyFirmata讀取Arduino的模擬輸入 390
16.8 模擬輸齣(PWM)與PyFirmata 391
16.9 利用PyFirmata控製伺服電機 393
16.10 定製基於TTL Serial的Arduino通信 395
16.11 通過I2C自定義與Arduino之間的通信 399
16.12 在樹莓派上使用小型Arduino 402
16.13 aLaMode闆與樹莓派入門 403
16.14 在樹莓派和aLaMode闆上使用Arduino Shield 406
附錄A 配件與供應商 409
附錄B 樹莓派引腳 415
《嵌入式係統設計與開發:從理論到實踐》 一、 概述:開啓嵌入式世界的無限可能 在當今高度互聯的時代,嵌入式係統無處不在,它們是智能傢居、物聯網設備、工業自動化、醫療儀器、汽車電子等無數尖端技術的核心驅動力。本書旨在為讀者構建一個全麵而深入的嵌入式係統知識體係,涵蓋從基礎理論到高級應用的各個層麵,引導讀者掌握嵌入式係統設計與開發的完整流程。我們不局限於任何特定的硬件平颱,而是著重於傳授跨平颱、可復用的核心概念和工程實踐,讓您無論麵對何種嵌入式項目,都能遊刃有餘。 本書將帶領您深入理解嵌入式係統的本質,理解其與通用計算機係統的區彆與聯係。您將學習如何根據項目需求,選擇最適閤的硬件架構,如何高效地進行軟件開發,以及如何優化係統性能、保證係統可靠性。我們堅信,紮實的理論基礎結閤豐富的實踐經驗,是成為一名優秀嵌入式工程師的關鍵。因此,本書在理論講解的同時,將穿插大量的實際案例分析和代碼示例,幫助您將抽象的概念轉化為具體的解決方案。 二、 核心內容:構建紮實的嵌入式開發基石 第一部分:嵌入式係統基礎理論 1. 嵌入式係統概述與架構: 定義與特點: 深入剖析嵌入式係統的定義、關鍵特徵(如實時性、資源受限性、專用性等)以及其在現代科技中的重要地位。 典型嵌入式係統架構: 詳細介紹嵌入式係統的基本組成模塊,包括微處理器/微控製器(MCU)、存儲器(RAM, ROM, Flash)、輸入/輸齣(I/O)接口、通信接口(UART, SPI, I2C, USB, Ethernet等)以及外圍設備。 硬件選型原則: 講解如何根據應用場景(功耗、性能、成本、實時性要求等)選擇閤適的微處理器類型(如ARM Cortex-M係列、RISC-V等)、存儲器容量和類型,以及必要的外圍硬件。 係統總綫與中斷機製: 理解CPU與外圍設備之間的數據傳輸方式(如AXI, AHB, APB總綫),以及中斷在嵌入式係統中的作用和實現原理,包括中斷嚮量錶、中斷服務程序(ISR)等。 2. 嵌入式操作係統(RTOS)核心概念: RTOS的必要性與優勢: 解釋為什麼在許多嵌入式應用中需要使用實時操作係統,以及RTOS如何解決多任務並發、資源管理、實時響應等挑戰。 任務(Task)與綫程(Thread): 深入理解任務的狀態(運行、就緒、阻塞)、創建、刪除、切換的機製。 任務調度算法: 詳細介紹常見的RTOS調度算法,如優先級調度(搶占式與非搶占式)、輪轉調度、先進先齣(FIFO)等,並分析其優缺點及適用場景。 進程間通信(IPC)與同步機製: 學習如何利用消息隊列、信號量、互斥鎖、事件標誌組、管道等機製實現任務間的通信與協調,避免數據競爭和死鎖。 內存管理: 探討嵌入式係統中的內存分配與管理策略,包括靜態分配、動態分配,以及內存池、內存碎片等問題。 中斷處理與RTOS的結閤: 理解中斷發生時RTOS如何響應,以及如何在中斷服務程序中安全地與RTOS內核交互。 經典RTOS解析(不局限於特定産品): 通過分析幾個代錶性的RTOS(如FreeRTOS, Zephyr, RT-Thread等)的設計理念和關鍵API,讓讀者掌握其通用工作原理,而無需被特定OS的功能所限製。 3. 嵌入式開發環境與工具鏈: 交叉編譯環境搭建: 掌握交叉編譯器的概念,以及如何為目標嵌入式平颱搭建適用的交叉編譯工具鏈(GCC, Clang等)。 集成開發環境(IDE)與編輯器: 介紹常用的嵌入式IDE(如Eclipse CDT, VS Code with extensions)以及強大的文本編輯器(如Vim, Emacs)在嵌入式開發中的應用。 調試技術: 學習使用JTAG/SWD接口進行硬件調試,掌握斷點設置、單步執行、變量查看、內存監視等高級調試技巧。 版本控製係統(Git): 強調Git在團隊協作和項目管理中的重要性,並介紹其基本命令和工作流程。 構建係統(Make, CMake): 理解Makefile和CMakeLists.txt的作用,學習如何自動化構建和管理復雜的嵌入式項目。 第二部分:嵌入式軟件開發實踐 1. C/C++語言在嵌入式開發中的應用: 嵌入式C語言特性: 重點講解C語言在嵌入式開發中的關鍵特性,如指針、位操作、結構體、聯閤體、宏定義、預處理器指令等,以及這些特性如何用於硬件控製和底層編程。 內存訪問與優化: 深入理解內存地址空間、數據對齊、字節序(Endianness)等概念,學習如何通過精細的內存管理優化程序性能和減小代碼體積。 嵌入式C++特性: 介紹C++在嵌入式開發中的優勢,如麵嚮對象編程、模闆、STL(部分適用)等,以及如何權衡其帶來的開銷與收益。 硬件抽象層(HAL)設計: 講解如何設計並實現硬件抽象層,以屏蔽底層硬件細節,提高代碼的可移植性和可維護性。 2. 設備驅動程序開發: 驅動程序的作用與分類: 理解設備驅動程序在操作係統和硬件之間的橋梁作用,學習不同類型的驅動程序(如字符設備、塊設備、網絡設備)。 GPIO(通用輸入輸齣)編程: 學習如何通過GPIO控製LED、讀取按鈕狀態、驅動電機等基本操作。 通信接口驅動: 詳細講解UART, SPI, I2C等常用通信接口的驅動程序開發,包括數據發送/接收、波特率設置、總綫仲裁等。 定時器與PWM(脈衝寬度調製): 學習如何利用定時器實現延時、周期性任務,以及如何使用PWM控製電機速度、LED亮度等。 ADC(模數轉換器)與DAC(數模轉換器): 學習如何采集模擬傳感器數據,以及如何輸齣模擬信號。 中斷驅動的I/O: 掌握如何編寫高效的中斷處理程序,以響應外部事件。 3. 嵌入式係統中的網絡通信: TCP/IP協議棧基礎: 簡要介紹TCP/IP協議棧的基本概念,如IP地址、端口號、TCP/UDP區彆、HTTP、MQTT等常用協議。 嵌入式網絡接口開發: 講解如何配置和使用以太網控製器、Wi-Fi模塊等網絡接口。 Socket編程: 學習使用Socket API進行嵌入式設備間的網絡通信,包括TCP客戶端/服務器、UDP通信。 輕量級網絡協議(MQTT, CoAP): 介紹適用於資源受限設備的MQTT和CoAP協議,以及如何在嵌入式平颱上實現這些協議。 Web服務器在嵌入式設備上的實現: 探討如何在嵌入式設備上運行一個簡單的Web服務器,實現遠程控製和監控。 4. 嵌入式係統中的數據存儲與文件係統: 非易失性存儲技術: 介紹EEPROM, Flash(NOR Flash, NAND Flash)等非易失性存儲器的原理、特點和使用方法。 嵌入式文件係統: 學習常見的嵌入式文件係統(如FATFS, LittleFS, JFFS2)的概念和應用,如何管理存儲介質上的文件。 數據持久化: 掌握如何將應用程序數據、配置信息等保存到非易失性存儲中,以實現斷電後數據不丟失。 第三部分:嵌入式係統高級應用與工程實踐 1. 嵌入式係統安全性: 安全威脅與風險: 分析嵌入式係統麵臨的常見安全威脅,如代碼注入、拒絕服務攻擊、數據泄露等。 安全編碼實踐: 學習編寫安全的代碼,避免緩衝區溢齣、格式化字符串漏洞等。 安全啓動與固件更新: 探討如何實現安全啓動機製,以及安全的遠程固件更新(OTA)方案。 加密與認證: 簡要介紹對稱加密、非對稱加密、數字簽名等基本加密技術在嵌入式安全中的應用。 2. 嵌入式係統性能優化與調試: 性能瓶頸分析: 學習使用工具(如性能計數器、邏輯分析儀)定位代碼中的性能瓶頸。 代碼優化技巧: 掌握低功耗設計、減少內存訪問、算法優化、硬件加速利用等多種性能提升方法。 實時性保障: 深入理解影響係統實時性的因素,並學習如何設計滿足嚴格實時性要求的係統。 功耗管理: 講解各種低功耗模式(睡眠模式、待機模式等),以及如何通過軟件和硬件手段優化功耗。 3. 嵌入式項目開發流程與管理: 需求分析與係統設計: 強調在項目啓動階段進行充分的需求分析和係統架構設計的重要性。 軟件開發生命周期: 介紹嵌入式軟件開發的典型生命周期模型(如瀑布模型、敏捷開發)。 測試與驗證: 學習單元測試、集成測試、係統測試等各種測試方法,以及如何進行有效的迴歸測試。 代碼審查與質量保證: 強調代碼審查在提升代碼質量、發現潛在問題中的作用。 可靠性與容錯設計: 探討如何設計具備容錯能力的係統,提高係統的穩定性和魯棒性。 4. 前沿技術與發展趨勢: 物聯網(IoT)與邊緣計算: 探討嵌入式係統在物聯網中的角色,以及邊緣計算的興起如何改變嵌入式應用。 人工智能(AI)在嵌入式設備上的部署: 介紹TinyML等技術,以及如何在資源受限的嵌入式設備上運行機器學習模型。 RISC-V架構的崛起: 簡要介紹RISC-V指令集架構的特點,以及其在嵌入式領域的潛力。 三、 實踐導嚮:案例驅動的學習模式 本書將貫穿一係列精心設計的實踐案例,涵蓋從簡單的“點亮LED”到復雜的“構建一個簡易的傳感器數據采集與上傳係統”。這些案例將引導讀者動手實踐,逐步掌握嵌入式開發的核心技能。每個案例都將提供清晰的步驟、詳細的代碼講解以及調試指南,幫助讀者剋服學習過程中的睏難,並從中獲得成就感。通過這些實踐,您將能夠: 獨立完成硬件配置與軟件集成。 編寫健壯、高效的嵌入式應用程序。 熟練運用各類調試工具解決實際問題。 將理論知識轉化為解決工程問題的能力。 四、 目標讀者 本書適閤以下人群: 計算機科學、電子工程、自動化等相關專業的學生。 希望轉型進入嵌入式開發領域的軟件工程師。 正在從事嵌入式硬件設計的工程師,希望加強軟件開發能力。 業餘愛好者,對嵌入式技術充滿好奇並希望進行實踐。 五、 結語 《嵌入式係統設計與開發:從理論到實踐》不僅僅是一本技術書籍,更是一份引領您探索嵌入式世界奧秘的指南。我們希望通過本書,幫助您建立起堅實的理論基礎,掌握豐富的實踐技能,最終能夠獨立設計和開發齣具有競爭力的嵌入式産品,在快速發展的嵌入式技術領域創造屬於自己的價值。