Python全端開發是降低物聯網開發複雜度的必經之路
物聯網應用系統的快速開發和系統擴充可以兼顧
物聯網系統設計比互聯網系統設計更受限更複雜
應用、產品、生態的全域視角與適合組合本書說明如何以Python 為主要程式語言,實現「從晶片到雲端」的物聯網應用系統快速開發和系統擴充。透過閱讀本書,讀者可以充分體會Python 身為全端開發語言,是如何在物聯網的裝置端、應用端、伺服器端和資料端環節中發揮作用的。力求帶給讀者更寬的視野,包含物聯網相關的應用、產品和生態,介紹不同的系統架構和雲端運算服務,並在不同的技術選項中推薦幾種比較適合專案開發和實際需求的主流組合。
以資料的流動方向,即資料的裝置端擷取、伺服器連線、轉發、分析到使用者端的呈現為主軸,並以Python 語言從入門到各個技術堆疊中的應用為輔線來安排全書章節。力求在有限的篇幅內,突出物聯網特徵並使用Python 落地生根,成為快速開發反覆運算的基礎;同時提示在Python應用中可能遇到的問題和解決方案,降低讀者的學習成本。
適用:對物聯網及相關熱點,如智慧硬體、工業4.0、萬物互連的應用與實現技術有興趣者。
作者簡介:
劉凱
曾任飛利浦半導體(即NXP恩智浦半導體前身)資深工程師,從事軟、硬體開發與產品設計等工作,有用組合語言/C/C++ 開發嵌入式系統軔體、用Perl/Python指令稿做開發支援工具、用PHP/Java/Python做設備雲和Web應用的豐富經驗。現作為獨立系統集成開發商,從事物聯網相關專案設計和諮詢服務。
推薦序
前幾年引進了Chris Anderson 的《創客:新工業革命》。自此開始流行起「創客」風潮。「創客」這個詞果真是一個洋氣的舶來品,很多人把它視為硬體創業的預備役。但是大洋彼岸原生地的人們倒是樸實得可愛:織個毛衣,弄個室內蔬菜棚。高科技類的自然少不了亂玩一下機床,焊一塊板子,這更像是一種DIY 的懷舊文化:更加純粹和快樂。做一名純粹的創客並不容易,畢竟要抽出一定的時間和精力。直到現在我依然惦記著自己那台完成一半的 3D 粉末印表機,而它就靜靜地躺在儲物箱裡。當時的我已經開始為創業做前期準備,但商業專案和自己在創客空間玩的東西無關,終究自娛自樂和商業是有差別的。
遇見 Allan 的時候,他也在努力從創客轉變成創業者。我很驚詫於他雖然技術嫻熟,也曾負責NXP 產品技術與市場,卻依然對技術保持著孩童般的初心。離開NXP 後,Allan 決定成為一名自由業者。靠著紮實的技術,從前端到後台,從硬體到軟體,他一個人做起物聯網的專案和產品。我們時不時線上談論可行的產品和市場策略,雖然我對硬體不熟悉,但是由於自己當時就職於PTC,擁有些許物聯網後台軟體的認知,就這樣我們相互參照著學習,並努力將其付諸實作。
2015 年5 月,我離開PTC 並投身於機器視覺領域的創業,但依然保有對物聯網的熱情,尤其關注工業物聯。 Allan 則在這幾年的實作中累積了全端開發的經驗。終於有一天,他覺得是時候將他獨自一人的全端開發經驗記錄下來,並傳播給這個領域的開發者。我自然非常支持他,但是獨自寫一本技術類的書,這是多大的考驗!之後和 Allan 的交流變少了,半年後,這本書的初稿終於紮紮實實地完成了。
創業者和分析師們總愛重複地問一個問題:物聯網的風口(趨勢)有沒有來?我們很難精準地去預判某個時間節點,假如物聯網是一個不遠不近的方向,我們當下唯一能夠做的便是順著產業的脈搏而跳動。類比一下 PC 和行動網際網路,我們依然處於物聯網大規模商業化的早期,但是最後會迎來萬物互連。讓我激動的是萬物互連的基礎架構成熟後,在各個企業以及各個利基市場將湧現出各種「新物種」,推動著商業和產業進一步提高效率、打破邊界。對希望投身於這個業界的技術人員來說,應該儘量拋棄這些華麗的時髦術語,回歸技術本身。這本書平實地記錄讀者需要了解和掌握的基礎知識;與此同時,它從單一語言全端開發的概念出發整理了一個完整的流程,全域觀的整理能夠更進一步地幫助技術人員去了解技術的本質。
技術總是在高速地發展,書本記載的技能需要不斷地升級更新。但是我能感受到 Allan 更希望傳達的創客精神。創客願意從零開始建一棟樓,他們或許不能建成一座摩天大廈,但至少也會築成一幢別具一格的小樓房。這種純粹的樂趣只有從動手實作中才體會得出來。但人們的生活節奏總是很匆忙,有這麼一本類似「寶典」的書,可以加快讀者動手的速度和效率。但願您能享受從零開始架設一個物聯網專案或產品的過程。
前幾年引進了Chris Anderson 的《創客:新工業革命》。自此開始流行起「創客」風潮。「創客」這個詞果真是一個洋氣的舶來品,很多人把它視為硬體創業的預備役。但是大洋彼岸原生地的人們倒是樸實得可愛:織個毛衣,弄個室內蔬菜棚。高科技類的自然少不了亂玩一下機床,焊一塊板子,這更像是一種DIY 的懷舊文化:更加純粹和快樂。做一名純粹的創客並不容易,畢竟要抽出一定的時間和精力。直到現在我依然惦記著自己那台完成一半的 3D 粉末印表機,而它就靜靜地躺在儲物箱裡。當時的我已經開始為創業做前期準備,但商業專案和自己在創客空間玩...
目錄
前言
01 | 物聯網簡介
1.1 物聯網定義
1.2 物聯網發展趨勢
1.3 物聯網應用與技術
1.4 本章小結
02 | Python 語言基礎
2.1 Python 的由來與特徵
2.2 Python 與物聯網開發
2.3 取得Python 資源
2.4 Python 解譯器執行環境
2.5 Python 類型與語法
2.6 Python 標準函數庫概覽
2.7 本章小結
03 | Python 語言進階
3.1 HOWTO:常見工作和解決方案
3.2 HOWTO:函數式程式設計
3.3 HOWTO:平行處理執行模型
3.4 HOWTO:日期與時間
3.5 Python 版本移轉
3.6 其他常見技巧
3.7 Python 與其他語言
3.8 Python 語言擴充
3.9 Python 加速
3.10 本章小結
04 | 嵌入式系統開發
4.1 嵌入式系統硬體分類
4.2 電路原型設計
4.3 常見嵌入式微處理器(MCU)
4.4 常見嵌入式處理器和主機板
4.5 常見感測器和執行器
4.6 物聯網通訊積體電路
4.7 嵌入式系統開發語言演進
4.8 C/C++ 的程式設計模式和技巧
4.9 開發生態選擇
4.10 常見作業系統
4.11 物聯網中介軟體
4.12 物聯網安全性
4.13 裝置軔體更新
4.14 各種序列埠實現聯網
4.15 本章小結
05 | 裝置連接和程式設計介面
5.1 裝置連接概述
5.2 連接能力整理
5.3 Linux 檔案系統
5.4 平行介面
5.5 序列介面
5.6 USB 匯流排
5.7 Linux 網路裝置驅動
5.8 工業匯流排
5.9 本章小結
06 | 嵌入式Python 虛擬機器
6.1 嵌入式高階語言平台大薈萃
6.2 前一代Python 虛擬機器
6.3 深嵌入式Python 平台
6.4 PyMite
6.5 VIPER/Zerynth
6.6 MicroPython
6.7 Linux 與Python
6.8 本章小結
07 | Python 應用APP
7.1 以字元為基礎的人機界面
7.2 桌面GUI 開發
7.3 本機Web GUI
7.4 本機可執行檔
7.5 行動APP 開發
7.6 本章小結
08 | Python 開發輔助支援
8.1 物聯網開發需要不斷最佳化
8.2 專屬小工具
8.3 原型驗證
8.4 程式產生器
8.5 軟體測試
8.6 文件產生器
8.7 文件操縱
8.8 國際化與當地語系化
8.9 設定管理
8.10 資料與素材處理
8.11 通訊封包分析
8.12 與Arduino/mbed 相關的Python 套件
8.13 虛擬儀器
8.14 3D/VR/AR
8.15 本章小結
09 | 物聯網伺服器端設計
9.1 物聯網計算模型
9.2 物聯網與網際網路設計異同
9.3 物聯網閘道與邊緣伺服器
9.4 物聯網裝置連線協定
9.5 高可用性與高平行處理性
9.6 業務與資料融合
9.7 Web 開發架構
9.8 物聯網安全
9.9 伺服器發佈
9.10 伺服器運行維護
9.11 物聯網系統設計實作
9.12 本章小結
10 | 融合應用與資料分析
10.1 物聯網是可程式化的
10.2 資料統計、分析和採擷
10.3 擷取整理自有資料
10.4 擷取協力廠商資料
10.5 資料分析
10.6 資料視覺化
10.7 本章小結
A 推薦書目與結束語
A.1 推薦書目
A.2 友情提示
A.3 供應商和生態鏈平台
A.4 對傳統企業的期望
A.5 對自己的期待
A.6 教學相長
A.7 結束語
A.8 作者聯絡方式
前言
01 | 物聯網簡介
1.1 物聯網定義
1.2 物聯網發展趨勢
1.3 物聯網應用與技術
1.4 本章小結
02 | Python 語言基礎
2.1 Python 的由來與特徵
2.2 Python 與物聯網開發
2.3 取得Python 資源
2.4 Python 解譯器執行環境
2.5 Python 類型與語法
2.6 Python 標準函數庫概覽
2.7 本章小結
03 | Python 語言進階
3.1 HOWTO:常見工作和解決方案
3.2 HOWTO:函數式程式設計
3.3 HOWTO:平行處理執行模型
3.4 HOWTO:日期與時間
3.5 Python 版本移轉
3.6 其他常見技巧
3.7 Python 與其他語言
3.8 Python 語言擴充...