從芯片到雲端 : Python 物聯網全棧開發實踐 从芯片到云端:Python物联网全栈开发实践

劉凱

買這商品的人也買了...

商品描述

《從芯片到雲端:Python物聯網全棧開發實踐》內容提要
物聯網開發重新定義了“全棧開發”的範圍。

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.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