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

從芯片到雲端:Python物聯網全棧開發實踐 pdf epub mobi txt 电子书 下载 2025

劉凱 著
圖書標籤:
  • Python
  • 物聯網
  • 全棧開發
  • 嵌入式係統
  • 雲計算
  • 硬件開發
  • 網絡編程
  • 數據分析
  • 項目實踐
  • 智能硬件
想要找书就要到 求知書站
立刻按 ctrl+D收藏本页
你会得到大惊喜!!
出版社: 电子工业出版社
ISBN:9787121311277
版次:1
商品编码:12253128
品牌:Broadview
包装:平装
开本:16
出版时间:2017-11-01
用纸:胶版纸
页数:724

具体描述

編輯推薦

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

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

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

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

內容簡介

物聯網開發重新定義瞭“全棧開發”的範圍。Python作為一門快速發展的語言,已經成為係統集成領域的優選語言之一,其可覆蓋從電路邏輯設計到大數據分析的物聯網端到端開發。各領域開發者可以利用Python交叉涉足物聯網設備、邊緣計算、雲計算、數據分析的工程設計。

《從芯片到雲端:Python物聯網全棧開發實踐》嘗試讓讀者建立物聯網設計的整體概念,從基礎概念開始,到相關技術選型、開源工程、參考設計與經驗分享。無論是物聯網領域的創業者,還是係統架構師,都可從本書中獲得靈感。本書對於嵌入式開發領域的開發者尤具學習價值,利用Python可加快開發迭代速度、降低開發成本,並可以基於嵌入式Python建立完整的物聯網軟硬件生態。

作者簡介

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

精彩書評

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

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

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

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

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

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


目錄

第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.3 原型驗證 458

8.4 代碼生成器 459

8.5 軟件測試 461

8.6 文檔生成器 468

8.7 文檔操縱 477

8.8 國際化與本地化 479

8.9 配置管理 484

8.10 數據與素材處理 486

8.11 通信報文分析 495

8.12 與Arduino/mbed相關的Python包 497

8.13 虛擬儀器 509

8.14 3D/VR/AR 512

8.15 本章小結 515

第9章 物聯網服務器端設計 516

9.1 物聯網計算模型 517

9.2 物聯網與互聯網設計異同 526

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.5 高可用性與高並發性 575

9.7 Web開發框架 589

9.8 物聯網安全 597

9.9 服務器交付 603

9.10 服務器運維 605

9.11 物聯網係統設計實踐 614

9.12 本章小結 625

第10章 融閤應用與數據分析 626

10.1 物聯網是可編程的 626

10.2 數據統計、分析和挖掘 630

10.3 采集整理自有數據 633

10.4 采集第三方數據 637

10.5 數據分析 647

10.6 數據可視化 663

10.7 本章小結 682

推薦書目與結束語 683


(篇幅有限,完整目錄請查看本書)

精彩書摘

序言

筆者曾經長期服務於微電子行業,現在從事物聯網相關項目設計和谘詢服務。

1995年畢業後,筆者加入瞭飛利浦半導體上海技術中心,任軟件工程師。在此期間的主要工作是使用匯編語言為國內客戶進行各類顯像管(CRT)彩電的固件開發。當時的技術環境,8051都已經非常普及瞭,而飛利浦半導體彩電和固定電話技術方案中的控製器卻依舊采用老舊的Intel 8048內核MCU。該內核架構有許多限製:比如超過2KB代碼需要切換代碼段,缺乏高級語言支持,等等。雖然架構古老,但這個業務卻一直是當時飛利浦半導體的“現金牛”(即主要利潤來源)。

筆者後轉入産品市場部,在那裏可以接觸到許多炙手可熱的産品綫。其中,筆者負責的産品如下。

8051控製器:配閤中國閤作夥伴,如(北航)中國單片機實驗室、南京萬利、南京偉福、廣州周立功等單位,閤作推廣LPC764/9XX及後來的ARM LPC係列。

通信産品:8048內核電話機MCU、傳呼機、DECT和中國數字無繩電話芯片組。

智能卡産品:包括電話卡、CPU卡,以及最著名的HF-RFID Mifare、LF-RFID Hitag RFID和車用防盜鑰匙。

DSP産品:Trimedia VLIW(超長指令集)DSP,用於視頻電話和媒體處理。

CPLD:低功耗CoolRunner CPLD,後轉售給Xilinx。

PDA:基於MIPS R3000內核的Windows CE PDA方案。

後來,筆者又重新拾起軟件開發的工作,主要負責基於8051/MIPS的LCD/DTV的客戶化固件開發。

應該這麼說,在飛利浦的從業經驗使得筆者積纍瞭嵌入式開發經驗,開闊瞭産品綫視野,並積纍瞭多方麵的技術興趣和行業人脈。同時,在開發這些嵌入式産品的過程中,筆者開始采用各類腳本語言來做代碼生成和其他開發工具。

2008年,飛利浦半導體部獨立成為NXP公司之後,筆者開始瞭自己的創業之路。到目前為止,筆者獨立設計過以下産品和參考設計:

基於Cypress PSoC的RFID/UART/GPRS/TPMS模塊(C)。

基於SDIO閃存卡的NFC接口(FPGA/CPLD)。

Wi-Fi強製門戶及熱點分享網站(PHP)。

GPRS+GPS AVL設備及網站(C/Java/PHP)。

TI C2800 DSP ANC主動噪聲抑製係統(C/ASM)。

網絡爬蟲,用於抓取超市的POP海報分發(Python+PHP)。

Android翻譯APP(Java)。

電子貨架標簽係統,第一個從設備到APP的完整原型設計(C+Python網關)。

GAP創客電子模塊,基於NXP/Freescale/ST的M0/M3處理器,並提供Bootloader和ISP軟件(C/C++/Python)。

工業門物聯網(C/C++/Python)。

呼吸機物聯網(Python/Golang)。

電梯物聯網(Python)。

EPD電子模塊(C++/Python)。

RFID分類錢包(國傢實用新型專利,已授權)。

GPS資産定位係統(C++/Python)。

電信CDMA基站監控設備(C++/Python)。

VoLTE高清語音監控設備(C++/Python)。

分級基金及股票監控報警係統(Python)。

離開NXP之後,筆者的設計不再受限於原公司的技術平颱所涉及的消費電子産品領域,而是擴大到瞭互聯網與物聯網領域。筆者的個人體驗是,無論是設備端還是服務器端,都有許多技術可以深入學習。但是兩者融閤,技術復雜度卻呈現幾何級數上升。

不同領域有不同的優勢語言。一般來說,CPLD/FPGA使用VHDL/Verilog,MCU/SoC固件開發使用C/C++,桌麵開發使用C#/VB等,服務器開發使用Java/PHP/JavaScript/Python/Golang,手機APP使用Java/Objective-C。

所以,筆者在工程實踐中,一直在使用匯編/C/C++開發嵌入式係統固件,並使用Perl/Python腳本做開發支持工具,同時采用PHP/Java/Python做設備雲和Web應用。一個完整的物聯網應用涵蓋許多環節:從數字邏輯電路設計,到硬件設計、固件設計、網關軟件設計、服務器軟件和網頁設計、APP設計,甚至模具的3D設計。齣於工作的需要,即使環節長,筆者也不得不像“萬金油”一樣,親自參與全過程的設計工作。雖然無奈,但筆者的修煉結果是,比一般硬件團隊略懂服務器開發,比一般服務器/APP開發團隊略懂硬件開發,而且大緻瞭解瞭物聯網的許多具體技術。

筆者的個人體會是,物聯網環節太長瞭!無論是設計、編碼還是調試,物聯網的龐雜特性都非常明顯。首先設計和編碼時間就很長,尤其在係統聯閤調試時,需要使用多種開發工具(仿真器、目標硬件、儀錶、服務器、Web控製颱)。在這個階段,有時候需要多颱計算機纔能夠完成調試任務。

以超市貨架管理項目為例,其涉及WSN協議規劃、節點端和網關端設備的固件開發和協議實現、服務器設計、手機APP、條形碼和二維碼掃描。此項目筆者整整開發瞭一年纔交付給客戶,而且調試起來還挺麻煩。

個人單槍匹馬,精力有限,無法同時兼顧所有環節,因而開發的項目格局不會太大。物聯網開發應該為團隊閤作,甚至多個團隊之間進行閤作。每個團隊對於各自的環節負責,做到接口標準化。這樣纔能夠復用已有的經驗和模式,並充分發揮其邊際效應。即便是團隊閤作,也需要將自己使用的工具數量降低到最少,至少需要尋找到覆蓋麵較廣的工具來開發。這也是現在許多“全棧”開發的目的。

采用單一語言做全棧開發

全棧開發最初齣現在互聯網行業,指的是能夠同時開發網頁前端和服務器後端。這包括能夠做全棧開發的技術和掌握這些技術的工程師。該行業最典型的全棧開發語言是JavaScript。

在物聯網行業中,全棧開發的含義被延伸瞭。筆者推薦以Python作為全棧開發語言。本書的全棧開發涉及IC(集成電路)設計、設備端(電路和係統)、服務器(含網頁)端,以及移動端和數據分析端。使用單一語言可以多方麵降低成本:

學習周期短,降低人力成本。

交付時間短,降低開發成本。

人力資源供應充分,降低人均開發成本。

容易形成生態,構建開發者生態圈,實現眾包。

代碼復用性強,代碼可重用,開源市場有不少現成方案,可降低總體開發成本。

設備可以虛擬化,物理設備可以通過同一代碼模擬齣來,以加快工程啓動周期,降低開發成本額和減少開發者間的責任推諉。

綜上,物聯網開發涉及麵龐雜,開發周期長,尋找一種覆蓋麵廣的編程語言和方法對企業和開發團隊有現實意義。

Python用於全棧開發

在筆者眼裏,承擔全棧開發的語言可以是Java,也可以是JavaScript,還可以是Python。由於互聯網的發展,加之JavaScript在前端語言中的優勢地位,使得它開始延伸到瞭服務器後端和設備端。而Java原本就在設備端和服務器端都很有優勢。從發展曆史上看,在嵌入式平颱中最早齣現的是Java,最近纔開始齣現JavaScript和Lua等動態語言。這都是服務器端企圖深入到嵌入式行業的努力。至於Python,由於其膠水特性,雖然性能不占優勢,但是開發速度快,比較適閤做全棧的原型開發。

之所以齣現企業和手機開發者力推Java開發,前端開發者力推Node.js開發前後端技術,某些群體力推Go的現象,除瞭技術本身的因素,許多情況下也是其教育背景和從業經曆所導緻的,即所謂齣身和基因所決定的。在此,個人經曆決定瞭筆者選擇Python作為自己的主力開發語言。

曾經看過一個關於如何在Java/JavaScript/C#/Python/Golang等幾種語言中選擇一種作為主力編程語言的漫畫式流程圖。其中有一個選擇:如果你喜歡樂高,那麼請選擇Python。仔細想想,Python的確很像樂高:

接口一緻性高。

粗顆粒,構建速度快,適閤原型。

有標準構件,如各種標準積木和標準庫。

具備大量的定製構件。樂高中存在定製的主題人物和機器人組件,而Python也有大量的C擴展庫和第三方應用庫。

在我國的港颱地區術語中,將Integrated Circuit翻譯為“積體電路”,即積木化的電路。而新齣現的各類集成技術,如SoC/SiP,即係統芯片和係統封裝,也是通過在電路IP領域和封裝領域的創新來實現更大規模的電路整閤。換而言之,不同規模的電路都是搭積木搭齣來的。所以,半導體行業應該會比較偏愛類似於積木的Python語言。

迴顧自己的從業和工程經曆,大概以下是筆者偏愛Python開發的原因:

在固件開發中,接觸到使用腳本語言(gawk)來設計代碼生成器簡化開發。

電子工程經驗,接觸並瞭解瞭許多企業的設備聯網需求。

互聯網工程開發經驗,接觸到瞭互聯網/物聯網領域的諸多環節。

在網站和APP開發經驗中,不得不使用多種編程語言用於軟件開發,瞭解工程管理的痛點。

Python作為一種膠水語言,可在物聯網及嵌入式係統中承擔大量任務,並可以部分替代VHDL/C/C++/Java/PHP/JavaScript等各類語言,或者與這些語言進行互相調用。但是讓一位工程師拋棄原有技術棧換用其他語言是睏難的。最初,筆者隻是在工程實踐中發現Python的“齣鏡率”相當高。在一些小場景中筆者嘗試使用Python開發後,積纍瞭一定的使用經驗。後來為瞭加速開發,筆者開始在客戶工程中大量使用Python進行原型驗證和服務器端開發。最終,Python成為筆者的主力開發語言。

說起來,筆者本人的經曆與Python的膠水特性很類似。筆者不能算是Python高手,所有的開發都是僅僅讀瞭最基本的演示代碼後就立即著手進行工程開發。筆者甚至連相關基本入門書都沒有看完整,就著手使用Python構建係統。缺乏耐心的代價就是不斷重新造輪子,即所謂的“重構”。不過,在不斷換“輪子”的過程中筆者充分體會到瞭Python的各種優點。

無論是麵嚮過程(POP)、麵嚮對象(OOP)、麵嚮切麵(AOP),還是更加抽象的函數式編程(FP),Python都可以支持。編程思想隻有在項目中纔能被不斷加深理解。

這一點,Python對筆者的幫助非常大。之前,雖然也寫過C++/Java程序,但是實際上真正讓筆者完成從麵嚮過程到麵嚮對象編程思維轉換的語言恰恰是Python。

相當多的Python代碼,一開始編寫的時候是采用各類函數的麵嚮控製編程,腳本化的傾嚮很強。隨著代碼復雜度的增加,筆者不得不反復重構代碼,並主動引入瞭OOP的編程方法。體會瞭OOP的好處後,促使筆者反過來在設備端設計中重構C++代碼。在物聯網服務器端開發時,筆者接受瞭麵嚮切麵的概念。在編寫本書的時候,筆者又學習瞭函數式編程。在以後的開發中,筆者會有意識地增加更加抽象的編程思想以簡化日常的編程設計。

實際上,在從事物聯網的後端設計時,許多朋友強力推薦筆者使用Java進行開發。因為Java在企業級應用中積纍瞭許多可重用的設計,是企業級應用的首選語言。但是筆者接觸並熟悉Python之後,堅持使用Python開發網關和服務器。筆者發現使用什麼語言真的不那麼重要,隻要自己熟悉就好。況且Python還可以用Jython來對接Java重用Java資源。說起來Python和Java是兩種極端:Python可以在許多語言中實現,而許多語言利用Java VM來運行。

熟悉瞭Python後,筆者就在日常工程中堅持使用Python:在端口擴展與仿真、代碼和文檔生成、Web/IoT服務器及嵌入式平颱Python VM中都可以用到。而且每次開發後,總能夠保留一些Python工具提交給開源社群,或者以後自己用。這也是不斷自我強化的過程:熟悉一種工具,就會不斷地利用這種工具去解決問題。

Python的缺點及應對措施

首先,許多開發者認為Python的運行速度較慢,尤其無法與C/C++編譯的原生代碼相比。由於VM的設計架構不同,Python,尤其是CPython比Java/Lua還要慢。Python作為一種開源的語言,即使有各種各樣的問題,利用開源社群的力量也可以更容易地找到各種解決方案。現在使用JIT技術的PyPy加速已經非常成熟,在許多場閤都可以應用。Cython也是一種性能極高的擴展,可以實現與Golang類似的性能。配閤libuv異步庫,Python的網絡性能不輸於任何一種編程語言。性能不是唯一的要素,Python的強大在於:生態的完整,開發速度快,運行速度也很快。

其次,Python語言和代碼本質上是開源的,所以更加適閤開源軟件使用。如果要實現閉源的商業化軟件,可以將Python源碼編譯成pyc,或使用各類C和其他擴展幫助保護核心設計,其代價是損失瞭Python跨平颱的特性(除非擴展中也采用瞭某種跨平颱技術,比如JVM)。

最後,Python的GIL問題也很有名,對多綫程設計不利。解決方法有很多:多進程、協程及其他Python實現(如Jython、PyPy、Cython等)均可以迴避這個問題。

前言/序言

本書講述如何以Python為主要編程語言,實現“從芯片到雲端”的物聯網應用係統快速開發和係統擴展。通過閱讀本書,讀者可以充分體會Python作為一門全棧開發語言,是如何在物聯網的設備端、應用端、服務器端和數據端環節中發揮作用的。

編寫本書的初衷是為瞭讓準備或者已經從事物聯網開發的讀者能夠通過Python語言縮短相關學習和開發周期;同時與大傢分享一些經驗教訓,希望能夠讓讀者在具體開發中迴避各種“坑”。這不僅對開發團隊,對於企業甚至投資者決策也是有益的。

大多數物聯網相關書籍比較關注物聯網係統和服務器端設計,但是物聯網與互聯網的設計差彆在於:物聯網係統設計受限於有限的設備計算能力、巨大的連接數量、獨特的數據特徵。所以完整的物聯網係統設計需要考慮的要素比互聯網更多,需要掌握的知識麵既廣且深。如何在短期內實現係統上綫,並安全、平滑地實現規模擴展一直是大傢思考的問題。開發者可以采用的對策如下:

減少開發語言和工具種類。

使用成熟的參考設計和編程框架。

使用主流的雲計算服務和可擴展的係統設計。

開源硬件、軟件設計和並行開發模式。

有許多事情“開弓沒有迴頭箭”。物聯網的最大特點是大量的定製需求,而且上下環節的銜接往往存在技術依賴性,某個環節的決定往往會對其他環節的實施帶來很大的影響,並可能造成開發團隊間的責任推諉。這需要係統設計者事前做許多調研功課。筆者專注於設備域和服務器域,但本書力求帶來更寬的視野,包括物聯網相關的應用、産品和生態,介紹不同的係統架構和雲計算服務,並在不同的技術選項中推薦幾種比較適閤工程實施和實際需求的主流組閤。

在收集資料的過程中,筆者發現Python作為一門通用編程語言,應用範圍非常寬泛。相信本書內容中有許多物聯網相關的Python應用是齣乎大多數人意料的:

支持SPICE/IBIS仿真與VHDL設計和電路的自動測試。

可以在許多流行的8/16/32 MCU上運行,包括AVR/PIC/ARM/MIPS。

支持絕大多數MCU/MPU/CPU的外設和工業總綫,而且編程接口非常靈活。

可以在各種類型的Linux上運行多種Python運行環境,包括CPython、Jython和各類嵌入式Python。

通過Jython運行於Java Runtime中,與Java類庫完美結閤,切入企業級應用和大數據分析。

可以跨平颱開發桌麵應用和手機應用。

大量現成的網絡安全和分析工具,可幫助開發者定位通信報文錯誤,或尋找係統安全漏洞。

提供大量的輔助工具,包括文檔、軟件工程、虛擬儀器、媒體處理等,為此筆者特地預留瞭第8章進行羅列。

物聯網網關、服務器架構、數據分析和可視化、虛擬設備、通信協議定製等領域開發效率超高。

從SPICE/VHDL開始,到服務器,Python實現瞭“從芯片到雲端”的全棧開發。筆者希望這些內容和案例能夠幫助開發者在啓動項目前對開發有全局性的瞭解,並做齣正確選擇。

同時,本書的寫作過程采用瞭Python相關工具,也是“全棧開發”實例之一。

格式:將Python文檔中常見的reST/Markdown作為基礎書寫格式。

編譯:采用Sphinx將reST章節編譯成流行的HTML網頁、ePub電子書籍。

轉換:采用Pandoc(Haskell)轉換成交付給齣版社的docx主流文檔格式。

讀者可以將本書看作單一編程語言的物聯網應用小百科,通過書中的簡單例子大緻瞭解物聯網的開發流程,並可以根據自己的興趣,在每章的延伸閱讀 清單中深入探索、掌握物聯網開發技術的具體實現細節。

目標讀者群

本書的目標讀者群是以下兩大類開發者。

互聯網開發團隊:熟悉移動端APP的開發、服務器架構和網頁前端開發,但對於傳統製造業的技術領域,如芯片設計、硬件設計、固件設計、硬件係統集成,以及批量生産和庫存管理缺乏足夠的瞭解。

設備開發團隊:主要是傳統製造業産業鏈中的半導體供應商、獨立設計公司、設備製造商。他們熟悉硬件設備的設計和流程,但普遍對於互聯網應用和物聯網架構缺乏足夠的瞭解。

當前的製造業變化趨勢是,設計與平颱標準化,導緻産品同質化競爭嚴重。這使得傳統製造業在市場中逐漸喪失瞭議價權和話語權,處於被整閤的被動地位。這些企業和團隊在物聯網時代異常焦慮,急需掌握數據接入和數據分析技術,以增加市場份額,並提升市場競爭力和議價權。本書第9章主要講述物聯網服務器後端開發,可以幫助傳統製造業瞭解服務器端和數據端的發展趨勢、大緻的技術方案構成,並可以利用Python做些簡單的設備測試。

除瞭工業物聯網、行業物聯網外,消費端智能硬件領域的物聯網開發案例非常多,這是市場熱點之一。許多創業團隊雖然可以自行設計APP,搭建服務器,但是團隊往往缺乏設備端製造經驗,並仍在各類硬件問題中艱苦跋涉,苦苦摸索。本書在第4章中介紹瞭成熟的元器件、連接模塊和實時操作係統,配閤Python快速原型開發能力,讓項目可以快速上市之餘,還可以為設備添加各種“智能”應用。

此外,許多讀者可能希望從全局角度瞭解物聯網應用、各類技術方案甄選標準,以及具體技術細節。本書也盡可能地進行羅列,並就一些常見問題特彆加以說明。

總的來說,本書適閤對物聯網及相關熱點,如智能硬件、工業4.0、萬物互聯的應用與實現技術感興趣的人群閱讀。目標讀者群除瞭互聯網從業者、微電子和OEM/ODM製造商、應用係統集成商,還包括學生、教師、創客、極客、Python語言愛好者、産品經理、項目經理,企業高管和創投基金經理等。

最低閱讀要求

由於本書是一本技術書籍,因此需要讀者具備一定的編程經驗和技術熱情。如果讀者對於Python基本語法有一定的瞭解那就更棒瞭。即便沒有Python的使用經驗,相信Python易學易用的特點也可以讓讀者很快入門。

此外,由於代碼中大部分采用英語注釋,因此需要讀者具備基本的英語閱讀能力。

本書的目的

核心目的

為應用開發團隊提供設備端硬件、固件開發流程和開發工具方麵的工程建議,並提供一些可以用於與服務器對接的硬件平颱和參考設計。

為設備開發團隊,提供服務器前後端/移動端的係統架構、開發框架、生態平颱方麵的工程開發建議,提供可以不斷升級的可擴展架構和開發路徑,以滿足産品從原型測試、中試、量産到分布式規模生産係統整個産品生命周期的需求。

其他目的

分享基於IaaS/PaaS雲計算平颱的服務器開發經驗,包括設備雲、應用雲和大數據服務。

分享可快速部署的物聯網網關(Gateway)、邊緣服務器(Edge Server)原型設計。

匯集Python在計算機係統中方方麵麵的應用信息,並持續更新。

吸引各方閤力推動Python在嵌入式虛擬機/網關/服務器/大數據分析方麵的開源活動。

本書內容安排

物聯網環節長、技術龐雜,涉及的每種技術領域都值得大傢仔細鑽研學習。可以這麼說,許多話題和技術都可以單獨齣一本書。所以本書力求在有限的篇幅內,突齣物聯網特徵並使用Python落地生根,使之成為快速開發迭代的基礎;與此同時提示在Python應用中可能遇到的問題和解決方案,以降低讀者的學習成本。

本書以數據的流動方嚮,即數據的設備端采集、服務器接入、轉發、分析到用戶端的呈現為主綫,並以Python語言從入門到各個技術棧中的應用作為輔綫來安排章節。

本書內容編排經過多次斟酌和修改,最終按照以下順序介紹。

章節簡介

第1章 物聯網簡介 概述物聯網的定義、發展趨勢以及物聯網應用與技術等

第2章 Python語言基礎 數據類型、數據結構、內置函數和標準庫

第3章 Python語言進階 多種實現、與其他語言的接口、物聯網常見技巧

第4章 嵌入式係統開發 數字邏輯與模擬電路設計、C/C++固件開發以及主流的平颱與供應商

第5章 設備連接和編程接口 物聯網的多種連接性與編程接口以及Python支持包

第6章 嵌入式Python虛擬機 深嵌入式、嵌入式Linux最小係統以及各類Python虛擬機實現、演示

第7章 Python應用APP 在主流桌麵操作係統和移動端中的Python APP開發

第8章 Python開發輔助支持 在物聯網開發環節中的原型驗證、虛擬設備、數據分析等多個方麵的Python開發工具

第9章 物聯網服務器端設計 物聯網網關、邊緣服務器、Web/IoT服務、開發框架和連接選項

第10章 融閤應用與數據分析 科學計算、數據統計、數據挖掘和大數據分析平颱和工具,以及數據可視化

除瞭本書內容,筆者還整理瞭諸多書中提到的Python擴展包和演示代碼,並計劃依托齣版社網站和其他互聯網服務進行分發。本書為筆者一個人寫就,缺少專傢進行校對,本人水平有限,書中難免有疏漏、錯誤,歡迎讀者指正。但筆者精力亦有限,無法一一迴復,祈諒。

本書未包括的內容

因為篇幅的限製,也因為物聯網的特性,所以本書安排的內容比較繁雜。本書未能針對特定硬件、軟件、雲服務展開,也沒有針對物聯網提供完整的開源設計。這些希望讀者在書本之外展開。本書齣版後會依托各類互聯網服務(如GitHub、社交網站和BBS)展開後續的開源設計活動。

軟硬件環境

除非特殊應用和聲明,本文主要的操作環境為Windows 7(64位)及Ubuntu Linux 12.04(32/64位)。Python版本為V2.7.11和V3.5。

在微控製器方麵筆者推薦ARM mbed兼容的LPC/STM/KL開發闆,或Arduino;對於卡片電腦,推薦樹莓派或者兼容的國産Linux SBC;對於MicroPython,推薦在STM32F4XX/ESP8266開發闆上運行。

版權聲明

本書所附代碼和硬件,凡是筆者所做,皆采用LGPL協議,讀者可以自由用於任意目的;其餘軟件和硬件,請參考各自官網中的版權聲明。本書引用的圖片、代碼、圖錶等,其版權皆歸屬於所屬公司、網站和個人。本書引用這些資源主要用於說明目的,且盡量在每章延伸閱讀中標明齣處。如有遺漏,請聯絡筆者本人。

感謝

本書付梓需要感謝許多機構和個人。

知乎網站:本書的創作主題來源於筆者在知乎上的提問,並得到瞭知乎網友(包括齣版社編輯)的熱心解答、正麵鼓勵和推動纔能夠走到這一步。

張春雨先生(永恒的俠少),電子工業齣版社的策劃編輯:在知乎上遇見後,你一路推動本書的齣版。感謝你的耐心和鼓勵。

張成先生,物聯網創業夥伴:張成先生,物聯網創業夥伴:不斷鼓勵筆者繼續深入物聯網開發,並撥冗為本書作序。

EEWorld編輯nmg和版主dcexpert:他們提供瞭寶貴的MicroPython pyboard開發闆。

諸多開源項目的作者們:感謝大傢對於開源軟硬件項目的熱情和不厭其煩解答問題的耐心。

芯片供應商及分銷商:

NXP(恩智浦),感謝免費提供LPC係列開發闆。

Freescale(飛思卡爾,已與NXP閤並),感謝慷慨提供大量KL25的樣片及技術支持。

TI(德州儀器)及分銷商Serial(新曄科技),感謝提供WSN技術支持。

Cypress,感謝免費提供PSoC開發闆。

Fujitsu(富士通),感謝友情提供FeRAM RFID。

Atmel(愛特梅爾),感謝免費提供MCU、Wi-Fi和Crypto産品開發闆。

Nuvoton(新唐科技),感謝免費提供MCU開發闆。

最後感謝自己的父母和妻子,忍受筆者在放棄其他工程開發的情況下編寫本書。

輕吻女兒Kirin,謝謝你的耐心等候。

劉凱(奕辰,Allan K Liu)

2017夏,上海


從無到有,萬物互聯:Python 物聯網全棧開發的深度探索 這是一本為你量身打造的實踐指南,將帶領你踏上一段從底層硬件到宏大雲端的物聯網全棧開發之旅。如果你渴望理解並掌握如何讓那些埋藏在傳感器、嵌入式設備中的“大腦”與廣闊的雲端世界 seamlessly 連接,本書將是你不可或缺的夥伴。我們不談高屋建瓴的理論,隻聚焦於實實在在的編碼、配置與部署,讓你在親手實踐中領悟物聯網的精髓。 第一部分:潛入硬件的脈搏——嵌入式係統與傳感器交互 一切物聯網的起點,都始於物理世界。本部分將帶你深入那些構成物聯網“觸角”的硬件設備。我們將從基礎開始,介紹不同類型的微控製器(如 ESP32、Raspberry Pi Pico)及其核心工作原理,讓你明白它們如何接收指令、處理數據。 硬件選型與基礎配置: 麵對琳琅滿目的嵌入式開發闆,如何根據項目需求做齣明智選擇?我們將深入分析不同硬件平颱的優勢與劣勢,從功耗、處理能力、接口類型等方麵進行詳細對比,並指導你完成初始的開發環境搭建,包括固件燒錄、必要驅動的安裝等。 傳感器數據采集的藝術: 物聯網的生命綫是傳感器。我們將詳細講解各類常見傳感器的原理與應用,包括溫度、濕度、光照、運動、GPS、氣體傳感器等等。你將學會如何使用 Python(或其他配套語言,如 MicroPython)直接與這些傳感器進行通信,讀取原始數據。這不僅僅是簡單的讀取,更是對數據準確性、采樣頻率、異常值處理等關鍵環節的深入理解。 GPIO 編程的精妙: 通用輸入/輸齣(GPIO)是微控製器與外部世界交互的橋梁。我們將通過大量的代碼示例,演示如何利用 GPIO 控製 LED、讀取按鈕狀態、驅動繼電器等,實現對物理世界的直接控製。你將掌握電平邏輯、中斷處理、PWM 脈寬調製等核心概念,讓你的設備真正“動”起來。 通信協議的底層語言: 傳感器與微控製器之間的通信,以及微控製器之間的通信,依賴於一係列標準化的協議。本部分將深入剖析 I2C、SPI、UART 等串行通信協議的工作機製,讓你理解數據如何在不同設備間高效、準確地傳輸。我們將通過實際操作,讓你親身體驗這些協議的設置與調試。 嵌入式 Python 的魅力: MicroPython 或 CircuitPython 等針對嵌入式設備的 Python 方言,將是我們在這一階段的主要編程工具。你將學習如何編寫輕量級、高效的 Python 代碼,直接在微控製器上運行,完成數據采集、初步處理和本地控製的任務。我們還會探討內存管理、實時性等嵌入式開發特有的挑戰。 第二部分:架起連接的橋梁——嵌入式設備與網絡的通信 擁有瞭能夠感知和執行的硬件,下一步就是讓它們能夠“說話”——與外部網絡建立連接。本部分將聚焦於嵌入式設備如何接入互聯網,以及在網絡中進行數據交換。 Wi-Fi 與藍牙連接: 掌握如何配置 ESP32、Raspberry Pi 等設備連接到 Wi-Fi 網絡,並進行穩定的通信。同時,我們將探討藍牙(BLE)在近距離通信中的應用,如何實現設備配對、數據傳輸,以及在智能傢居、穿戴設備等場景下的優勢。 MQTT:物聯網的“消息總綫”: MQTT(Message Queuing Telemetry Transport)是物聯網領域事實上的標準通信協議。我們將深入講解 MQTT 的發布/訂閱模式,Broker 的作用,以及如何在嵌入式設備和服務器端實現 MQTT 的消息收發。你將學習如何構建高效、低功耗的消息通信係統。 HTTP/HTTPS 的角色: 雖然 MQTT 更適閤設備端,但 HTTP/HTTPS 在與雲端服務交互時依然扮演著重要角色。我們將演示如何使用 Python 在嵌入式設備上發起 HTTP 請求,上傳數據到 Web API,或者從 Web API 獲取配置信息。 網絡安全基礎: 在連接到網絡的設備,安全問題至關重要。本部分將簡要介紹 TLS/SSL 加密、API 密鑰驗證等基礎的網絡安全概念,以及如何在嵌入式環境中應用它們,保護你的數據不被竊取或篡改。 第三部分:雲端大腦的構建——服務器端開發與數據處理 一旦數據離開瞭物理世界,就需要一個強大的“大腦”來接收、存儲、處理和分析這些海量信息。本部分將帶你進入雲端,使用 Python 構建強大的物聯網後端服務。 Web 框架的選擇與應用: Flask 和 Django 是 Python Web 開發的佼佼者。我們將詳細講解如何利用 Flask 快速搭建輕量級的 RESTful API,用於接收設備上傳的數據。如果你需要更復雜的應用,Django 的強大功能將幫助你構建功能完備的後端服務。 數據庫設計與管理: 物聯網數據量龐大且類型多樣,選擇閤適的數據庫至關重要。我們將介紹關係型數據庫(如 PostgreSQL)和 NoSQL 數據庫(如 MongoDB)在物聯網場景下的應用,學習如何設計數據庫 Schema,高效存儲和查詢時序數據、傳感器讀數等。 實時數據處理與分析: 原始傳感器數據往往需要經過清洗、轉換和分析纔能産生有價值的信息。我們將探討如何使用 Python 編寫數據處理管道,實現實時數據流的處理。這可能涉及到統計分析、模式識彆、異常檢測等技術。 消息隊列與異步處理: 為瞭應對高並發的設備連接和海量數據湧入,消息隊列(如 RabbitMQ、Redis Streams)是必不可少的工具。你將學習如何利用消息隊列解耦設備端與服務器端,實現異步處理,提高係統的吞吐量和穩定性。 API 設計與集成: 構建一套清晰、易用的 API 接口,是讓你的物聯網平颱能夠被其他應用訪問的關鍵。我們將深入探討 RESTful API 設計原則,學習如何構建能夠響應設備請求、提供數據查詢、設備管理等功能的 API。 部署與運維基礎: 將你的後端服務部署到雲平颱(如 AWS、Azure、Google Cloud)或私有服務器上,並進行基礎的運維管理,是項目落地的最後一步。我們將簡要介紹 Docker 容器化技術,以及如何在 Linux 環境下部署 Python Web 應用。 第四部分:可視化與智能——數據呈現與高級應用 收集和處理瞭大量數據之後,如何讓這些數據“說話”,並從中挖掘齣智能,是物聯網價值的最終體現。本部分將聚焦於數據的可視化以及更高級的智能應用。 數據可視化實踐: 將抽象的數據轉化為直觀的圖錶,能夠幫助我們快速理解係統狀態和發現趨勢。我們將介紹使用 Python 的 Matplotlib、Seaborn、Plotly 等庫進行數據可視化,並探討如何將這些可視化集成到 Web 應用中,為用戶提供實時的儀錶盤(Dashboard)。 物聯網應用場景的構建: 通過整閤前幾個部分的知識,我們將構建幾個典型的物聯網應用場景,例如: 智能傢居係統: 控製傢電設備、監測環境、安防報警等。 智慧農業: 監測土壤濕度、溫度、光照,自動灌溉、施肥。 工業物聯網(IIoT): 設備狀態監測、故障預測、生産過程優化。 可穿戴設備數據分析: 收集健康數據,進行健康趨勢分析。 機器學習與人工智能在物聯網中的應用: 將機器學習模型集成到物聯網平颱,能夠賦予設備和係統更高的智能化水平。你將學習如何利用 Python 的 Scikit-learn、TensorFlow、PyTorch 等庫,構建預測模型(如設備故障預測)、分類模型(如異常行為檢測),並將這些模型部署到雲端或邊緣設備上,實現更智能化的決策。 邊緣計算的探索: 在某些對延遲要求極高的場景下,將計算能力下放到靠近數據源的邊緣設備上(邊緣計算)成為必然。我們將探討邊緣計算的理念,以及如何在 Raspberry Pi 等設備上運行輕量級的機器學習模型,實現本地化的智能處理。 安全性與隱私保護的進階: 隨著應用復雜度的增加,安全性與隱私保護需要更深入的考量。我們將討論更高級的安全機製,如設備身份認證、數據加密策略、訪問控製等,以及在設計物聯網係統時如何充分考慮用戶的隱私權。 本書特色: 實戰驅動: 每一章都伴隨大量的代碼示例、配置說明和項目實踐,讓你“動手”大於“動口”。 全棧覆蓋: 從底層硬件到雲端服務,再到數據可視化和智能應用,為你構建完整的物聯網開發知識體係。 Python 為核心: 充分利用 Python 語言的易用性、豐富的庫生態和強大的社區支持,貫穿整個物聯網開發流程。 循序漸進: 內容設計由淺入深,適閤有一定編程基礎(特彆是 Python 基礎)但對物聯網開發不熟悉的讀者,也能夠幫助有經驗的開發者深入特定領域。 麵嚮未來: 關注前沿技術,如邊緣計算、AIoT,為你應對未來的物聯網挑戰做好準備。 閱讀本書,你將不再是僅僅停留在理論層麵,而是真正地掌握瞭如何將你的創意轉化為可運行的物聯網解決方案,讓你的項目能夠真正地連接世界,賦能未來。

用户评价

评分

我是一位對新興技術充滿好奇的學習者,最近一直在關注物聯網的發展趨勢,也瞭解到它將是未來科技的重要組成部分。在眾多的技術棧中,Python憑藉其簡潔易懂的語法和豐富的庫生態,在各個領域都展現齣瞭強大的生命力。當我在網上看到《從芯片到雲端:Python物聯網全棧開發實踐》這本書時,我立刻被它吸引住瞭。我一直認為,物聯網的核心在於連接,而這種連接不僅僅是物理層麵的,更是數據層麵的,是應用層麵的。這本書的書名就精準地概括瞭這一過程,從最底層的硬件交互,到復雜的雲端服務,貫穿始終的是Python這門語言。我特彆想知道書中是如何將這些看似獨立的環節有機地結閤起來的。例如,它會詳細講解如何使用Python來處理各種物聯網通信協議,如MQTT、HTTP等嗎?在雲端部分,它會介紹如何利用Python構建可擴展的物聯網後端服務,或者如何使用Python進行數據分析和可視化,從而挖掘齣數據背後的價值嗎?我希望這本書能提供一個清晰、係統化的開發流程,幫助我建立起對物聯網全棧開發的全麵認知。

评分

這本書對我來說,簡直是一本“修煉秘籍”。我一直認為,未來的科技趨勢必然是萬物互聯,而物聯網就是實現這一願景的關鍵。我深知,要掌握物聯網開發,就必須瞭解從“芯片”到“雲端”的整個鏈路,每一個環節都至關重要。這本書的書名精準地抓住瞭這一點,並且強調瞭Python在其中扮演的角色,這讓我這個Python愛好者倍感振奮。我希望書中能夠深入淺齣地講解如何利用Python來駕馭各種嵌入式平颱,例如如何通過Python代碼來控製微控製器上的各種傳感器和執行器,實現對物理世界的感知和交互。同時,我也非常期待書中關於網絡通信和雲端部署的內容,例如如何使用Python來實現設備之間的通信,以及如何利用Python構建高效、穩定的物聯網後端服務,並將數據安全地傳輸到雲端進行存儲和分析。我希望這本書能夠提供一套完整的解決方案,讓我能夠將理論知識轉化為實際的應用,真正體驗到“從零到一”構建一個物聯網係統的成就感。

评分

哇,這本書我剛拿到手,光是封麵設計就一股子硬核科技範兒,特彆吸引我。書名《從芯片到雲端:Python物聯網全棧開發實踐》更是直擊要害,這正是我目前非常想深入學習的方嚮。我一直對物聯網的概念著迷,覺得它能讓我們的生活變得更智能、更便捷,但一直苦於沒有一個係統性的學習路徑。尤其是在我看來,物聯網開發涉及硬件、嵌入式、網絡通信,還有上層的應用和數據處理,這簡直是一個龐大的知識體係,一個人摸索起來效率太低瞭。我之前嘗試過一些零散的教程,但總是感覺東一榔頭西一棒子,缺乏連貫性。這本書的齣現,讓我看到瞭希望,它承諾的是“全棧開發”,這對我這種想把整個鏈路都打通的人來說,簡直是福音。我特彆期待它能從最底層的硬件控製講起,比如如何通過Python和傳感器進行交互,再到網絡通信協議的應用,以及最終如何將數據上傳到雲端進行存儲和分析,最後還能開發齣可視化的應用。希望書中能夠有足夠多的實際案例和代碼示例,讓我能夠邊學邊練,真正掌握其中的技術。

评分

我是一名有著幾年開發經驗的程序員,雖然主要方嚮是後端開發,但近年來對物聯網領域産生瞭濃厚的興趣。我一直在思考如何將我熟悉的Python技能應用到這個充滿前景的領域,而這本書的齣現,正好解答瞭我的疑惑。我理解物聯網開發是一個涉及麵很廣的領域,從硬件驅動、嵌入式係統,到網絡通信、雲平颱接入,再到數據處理和應用開發,每一個環節都可能是一個獨立的知識點。我最看重的是這本書的“實踐”二字,這意味著它不會停留在理論層麵,而是會提供大量的實際案例和代碼。我尤其期待書中能夠詳細介紹如何使用Python來與各種常見的物聯網硬件進行交互,比如如何利用MicroPython或者CircuitPython在微控製器上進行開發,以及如何通過Python調用各種API來實現與雲平颱的無縫對接。我希望書中能夠涵蓋從傳感器數據的采集、處理,到數據上傳、存儲,再到數據分析和可視化等整個流程,幫助我構建一個完整的物聯網應用。

评分

這本書簡直是為我量身定做的!我一直覺得Python在數據科學和Web開發領域的強大毋庸置疑,但它在物聯網這個看似更偏嚮底層硬件的領域也能大放異彩,這讓我感到非常驚喜。我曾經看過一些物聯網的資料,但很多都涉及到C/C++等語言,這讓我這個Python開發者有些望而卻步。而這本書恰恰強調瞭Python在物聯網全棧開發中的應用,這無疑大大降低瞭入門門檻,也讓我看到瞭利用我熟悉的語言去構建智能設備的巨大潛力。我非常想知道書中是如何講解Python在嵌入式設備上的部署和運行的,比如如何在樹莓派或者ESP32這樣的開發闆上運行Python腳本,以及如何利用Python庫來控製GPIO、讀取傳感器數據、實現Wi-Fi連接等。而且,“全棧”這個詞也暗示瞭它不僅僅停留在硬件層麵,更會涵蓋到後端服務、數據庫以及前端展示。我尤其期待書中在雲平颱方麵的講解,比如如何利用Python與AWS IoT、Azure IoT Hub或者阿裏雲等雲平颱進行對接,實現設備數據的采集、存儲、分析和遠程控製。

评分

下午刚刚收到.还未细看,感觉还不错

评分

开始好好学习啊,努力努力

评分

好评好评

评分

京东服务值得信赖,支持支持支持

评分

书的内容不错,值得购买

评分

正在读

评分

写得非常详细,推荐一下吧

评分

专业综合网上购物商城,销售超数万品牌、4020万种商品

评分

国内难得的讲全栈开发的书,非常值得鼓励,谢谢

相关图书

本站所有內容均為互聯網搜索引擎提供的公開搜索信息,本站不存儲任何數據與內容,任何內容與數據均與本站無關,如有需要請聯繫相關搜索引擎包括但不限於百度google,bing,sogou

© 2025 tushu.tinynews.org All Rights Reserved. 求知書站 版权所有