本書主要介紹樹莓派不同類型的特性,以及樹莓派入門所需要的基礎知識;涵蓋了樹莓派GPIO 的不同操作方法,以及樹莓派的I2C總線、SPI總線、UART串口、PWM脈寬調制等偏硬件操作的內容; 同時也為讀者準備了一些樹莓派上常見的服務類型的搭建和配置,包括樹莓派推流服務器搭建的方法, 常見數據庫MariaDB、PostgreSQL的安裝配置操作,MQTT服務器的搭建配置,DHCP服務器的搭建 配置等。此外,還加入了一些比較有趣的實驗,例如利用TensorFlow實現(xiàn)對象檢測,使用OpenCV制 作一個樹莓派掃描儀,或利用OpenCV實現(xiàn)換鼻子的實驗,帶領讀者了解樹莓派通過攝像頭能夠實現(xiàn) 的一些應用。 本書為初學者全面入門了解樹莓派提供了很好的切入點,使讀者可以了解更多樹莓派的使用方法 以及操作小技巧。同時,在整體的編程過程中使用了C語言、Python語言及Shell腳本語言等常見語言, 對于擁有此類語言編程經驗的用戶更友好。 希望讀者能夠在這里找到自己喜歡的實驗,并順利入門樹莓派!
本書主要介紹樹莓派不同類型的特性,以及樹莓派入門所需要的基礎知識;涵蓋了
樹莓派GPIO的不同操作方法,以及樹莓派的I2C總線、SPI總線、UART串口、PWM
脈寬調制等偏硬件操作的內容;同時也為讀者準備了一些樹莓派上常見的服務類型的搭
建和配置,包括樹莓派推流服務器搭建的方法,常見數據庫MariaDB、PostgreSQL的安
裝配置操作,MQTT服務器的搭建配置,DHCP服務器的搭建配置等。此外,還加入了
一些比較有趣的實驗,例如利用TensorFlow實現(xiàn)對象檢測,使用OpenCV制作一個樹莓
派掃描儀,或利用OpenCV實現(xiàn)換鼻子的實驗,帶領讀者了解樹莓派通過攝像頭能夠實
現(xiàn)的一些應用。
自從2012年開始接觸樹莓派以來,我的工作和生活中一直有樹莓派的影子,公司的公眾號、我個人的公眾號上都在不斷地進行著和樹莓派有關的各種嘗試,也因此結識了很多喜歡樹莓派的小伙伴,大家在一次次的交流和相互學習中不斷進步,不僅鞏固了Linux系統(tǒng)的基本功,也學習到了很多嵌入式開發(fā)的經驗,以及樹莓派上通過Python開發(fā)的經驗。也是機緣巧合,遇到了清華大學出版社的楊迪娜老師,萌生了編寫一本樹莓派入門圖書的想法,也是本書誕生的契機。
本書主要介紹樹莓派不同類型的特性,以及樹莓派入門所需要的基礎知識;涵蓋了樹莓派GPIO的不同操作方法,以及樹莓派的I2C總線、SPI總線、UART串口、PWM脈寬調制等偏硬件操作的內容;同時也為讀者準備了一些樹莓派上常見的服務類型的搭建和配置,包括樹莓派推流服務器搭建的方法,常見數據庫MariaDB、PostgreSQL的安裝配置操作,MQTT服務器的搭建配置,DHCP服務器的搭建配置等。此外,還加入了一些比較有趣的實驗,例如利用TensorFlow實現(xiàn)對象檢測,使用OpenCV制作一個樹莓派掃描儀,或利用OpenCV實現(xiàn)換鼻子的實驗,帶領讀者了解樹莓派通過攝像頭能夠實現(xiàn)的一些應用。
經過和身邊朋友的不斷交流總結,我編寫了本書,旨在引導讀者入門并對樹莓派應用產生興趣。由于時間倉促,很多想法和創(chuàng)意尚未來得及編排,若有緣再續(xù)。
書中疏漏之處,希望各位讀者不吝賜教,多多批評指正,讓本書能夠造福更多愛好者。
作 者
2022年6月
前 言
李偉斌 (漂移菌 )
目前就職伍艾信息科技(上海)有限公司,首席Linux技術架構師。 主要研究方向為嵌入式 Linux 操作系統(tǒng)的應用及研發(fā)。 業(yè)余時間曾獲取中美創(chuàng)客馬拉松(上海站)一等獎, Intel IoT 物聯(lián)網大賽二等獎, 上海國際創(chuàng)客大賽蘑菇云分賽首屆腦洞大賽 腦洞大王獎, 上海谷歌Design Sprint Hackathon 優(yōu)勝獎, Junction 2021 全球黑客大賽 Out of box獎。被朋友譽為樹莓派超級愛好者及布道者, 并且兼漂移驢車項目聯(lián)合創(chuàng)始人角色。
第1章 樹莓派簡介 1
引言1
1.1 樹莓派是什么? 1
1.2 樹莓派周邊配件 11
1.3 樹莓派能做什么? 12
第2章 樹莓派入門基礎知識 21
2.1 系統(tǒng)選型 21
2.2 新系統(tǒng)下載及燒錄 23
2.3 恢復卡制作的操作步驟 24
2.3.1 方法124
2.3.2 方法224
2.4 燒錄系統(tǒng) 24
2.5 初始化系統(tǒng) 29
第3章 樹莓派GPIO的使用 46
3.1 GPIO的概念及相關庫的使用方法 46
3.2 樹莓派上使用wiringPi庫 47
3.3 如何利用wiringPi優(yōu)雅地點亮一個
LED燈 51
3.3.1 硬件材料準備51
3.3.2 接線方式51
3.3.3 編寫代碼測試52
3.4 玩轉流水燈和游俠燈 58
3.4.1 流水燈58
3.4.2 游俠燈59
第4章 樹莓派中I2C功能的使用 61
4.1 I2C的概念 61
4.2 I2C實戰(zhàn)小項目 62
4.2.1 接線方式62
4.2.2 啟用I2C配置 63
目 錄
IV 樹莓派4 與人工智能實戰(zhàn)項目
4.2.3 檢測Slave設備狀態(tài) 65
4.2.4 查詢寄存器表并簡單測試65
4.2.5 編寫C語言測試代碼 66
4.2.6 編寫Python代碼進行測試 68
4.2.7 關于Python中的I2C函數 69
4.3 使用I2C協(xié)議的其他應用 70
4.3.1 點亮LCD1602液晶屏顯示樹莓派
的IP地址 70
4.3.2 利用OLED展示樹莓派磁盤狀態(tài)
信息83
第5章 樹莓派SPI介紹及應用實例 88
5.1 SPI協(xié)議簡介 88
5.1.1 SPI協(xié)議概述 88
5.1.2 SPI的優(yōu)缺點 88
5.1.3 采用主-從模式(Master-Slave)的
控制方式89
5.2 樹莓派SPI概述 89
5.2.1 引腳和GPIO映射 89
5.2.2 關于SPI的速度 90
5.3 樹莓派上啟用SPI功能 90
5.3.1 通過raspi-config工具 91
5.3.2 通過編輯/boot/config.txt文件 93
5.3.3 通過圖形界面93
5.4 樹莓派SPI應用實例 95
5.4.1 檢查SPI設備狀態(tài) 95
5.4.2 準備SPI外設并接入樹莓派 95
5.4.3 安裝Python庫文件 96
5.4.4 編寫定制的測試代碼并進行測試 97
5.5 讓樹莓派變身為一個環(huán)境檢測站 101
5.5.1 BME280模塊介紹 102
5.5.2 接線方式103
5.5.3 編寫代碼獲取數據103
5.5.4 總結112
第6章 樹莓派UART串口介紹及應用實例 113
6.1 UART簡介 113
6.2 樹莓派串口說明 114
6.3 在樹莓派上配置啟用UART 115
6.4 在樹莓派上進行串口通信 120
6.4.1 使用Python 語言實現(xiàn)串口
通信 120
6.4.2 通過C語言實現(xiàn)串口通信 123
6.4.3 拓展實例124
6.5 關于樹莓派串口別名及切換
硬件串口 126
6.5.1 串口別名126
6.5.2 更換串口端口127
6.6 總結 128
第7章 樹莓派PWM介紹及應用實例 129
引言 129 7.1 PWM控制原理 129
目錄 V
7.2 樹莓派PWM通道信息 130
7.3 wiringPi庫的PWM接口介紹 131
7.3.1 硬件PWM 131
7.3.2 軟件PWM 132
7.3.3 軟件PWM注意事項 133
7.4 PWM應用項目實戰(zhàn) 134
7.4.1 呼吸燈效果134
7.4.2 舵機控制138
第8章 樹莓派開源網絡應用實例 144
引言 144
8.1 樹莓派搭建RTMP流媒體服務器 145
8.1.1 安裝Nginx及模塊145
8.1.2 啟用RTMP 148
8.1.3 客戶端連接測試151
8.2 樹莓派搭建Samba文件服務器 156
8.2.1 什么是Samba文件服務器 156
8.2.2 需要準備的設備156
8.2.3 安裝配置Samba服務器 157
8.3 樹莓派搭建NFS文件服務器 163
8.3.1 什么是NFS文件服務器 163
8.3.2 需要的設備163
8.3.3 安裝配置NFS文件系統(tǒng) 163
8.4 樹莓派搭建日志服務器 169
8.4.1 什么是日志服務器169
8.4.2 需要的硬件170
8.4.3 安裝rsyslog服務 170
8.4.4 配置rsyslog作為服務器 170
8.4.5 創(chuàng)建新模板171
8.4.6 重啟服務并測試172
8.5 樹莓派搭建MariaDB數據庫
服務器 175
8.5.1 什么是MariaDB 175
8.5.2 MariaDB 和 MySQL 的區(qū)別 175
8.5.3 安裝MariaDB 176
8.5.4 配置MariaDB 176
8.5.5 創(chuàng)建一個數據庫178
8.5.6 添加一張表179
8.5.7 插入幾條記錄180
8.6 樹莓派搭建PostgreSQL數據
庫服務器 182
8.6.1 什么是PostgreSQL數據庫 182
8.6.2 安裝PostgreSQL 182
8.6.3 配置PostgreSQL 182
8.6.4 創(chuàng)建數據庫183
8.6.5 常見控制臺命令184
8.6.6 基本SQL語句 185
8.7 樹莓派搭建Mosquitto MQTT
服務器 186
8.7.1 什么是MQTT服務器 186
8.7.2 安裝Mosquitto 服務器 187
8.7.3 檢測服務器狀態(tài)187
8.7.4 在樹莓派上測試Mosquitto代理 187
8.7.5 多主機測試189
8.7.6 嘗試使用Python的paho-mqtt庫 190
8.8 樹莓派搭建DHCP服務器 193
8.8.1 什么是DHCP服務器 193
8.8.2 測試環(huán)境193
8.8.3 配置1號主機DHCP服務 194
8.8.4 修改DHCP服務的配置 194
VI 樹莓派4 與人工智能實戰(zhàn)項目
8.8.5 重啟服務以生效配置195
8.8.6 開啟路由轉發(fā)195
8.8.7 配置IPtables實現(xiàn)流量路由 196
8.8.8 注意事項196
8.9 總結 197
第9章 樹莓派上利用TensorFlow實現(xiàn)對象檢測 198
引言 198
9.1 軟硬件環(huán)境介紹 198
9.1.1 硬件準備198
9.1.2 軟件準備199
9.2 操作步驟 199
9.2.1 更新系統(tǒng)及軟件倉庫 199
9.2.2 創(chuàng)建TensorFlow的工作目錄 199
9.2.3 安裝TensorFlow的Python庫和部分
依賴200
9.2.4 安裝OpenCV視覺框架 200
9.2.5 編譯安裝Protobuf組件201
9.2.6 重啟系統(tǒng)203
9.2.7 重新登錄系統(tǒng)并設置TensorFlow
目錄結構 203
9.2.8 下載TensorFlow模型 204
9.2.9 修改用戶初始化配置文件204
9.2.10 利用protoc編譯Protocol Buffer
文件 204
9.2.11 下載ssdlite_mobilenet_v2_coco
模型205
9.3 對象檢測測試 205
9.3.1 在樹莓派上啟用攝像頭205
9.3.2 下載檢測腳本205
9.3.3 接入攝像頭206
9.3.4 執(zhí)行腳本并進行檢測206
9.4 總結 208
第10章 樹莓派掃描儀樹莓派 OpenCV 209
引言 209
10.1 原理 209
10.2 硬件準備 210
10.3 軟件準備 211
10.3.1 軟件包版本信息211
10.3.2 查看軟件版本的方法211
10.4 配置環(huán)境 212
10.4.1 檢查網絡狀態(tài)212
10.4.2 更新軟件倉庫并安裝軟件212
10.4.3 創(chuàng)建并激活虛擬環(huán)境 213
10.4.4 啟用攝像頭213
10.5 代碼調試 215
10.6 應用拓展 219
10.7 總結 221
第11章 AI換鼻子樹莓派 OpenCV 222
引言 222 11.1 AI換鼻子的原理 223
目錄 VII
11.2 硬件需求 223
11.3 軟件需求 223
11.3.1 Raspbian操作系統(tǒng) 223
11.3.2 Python3 環(huán)境 224
11.3.3 virtualenv環(huán)境 225
11.3.4 dlib庫 226
11.3.5 shape_predictor工具和get_frontal_
face_detector函數 226
11.3.6 預測模型庫下載 228
11.4 操作步驟 228
11.4.1 燒錄鏡像,啟動并完成初始化
配置228
11.4.2 啟動樹莓派232
11.4.3 接入攝像頭236
11.4.4 系統(tǒng)初始化環(huán)境調試237
11.4.5 樹莓派攝像頭測試239
11.4.6 編寫代碼239
11.5 開挖腦洞,發(fā)散思維 262
11.6 總結 262
第12章 樹莓派通過U盤啟動系統(tǒng) 263
引言 263
12.1 硬件需求 263
12.2 前期準備 264
12.3 更新升級系統(tǒng) 264
12.4 更新bootloader 264
12.5 檢查啟動選項 265
12.6 無卡啟動測試 268
12.7 制作USB啟動盤 268