第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.1 基於字符的人機界麵 409
7.1.1 命令行參數 409
7.1.2 字符終端開發 410
7.1.3 ncurses 411
7.2 桌麵GUI開發 412
7.2.1 Tkinter 413
7.2.2 wxPython 414
7.2.3 Boa Constructor 415
7.2.4 wxGlade 416
7.2.5 PyGTK 417
7.2.6 PyQt 419
7.2.7 PySide 420
7.2.8 Enthought 421
7.2.9 Cocoa+PyObjC 423
7.2.10 Java AWT 424
7.2.11 IronPython與WPF 425
7.2.12 其他UI 425
7.3 本地Web GUI 426
7.3.1 與WebKit相關的Python包 427
7.3.2 OneRing 427
7.3.3 Pyjs 427
7.3.4 Python Flexx 428
7.4 本地可執行文件 429
7.4.1 Linux可執行文件 429
7.4.2 Mac OS X應用程序包 430
7.4.3 Windows可執行文件 430
7.4.4 pyinstaller 430
7.4.5 py2exe 430
7.4.6 py2app 430
7.4.7 cx_Freeze 431
7.4.8 Windows係統服務 431
7.4.9 Windows定時任務 432
7.4.10 Linux係統服務 433
7.4.11 Linux定時任務 435
7.5 移動APP開發 436
7.5.1 響應式網頁 437
7.5.2 PhoneGAP應用開發 437
7.5.3 SL4A 437
7.5.4 QPython開發 441
7.5.5 Kivy 443
7.5.6 其他開發方式 449
7.6 本章小結 449
第8章 Python開發輔助支持 451
8.1 物聯網開發需要不斷優化 452
8.2 專屬小工具 452
8.2.1 單位轉化器 453
8.2.2 內碼轉換器 454
8.2.3 其他編碼轉換 455
8.3 原型驗證 458
8.4 代碼生成器 459
8.5 軟件測試 461
8.5.1 unittest單元測試 462
8.5.2 socket壓力測試 462
8.5.3 urllib2遠程記錄 463
8.5.4 PCBA測試 466
8.6 文檔生成器 468
8.6.1 文檔格式 469
8.6.2 文檔生成工具 473
8.7 文檔操縱 477
8.7.1 Doc文檔操縱 477
8.7.2 Excel錶格操縱 478
8.8 國際化與本地化 479
8.8.1 gettext 479
8.8.2 Web多語種切換 482
8.8.3 字庫文件生成器 482
8.8.4 GB2312點陣字庫提取 482
8.8.5 TTF字庫提取 483
8.9 配置管理 484
8.9.1 軟件配置管理 484
8.9.2 軟件配置管理自動化 485
8.9.3 Git Bash 485
8.9.4 Dulwich/Gittle包 485
8.9.5 Python Subversion包 486
8.9.6 watchdog係統監控 486
8.10 數據與素材處理 486
8.10.1 二維碼顯示 486
8.10.2 多媒體相關軟件包 490
8.10.3 地理位置 494
8.11 通信報文分析 495
8.11.1 PyShark 495
8.11.2 pypcapfile 497
8.11.3 scapy和scapy3k 497
8.11.4 pcap Web分析 497
8.12 與Arduino/mbed相關的Python包 497
8.12.1 Arduino Prototyping 498
8.12.2 pyFirmata 501
8.12.3 Py2B 501
8.12.4 CmdMessager 501
8.12.5 mbed 504
8.12.6 mbed RPC 504
8.12.7 mbed-ls 505
8.12.8 Python-mbedtls 507
8.12.9 Python-xbee 508
8.13 虛擬儀器 509
8.13.1 實時顯示波形 510
8.13.2 Instrumentino 510
8.13.3 Vipy 511
8.13.4 PyVISA 511
8.13.5 Pythics 512
8.14 3D/VR/AR 512
8.14.1 PyOpenGL 513
8.14.2 PySoy 514
8.14.3 VPython 514
8.14.4 Printrun 3D打印 514
8.15 本章小結 515
第9章 物聯網服務器端設計 516
9.1 物聯網計算模型 517
9.1.1 雲計算 517
9.1.2 Web PaaS與IoT PaaS 518
9.1.3 IoT PaaS供應商 518
9.1.4 PaaS/IaaS混閤架構 524
9.1.5 霧計算 525
9.2 物聯網與互聯網設計異同 526
9.2.1 基礎架構 526
9.2.2 標準化程度 527
9.2.3 業務模式 527
9.2.4 係統構成 527
9.2.5 設備接入協議 528
9.2.6 數據特性 529
9.2.7 係統架構 530
9.2.8 數據持久層 532
9.2.9 大數據分析架構 534
9.2.10 業務耦閤與分離 534
9.2.11 業務與數據融閤 535
9.2.12 認證授權與計費 535
9.3 物聯網網關與邊緣服務器 535
9.3.1 Python socket服務器 536
9.3.2 pyserial RFC2217 536
9.3.3 SubGHz網關panStamp 537
9.3.4 Rascal micro 538
9.3.5 Java IoT網關 539
9.4 物聯網設備接入協議 540
9.4.1 異步通信框架Twisted 541
9.4.2 Twisted 套接字服務器設計 544
9.4.3 物聯網專用協議 558
9.4.4 CoAP 560
9.4.5 MQTT 564
9.4.6 mosquitto/paho 567
9.4.7 REST API 572
9.4.8 服務器數據推送技術 572
9.5 高可用性與高並發性 575
9.5.1 並行與並發計算 575
9.5.2 網絡I/O模型分類 575
9.5.3 架構優化的路徑 576
9.5.4 關係數據庫係統 576
9.5.5 SQL/NoSQL/NewSQL 578
9.5.6 Redis 579
9.5.7 MongoDB 580
9.5.8 時序數據庫 581
9.5.9 消息隊列 583
9.6 業務與數據融閤 585
9.6.1 網站權限管理 585
9.6.2 認證授權與計費 586
9.6.3 OpenID 587
9.6.4 OAUTH 587
9.6.5 OpenID與OAUTH的異同 588
9.6.6 社交化硬件 588
9.7 Web開發框架 589
9.7.1 MVC模型 589
9.7.2 Web開發流程 589
9.7.3 Python Web百花齊放 590
9.7.4 Zope 591
9.7.5 Django 591
9.7.6 Flask 592
9.7.7 gevent提升性能 593
9.7.8 異步Web框架Tornado 593
9.7.9 異步網絡框架Twisted 593
9.7.10 異步Web框架Cyclone 594
9.7.11 靜態網頁 594
9.7.12 TLS安全網頁 594
9.8 物聯網安全 597
9.8.1 物聯網安全現狀堪憂 598
9.8.2 操作係統安全 598
9.8.3 數據緩存與數據持久層安全 599
9.8.4 Web框架與容器安全 599
9.8.5 遠程加載風險 600
9.8.6 Web前端安全 600
9.8.7 傳輸層安全 601
9.9 服務器交付 603
9.9.1 虛擬機交付 603
9.9.2 Docker容器交付 603
9.9.3 VirtualEnv交付 605
9.10 服務器運維 605
9.10.1 Linux定時任務 606
9.10.2 常見的定時任務 610
9.10.3 係統監控 611
9.10.4 集成化運維軟件 613
9.11 物聯網係統設計實踐 614
9.11.1 服務器端需求分析 614
9.11.2 確定設備接入方式 616
9.11.3 物聯網的實時要求 617
9.11.4 EPIC IoT設備服務器 617
9.11.5 EPIC架構優化 619
9.12 本章小結 625
第10章 融閤應用與數據分析 626
10.1 物聯網是可編程的 626
10.1.1 Web API的“滿漢全席” 627
10.1.2 Web API技術演進 628
10.1.3 IoT Web API的必要性 628
10.1.4 Device as a Service 629
10.2 數據統計、分析和挖掘 630
10.2.1 名詞解釋 630
10.2.2 術語小結 631
10.2.3 大數據分析 632
10.3 采集整理自有數據 633
10.3.1 原始設備數據 633
10.3.2 數據埋點 633
10.3.3 服務器端數據 634
10.3.4 需求確定分析方法 637
10.4 采集第三方數據 637
10.4.1 結構化數據 638
10.4.2 半結構化數據 638
10.4.3 非結構化數據 639
10.4.4 數據錄入 644
10.4.5 數據融閤 644
10.4.6 數據規整 646
10.4.7 數據交易 646
10.5 數據分析 647
10.5.1 常見編程語言 647
10.5.2 數據分析分類 647
10.5.3 科學計算數據分析工具 651
10.5.4 統計學數據分析工具 658
10.5.5 金融數據分析工具 659
10.5.6 大數據平颱與生態 661
10.6 數據可視化 663
10.6.1 數據可視化的發展趨勢 664
10.6.2 matplotlib 665
10.6.3 seaborn 665
10.6.4 mpld3 666
10.6.5 Chaco 667
10.6.6 Pygal 668
10.6.7 Plotly 670
10.6.8 TVTK 671
10.6.9 VPython 672
10.6.10 Folium 673
10.6.11 NetworkX 674
10.6.12 Bokeh 676
10.6.13 Mayavi 678
10.6.14 Vispy 680
10.6.15 MoviePy 681
10.6.16 其他新技術 682
10.7 本章小結 682
推薦書目與結束語 683
· · · · · · (
收起)