日本免费精品视频,男人的天堂在线免费视频,成人久久久精品乱码一区二区三区,高清成人爽a毛片免费网站

在線客服
從芯片到云端:Python物聯網全棧開發實踐圖書
人氣:56

從芯片到云端:Python物聯網全棧開發實踐

自序 筆者曾經長期服務于微電子行業,現在從事物聯網相關項目設計和咨詢服務。 1995年畢業后,筆者加入了飛利浦半導體上海技術中心,任軟件工程師。在此期間的主要工作是使用匯編語言為國內客戶進行各類顯像管(CR...

內容簡介

物聯網開發重新定義了“全棧開發”的范圍。Python作為一門快速發展的語言,已經成為系統集成領域的挑選語言之一,其可覆蓋從電路邏輯設計到大數據分析的物聯網端到端開發。各領域開發者可以利用Python交叉涉足物聯網設備、邊緣計算、云計算、數據分析的工程設計。本書嘗試讓讀者建立物聯網設計的整體概念,從基礎概念開始,到相關技術選型、開源工程、參考設計與經驗分享。無論是物聯網領域的創業者,還是系統架構師,都可從本書中獲得靈感。本書對于嵌入式開發領域的開發者尤具學習價值,利用Python可加快開發迭代速度、降低開發成本,并可以基于嵌入式Python建立完整的物聯網軟硬件生態。

編輯推薦

√ Python全棧是降低物聯網開發復雜度的必由之路

√ 物聯網應用系統的快速開發和系統擴展可以兼顧

√ 物聯網系統設計比互聯網系統設計更受限更復雜

√ 全覆蓋應用、產品、生態的全局視角與選型思路

作者簡介

劉凱,服務于微電子行業二十余載的博學工程師。曾在飛利浦半導體(即NXP恩智浦半導體前身)任博學工程師,從事軟、硬件開發與產品設計等工作,有用匯編/C/C 開發嵌入式系統固件、用Perl/Python腳本做開發支持工具、用PHP/Java/Python做設備云和Web應用的豐富經驗。現作為獨立系統集成開發商,專業從事物聯網相關項目設計和咨詢服務,主攻嵌入式、RFID、微控制器、物聯網、WSN、Linux、Python、開源等領域。

目錄

第1章 物聯網簡介 1

1.1 物聯網定義 1

1.2 物聯網發展趨勢 1

1.3 物聯網應用與技術 2

1.3.1 物聯網核心價值 2

1.3.2 物聯網發展階段 3

1.3.3 物聯網分層 5

1.3.4 物聯網數據傳輸與網絡拓撲 5

1.3.5 物聯網實施所需技術棧 8

1.3.6 標準、現狀與未來 10

1.4 本章小結 16

第2章 Python語言基礎 17

2.1 Python的由來與特征 19

2.1.1 概述 19

2.1.2 設計定位與哲學 19

2.1.3 優點與缺點 20

2.2 Python與物聯網開發 22

2.3 獲取Python資源 24

2.3.1 Python主程序 24

2.3.2 Python文檔 24

2.3.3 Python PyPI 24

2.4 Python解釋器運行環境 26

2.4.1 REPL交互模式 26

2.4.2 直接運行與模塊運行 26

2.4.3 腳本文件直接運行 27

2.4.4 源程序文字編碼與結束符 28

2.5 Python類型與語法 29

2.5.1 動態類型 29

2.5.2 傳值與傳引用 30

2.5.3 數據類型 31

2.5.4 內置類型 32

2.5.5 內置類型的普適操作 34

2.5.6 數值類型 35

2.5.7 布爾類型 37

2.5.8 迭代器類型 37

2.5.9 生成器類型 38

2.5.10 yield表達式 39

2.5.11 序列類型 39

2.5.12 set集合類型 54

2.5.13 映射類型 55

2.5.14 其他類型 56

2.5.15 控制流 59

2.5.16 內置函數 61

2.5.17 用戶自定義函數 62

2.5.18 模塊 65

2.5.19 輸入/輸出 68

2.5.20 面向對象編程 74

2.5.21 進程和線程 82

2.5.22 錯誤和異常 90

2.6 Python標準庫概覽 93

2.7 本章小結 94

第3章 Python語言進階 95

3.1 HOWTO:常見任務和解決方案 95

3.1.1 數據類型轉換 96

3.1.2 數據的調試打印 100

3.1.3 數據類型資源優化 102

3.1.4 數據結構與算法 102

3.1.5 數據緩存 103

3.1.6 數據多路復用和解復用 104

3.1.7 數據序列化和反序列化 107

3.1.8 數據壓縮和解壓縮 119

3.1.9 數據加密 120

3.1.10 數據傳輸 121

3.1.11 數據后處理 121

3.1.12 數據持久化 121

3.1.13 數據交換 122

3.2 HOWTO:函數式編程 123

3.2.1 高階函數 123

3.2.2 map函數 124

3.2.3 reduce函數 124

3.2.4 filter函數 124

3.2.5 sorted函數 125

3.2.6 返回函數 125

3.2.7 閉包 126

3.2.8 匿名函數 126

3.2.9 裝飾器 127

3.3 HOWTO:并發運行模型 131

3.3.1 協程 131

3.3.2 I/O模型 134

3.4 HOWTO:日期與時間 136

3.4.1 類型轉換 136

3.4.2 時區的處理 138

3.5 Python版本遷移 139

3.5.1 Python 2與Python 3的區別 140

3.5.2 Python 2到Python 3的流程 140

3.5.3 多個Python版本共存 140

3.5.4 virtualenv 141

3.5.5 Windows多個版本共存 141

3.5.6 Linux多個版本共存 142

3.6 其他常見技巧 143

3.6.1 常數類型的模擬 143

3.6.2 枚舉類型的模擬 143

3.6.3 開發自定義模塊 144

3.7 Python與其他語言 145

3.8 Python語言擴展 151

3.8.1 C語言擴展Python 151

3.8.2 ctypes訪問Windows DLL 153

3.8.3 Jython訪問Java類 154

3.8.4 IronPython訪問.NET 155

3.9 Python加速 157

3.9.1 PyPy 158

3.9.2 Cython 159

3.9.3 PyCUDA 159

3.9.4 PyOpenCL 159

3.9.5 Theano 159

3.9.6 Nuitka 159

3.10 本章小結 160

第4章 嵌入式系統開發 161

4.1 嵌入式系統硬件分類 162

4.1.1 MCU 162

4.1.2 MPU 163

4.1.3 DSP 163

4.1.4 SMP 164

4.1.5 異構大小核 164

4.1.6 FPGA原型 165

4.1.7 SoPC 165

4.1.8 GPU 167

4.1.9 哈佛結構和馮?諾依曼結構 168

4.2 電路原型設計 168

4.2.1 集成電路設計流程 170

4.2.2 模擬電路原型設計 170

4.2.3 數字電路原型設計 175

4.3 常見嵌入式微控制器(MCU) 179

4.3.1 MCU市場狀況 179

4.3.2 Arduino/Wiring 180

4.3.3 ARM mbed 181

4.3.4 設計專屬架構和專屬MCU 182

4.3.5 ARM MCU差異化競爭 182

4.4 常見嵌入式處理器和主板 184

4.4.1 ARM架構 185

4.4.2 其余的ARM Linux主板 188

4.4.3 MIPS開發板 190

4.4.4 x86 mini-ITX 191

4.5 常見傳感器和執行器 192

4.5.1 虛擬傳感器 193

4.5.2 智能傳感器 193

4.5.3 專用傳感器 194

4.5.4 執行器 195

4.6 物聯網通信集成電路 196

4.7 嵌入式系統開發語言演進 197

4.7.1 從匯編到嵌入式C 197

4.7.2 從C到C 199

4.7.3 壓縮C 的系統消耗 199

4.7.4 C 適合物聯網開發 200

4.8 C/C 的編程模式和技巧 204

4.8.1 C/C 設計模式 205

4.8.2 回調函數 206

4.8.3 有限狀態機模型 209

4.8.4 善用結構體 211

4.8.5 C/C 協程 214

4.9 開發生態選擇 215

4.9.1 工業標準與廠家私有指令集架構 215

4.9.2 硬件與軟件平臺選擇 215

4.9.3 編譯器選擇 216

4.10 常見操作系統 217

4.10.1 無操作系統 217

4.10.2 RTOS的優勢 218

4.10.3 uC/OS 219

4.10.4 Keil RTX 219

4.10.5 mbed RTOS與mbed OS 220

4.10.6 FreeRTOS 221

4.10.7 Linux是開發復雜聯網設備的現實選擇 222

4.11 物聯網中間件 227

4.11.1 WSN堆棧 227

4.11.2 TCP/IP 227

4.11.3 USB 227

4.11.4 FAT/FS 228

4.11.5 GUI 228

4.11.6 Terminal 228

4.11.7 MQTT 228

4.11.8 CoAP 229

4.12 物聯網安全性 230

4.12.1 安全相關芯片 230

4.12.2 安全中間件 231

4.12.3 Python安全算法 232

4.13 設備固件更新 232

4.13.1 固件更新技術發展史 232

4.13.2 本地固件更新 234

4.13.3 遠程固件更新 234

4.13.4 固件升級定制 234

4.14 各類串口實現聯網 235

4.14.1 串口協議的選擇 235

4.14.2 模擬串口設備 236

4.14.3 其他類型虛擬設備 238

4.14.4 ISP編程器 238

4.14.5 串口設備監控器 239

4.15 本章小結 239

第5章 設備連接和編程接口 240

5.1 設備連接概述 240

5.1.1 嵌入式系統連接層次 240

5.1.2 選擇正確的連接方案 241

5.1.3 具體落實連接設計 241

5.1.4 本章內容安排 242

5.2 連接能力匯總 242

5.2.1 連接由芯片開始 243

5.2.2 芯片內部系統總線 245

5.2.3 芯片間連接技術 246

5.2.4 設備間連接 249

5.2.5 設備組網 250

5.2.6 設備組網與聯網的無線技術 253

5.2.7 連接性回顧 266

5.3 Linux文件系統 266

5.3.1 設備即文件 266

5.3.2 設備文件系統 267

5.3.3 Linux設備文件的演變 268

5.3.4 文件I/O操作 271

5.3.5 Linux硬件編程 272

5.4 并行接口 273

5.4.1 老舊的PC并行接口 274

5.4.2 高速總線 274

5.4.3 GPIO 274

5.4.4 Linux訪問GPIO 275

5.4.5 GPIO的Python包 276

5.5 串行接口 277

5.5.1 異步通信串行口 277

5.5.2 I2C總線 284

5.5.3 SPI總線 290

5.5.4 與其他硬件平臺相關的Python包 294

5.6 USB總線 296

5.6.1 USB Endpoints 297

5.6.2 USB Device/Host/OTG 297

5.6.3 USB 3.0 297

5.6.4 libUSB 297

5.6.5 PyUSB 298

5.6.6 標準化USB橋接 299

5.6.7 與USB相關的其他設計 301

5.7 Linux網絡設備驅動 301

5.7.1 TCP/IP套接字編程 301

5.7.2 IEEE 802.3到IEEE 802.11 302

5.7.3 網絡通信實現方案 302

5.7.4 私有通信協議棧 305

5.7.5 短距離無線連接 307

5.8 工業總線 310

5.8.1 CAN總線 310

5.8.2 LIN總線 312

5.8.3 其他ASIC 313

5.8.4 定制Python擴展 313

5.8.5 Windows DLL 314

5.9 本章小結 314

第6章 嵌入式Python虛擬機 315

6.1 嵌入式高級語言平臺大薈萃 315

6.1.1 高級語言與二次開發 315

6.1.2 BASIC 319

6.1.3 Java 319

6.1.4 Lua 322

6.1.5 JavaScript 322

6.1.6 .NET 323

6.2 前一代Python虛擬機 323

6.2.1 Telit GPRS模塊 323

6.2.2 Symbian 325

6.2.3 Windows CE 325

6.2.4 OpenMoko 325

6.3 深嵌入式Python平臺 326

6.3.1 LEGO EV3 326

6.3.2 TinyPy 326

6.3.3 嵌入式Python的局限 327

6.4 PyMite 328

6.4.1 硬件平臺 328

6.4.2 維護者 329

6.4.3 pymbed分支 329

6.4.4 開發現狀 331

6.4.5 文檔 332

6.4.6 源碼樹 333

6.4.7 使用流程 335

6.4.8 實踐 336

6.4.9 工程小結 337

6.4.10 網絡資源 338

6.5 VIPER/Zerynth 338

6.5.1 硬件平臺 339

6.5.2 Zerynth Studio 340

6.5.3 與標準Python的區別 341

6.5.4 快速啟動 342

6.5.5 坎坷的使用過程 342

6.5.6 Zerynth目錄結構 343

6.5.7 硬件相關庫 344

6.5.8 其他特性 355

6.6 MicroPython 356

6.6.1 工程背景知識 356

6.6.2 在線評估網頁 358

6.6.3 官方硬件平臺分支 358

6.6.4 衍生項目 359

6.6.5 UNIX版本 360

6.6.6 MicroPython庫 363

6.6.7 STM32HAL分支 365

6.6.8 NUCLEO-F401RE適配 367

6.6.9 pyboard評估 372

6.6.10 異步處理和中斷處理 389

6.6.11 中斷處理的普遍問題 392

6.6.12 使用心得 395

6.6.13 商品化與知識產權 396

6.6.14 BBC microbit 396

6.7 Linux與Python 398

6.7.1 Linux中Python的運行環境 398

6.7.2 交叉編譯CPython 401

6.7.3 交叉編譯MicroPython 402

6.7.4 Jython運行環境 404

6.7.5 Android SL4A 406

6.8 本章小結 407

第7章 Python應用APP 408

7.

媒體評論

前幾年國內引進了Chris Anderson的《創客:新工業革命》。打那時候開始,國內流行起“創客”風潮。“創客”這個詞果真是一個洋氣的舶來品,很多國人姑且把它看成硬件創業的預備役。但是大洋彼岸原產地的人們倒是樸實得可愛:織個毛衣,搞個室內大棚蔬菜。當然高科技類的自然少不了搗鼓一下機床,焊一塊板子,這更像是一種DIY的懷舊文化:更加純粹和快樂。做一名純粹的創客并不容易,畢竟要抽出一定的時間和精力。直到現在我依然惦記著自己那臺完成了一半的 3D 粉末打印機,而它就靜靜地躺在儲物箱里。那時候的我已經開始為創業做前期準備,但商業項目和自己在創客空間玩的東西沒啥關系,終究自娛自樂和商業有差別。

遇見 Allan 的時候,他也在努力從創客轉變成創業者。我很驚詫于他雖然技術嫻熟,也曾負責NXP產品技術與市場,卻依然對技術保持著孩童般的初心,真的不多見啊。離開NXP后,Allan決定成為一名自由職業者。靠著自己扎實的技術,從前端到后臺,從硬件到軟件,他一個人搞起了物聯網的項目和產品。我們時不時在線上談論可行的產品和市場策略。雖然我對硬件不熟悉,但是由于自己當時就職于PTC,擁有些許物聯網后臺軟件的認知,就這樣我們相互參照著學習,并努力將其付諸實踐。

2015年5月,我離開了PTC并投身于機器視覺領域的創業,但依然保有對物聯網的熱情,尤其關注工業物聯。而 Allan 在這幾年的實踐中積累了全棧開發的經驗。終于有24小時,他覺得是時候將他獨自一人的全棧開發經驗記錄下來,并傳播給這個領域的開發者了。我自然非常支持他,但是獨自寫一本技術類的書,這是多么考驗人呀。之后和 Allan 的交流變少了,我想象得出他獨自在房間碼格子的情形。半年后,這本書的初稿終于扎扎實實地完成了。

創業者和分析師們總愛重復地問一個問題:物聯網的風口有沒有來?我們很難精準地去預判某個時間節點,但假如物聯網是一個不遠不近的方向的話,我們當下能夠做的便是順著產業的脈搏而跳動。類比一下 PC 和移動互聯網,我們依然處于物聯網大規模商業化的早期。但是終我們會迎來萬物互聯。讓我激動的是萬物互聯的基礎架構成熟后,在各個行業以及各個利基市場將會涌現出各種“新物種”,推動著商業和產業進一步提高效率,進一步打破邊界。而對于希望投身于這個行業的技術人員來說,應該盡量拋棄這些華麗的時髦術語,回歸技術本身。這本書平實地記錄了讀者需要了解和掌控的基礎知識;與此同時,它從單一語言全棧開發的概念出發梳理了一個完整的流程,而全局觀的梳理能夠更好地幫助技術人員去理解技術的本質。

技術總是在飛速地發展,書本記載的技能需要不斷地升級更新。但是我能感受到 Allan 更希望傳達的創客精神。創客愿意從零開始建一棟樓,他們或許不能建成一座摩天大廈,但至少也會筑成一幢別具一格的小樓房。這種純粹的樂趣只有從動手實踐中才體會得出來。但人們的生活節奏總是很匆忙,有這么一本類似于“寶典”的書,可以加快看官您動手的速度和效率。但愿您能享受從零開始搭建一個物聯網項目或者產品的過程。

張成 上海疊層科技聯合創始人

網友評論(不代表本站觀點)

免責聲明

更多出版社