物聯網(Internet of Things,IoT)正在改變我們的生活方式,它是IT行業的挑戰之一。開發人員正在創造大量低成本設備,以收集大量數據,彼此交互並利用雲服務和基於雲的存儲方案。世界各地的創客都在進行這種創造,它可以將日常物品轉換為帶有傳感器和執行器的智能設備。
例如,咖啡杯已不再是一個簡單的杯子,它可以向智能手表發送一條消息,指示其中的液體溫度是否合適,這樣你就可以放心飲用它而不必考慮是否太燙。如果你在收到消息之前移動了咖啡杯,則可穿戴設備會震動提示你現在還不到喝咖啡的時候。
你可以在智能手機中查看到咖啡機的咖啡豆餘量,而不必擔心購買了過多的咖啡豆:當咖啡機的咖啡豆餘量不足時,咖啡機會提前一天自動下單購買。你隻需要批準智能咖啡機建議的在線咖啡豆訂單即可。根據某些統計算法,咖啡機將知道何時訂購為合適。
當有更多人來到辦公室,他們的智能手表或智能手機將與咖啡機通信並下訂單,以防出現咖啡不足的情況。我們有智能咖啡杯、智能咖啡分配器、智能手表、智能手機和可穿戴設備,所有這些都可以利用雲來創建一個智能生態繫統,為人們的工作和生活提供更大的便利。
Intel Galileo Gen 2主板是用於物聯網項目的功能強大且用途廣泛的微型計算機主板。我們可以啟動Linux版本並輕松執行可以與主板上包含的不同組件進行交互的Python腳本。本書將教你開發物聯網原型,從選擇硬件到使用Python 2.7.3的所有必要軟件包、庫和工具,應有盡有。如果你需要較小的主板或其他主板,則本書中包含的所有示例均與Intel Edison主板兼容,因此,你可以根據需要切換到該主板。
Python是流行的編程語言之一。它是開源和跨平臺的,你可以使用它來開發任何類型的應用程序,從網站到極其復雜的科學計算應用程序均可。Python是開發完整的物聯網項目的理想選擇。本書涵蓋了將日常對像轉換為物聯網項目所需的所有知識。
本書將告訴你如何使用Python語言從頭開始設計和開發物聯網解決方案。你將學會利用現有的Python知識來捕獲現實世界中的數據,與物理對像進行交互,開發API,以及使用不同的物聯網協議。你將通過特定的庫輕松地使用底層硬件、傳感器、執行器、總線和顯示屏。終,你將掌握如何通過Intel Galileo Gen 2主板開發有趣的物聯網項目。
本書涵蓋的內容
第1章“了解和設置基礎物聯網硬件”,主要介紹了Intel Galileo Gen 2主板提供的不同功能,並逐一講解了其不同組件。本章解釋了不同引腳、LED和連接器的作用。
第2章“結合使用Intel Galileo Gen 2和Python”,主要介紹了將Linux Yocto鏡像寫入microSD卡、配置主板使其引導該映像、更新庫以使用其版本,以及啟動Python解釋器等操作。
第3章“使用Python實現交互式數字輸出”,重點介紹了如何使用兩個不同的庫來控制Python中的數字輸出:mraa和wiring-x86。我們將把LED和電阻器連接到面包板上,並編寫代碼以打開0至9個LED。此外,本章還改進了Python代碼以利用其面向對像功能。
第4章“使用RESTful API和脈寬調制”,介紹了使用Tornado Web服務器、Python、HTTPie命令行HTTP客戶端以及mraa和wiring-x86庫。本章生成了多版本的RESTful API,以便在連接到局域網的計算機和設備中與主板交互。
第5章“使用數字輸入”,介紹了通過輪詢讀取按鈕狀態與使用中斷之間的區別。本章將編寫代碼,使用戶可以通過主板上的按鈕或HTTP請求執行相同的操作。
第6章“使用模擬輸入和本地存儲”,介紹了如何使用模擬輸入來測量電壓值。本章使用模擬引腳以及mraa和wiring-x86庫來測量電壓,通過實例演示了將可變電阻轉換為電壓源,並使用模擬輸入、光敏電阻和分壓器來測量照明。當環境光線變化時,將觸發動作,同時使用模擬輸入和輸出。
第7章“使用傳感器從現實世界中檢索數據”,介紹了使用各種傳感器從現實世界中檢索數據。本章利用了upm庫中包含的模塊和類,同時使用了模擬和數字傳感器。
第8章“顯示信息和執行操作”,介紹了通過I2C總線連接到開發板的不同顯示。本章先是使用帶RGB背光的LCD顯示屏制作示例,然後又替換使用了OLED點陣屏。此外,本章還編寫了與模擬伺服電機交互的代碼。
第9章“使用雲”,介紹了如何結合基於雲的服務,這些服務使開發人員能夠輕松發布從傳感器收集的數據,並在基於Web的儀表板上可視化它們。本章使用了MQTT協議及其發布/訂閱模型、與MQTT協議底層的PubNub雲、Mosquitto和Eclipse Paho等。
第10章“使用基於雲的IoT Analytics服務分析海量數據”,闡釋了物聯網和大數據之間的緊密關繫,並介紹了如何使用Intel IoT Analytics REST API進行交互。本章還介紹了IoT Analytics提供的用於分析大數據的不同選項,並定義了觸發警報的規則。
充分利用本書
為了使用不同工具連接到Intel Galileo Gen 2主板並實現Python示例,你需要配置有Intel Core i3或更高CPU和至少4 GB RAM的計算機。此外,你可以使用以下任何操作繫統:
Windows 7或更高版本(Windows 8、Windows 8.1或Windows 10)。
Mac OS X Mountain Lion或更高版本。
任何能夠運行Python 2.7.x的Linux版本。
任何具有JavaScript支持的現代瀏覽器。
你還需要一塊Intel Galileo Gen 2主板和一個面包板,面包板要求帶有830個連接點(用於連接的孔)和兩條電源軌。
此外,你還需要不同器件和分線板來制作本書包含的示例。本書在具體的章節中提供了器件和分線板的詳細介紹。
本書適合的讀者
本書非常適合想探索Python生態繫統中的工具以構建自己的物聯網項目的Python程序開發人員。具有創作和設計背景的人們也會發現這本書的有用之處。
本書約定
在本書中,你將看到許多不同的文本樣式。以下是這些樣式的一些示例以及對其含義的解釋。
(1)在界面詞彙後面使用括號附加對應的中文含義,方便讀者對照查看。以下段落就是一個示例:
初始視圖將顯示Details(詳細信息)選項卡。如果Activation Code(激活碼)包含代碼已過期(Code Expired)字樣,則意味著激活碼不再有效,必須單擊Activation Code(激活碼)文本框右側的刷新圖標(第二個帶有兩個箭頭的圖標)。
(2)代碼塊顯示如下:
if __name == "__main__":
print ("Mraa library version: {0}".format(mraa.getVersion()))
print ("Mraa detected platform name: {0}".format(mraa.
getPlatformName()))
number_in_leds = NumberInLeds()
# 從0到9計數
for i in range(0, 10):
number_in_leds.print_number(i)
time.sleep(3)
(3)當我們希望引起你對代碼塊特定部分的注意時,相關的行或項目將以粗體顯示:
class NumberInLeds:
def __init__(self):
self.leds = []
for i in range(9, 0, -1):
led = Led(i, 10 - i)
self.leds.append(led)
def print_number(self, number):
print("==== Turning on {0} LEDs ====".format(number))
for j in range(0, number):
self.leds[j].turn_on()
for k in range(number, 9):
self.leds[k].turn_off()
(4)新術語和重要單詞以中英文對照的形式表示,中文在前:
我們可以輕松識別出主板上出現的許多標簽,它們是符號中每個連接器的標簽。Fritzing使我們可以輕松使用面包板(Breadboard)和電子示意圖。
圖標旁邊的文字表示警告或重要的信息。
圖標旁邊的文字表示提示或技巧。
下載示例代碼文件
讀者可以從www.packtpub.com下載本書的示例代碼文件。具體步驟如下:
(1)登錄或注冊www.packtpub.com。
(2)選擇Support(支持)選項卡。
(3)單擊Code Downloads & Errata(代碼下載和勘誤表)。
(4)在Search(搜索)框中輸入圖書名稱Internet of Things with Python,然後按照界面上的說明進行操作。
下載文件後,請確保使用版本解壓縮或解壓縮文件夾:
? WinRAR/7-Zip(Windows繫統)。
? Zipeg/iZip/UnRarX(Mac繫統)。
? 7-Zip/PeaZip(Linux繫統)。
該書的代碼包也已經在GitHub上托管,網址如下,歡迎訪問:
https://github.com/PacktPublishing/Internet-of-Things-with-Python
如果代碼有更新,也會在現有GitHub存儲庫上更新。
下載彩色圖像
本書還提供了一個PDF文件,其中包含書中屏幕截圖/圖表的彩色圖像,可以通過以下地址下載:
https://www.packtpub.com/sites/default/files/downloads/InternetofThingswithPython_ ColorImages.pdf
關於作者
Gastón C. Hillar是意大利人,從8歲開始就學習計算機。20世紀80年代初,他開始使用傳奇的Texas TI-99/4A和Commodore 64家用計算機進行編程。他擁有計算機科學學士學位(以優異的成績畢業)和MBA學位(以出色的論文畢業)。目前,Gastón是一名獨立的IT顧問和自由作家,他一直在全球範圍內尋找新的機會。
他一直是Dr. Dobb’s Journal電子雜志的資深特約編輯,並撰寫了一百多篇有關軟件開發主題的文章。Gastón還是技術計算方面的微軟MVP。他7次獲得享有盛譽的Intel ® Black Belt Software Developer獎。
他是Intel® Software Network(http://software.intel.com)的特邀博主。他的電子郵箱是gastonhillar@hotmail.com,博客是http://csharpmulticore.blogspot.com。
他與妻子Vanesa和兩個兒子Kevin和Brandon住在一起。
致謝
在撰寫本書時,我很幸運地能與Packt Publishing Ltd的優秀團隊一起工作,他們的貢獻極大地改善了本書的呈現方式。Reshma Raman給了我機會,我提出了編寫本書的想法,然後我就投入了一個激動人心的項目,教授如何將電子組件、傳感器、執行器、Intel Galileo Gen 2主板和Python組合在一起,以創建令人興奮的物聯網項目。Divij Kotian幫助我完善了對本書的構想,並針對文本、格式和流程提供了許多聰明的建議。在此還要感謝技術審核人員和校對人員的全面審核和有見地的評論。這本書之所以成為可能,正是因為他們提供了寶貴的反饋意見。
特別要感謝我的父親José C. Hillar,他在很早時就向我介紹電子產品。我在晶體管、電阻器和烙鐵的陪伴中長大。他對電子組件、微控制器和微處理器的發展有著清晰的認知和理解,這也使我得以熟悉和了解構建物聯網項目所需的一切。他還和我一起測試了本書中包含的所有示例項目。
與英特爾開發人員社區的眾多專家的良好互動使我熟悉了Intel Galileo平臺,多年以來對英特爾開發者論壇的訪問也使我了解了開發人員要成功創建現代物聯網項目必須掌握的所有內容。特別感謝Kathy Farrel和Aaron Tersteeg,因為正是在加利福尼亞州舊金山與他們的多次交流,啟發了我撰寫本書的想法。
寫書的過程既漫長又寂寞,好在有我的兒子Kevin和Brandon以及姪子Nicolas陪著我一起踢足球消遣。雖然我從來沒贏過一場比賽,但是我確實有進球。
關於審稿者
Navin Bhaskar在嵌入式繫統方面擁有4年以上的經驗,編寫了從設備驅動程序到智能卡固件在內的眾多代碼。他的“嵌入式繫統可重構計算”項目在嵌入設計挑戰賽中獲得了傑出優勝獎。在OpenWorld競賽中,他的EvoMouse贏得了三等獎。
他的博客是https://navinbhaskar.wordpress.com/,在其中可以找到有關物聯網和相關主題的教程。