大家好,我是 god23bin。歡迎來到《一分鐘學一個 Linux 命令》系列,每天只需一分鐘,記住一個 Linux 命令不成問題。今天需要你花兩分鐘時間來學習下,因為今天要介紹的是兩個常用的搜索命令:find 和 grep 命令。 ...
0簡介
本書的內容
第1章,ESP32入門,向你介紹一般的物聯網技術、ESP32硬體和開發環境選項。
第2章,與地球對話--感測器和執行器,討論了不同類型的感測器和執行器,以及如何將它們與ESP32連接。
第3章,令人印象深刻的顯示輸出,解釋瞭如何在ESP32項目中選擇和使用不同的顯示類型。FreeRTOS也被詳細討論。
第4章,深入研究高級功能,包括ESP32的音頻/視頻應用,以及滿足低功耗要求的電源管理子系統。
第5章,實踐--你的房間的多感測器,是本書的第一個參考項目,其中幾個感測器被集成到ESP32設備。
第6章,好朋友--Wi-Fi,展示瞭如何在Wi-Fi的站點和接入點模式下使用ESP32。在ESP32的背景下討論了一些TCP/IP協議。
第7章,安全第一!探討了ESP32的安全特性,並提供了安全固件更新和安全通信技術的例子。
第8章,介紹了BLE的基本知識,並展示瞭如何開發BLE信標、GATT伺服器和BLE網狀節點。
第9章,實踐--讓你的家變聰明,用BLE網狀網路中的網關、光線感測器和中繼開關構建了完整的智能家居解決方案。
第10章,無雲不物聯網--雲平臺和服務,討論了重要的物聯網協議,並以AWS物聯網集成為例介紹了不同供應商的物聯網平臺。
第11章,連接永遠不夠--第三方集成,重點介紹與語音助手和IFTTT等流行服務的集成。
第12章,實踐--語音控制的智能風扇,作為本書的最後一個項目,將一個普通的風扇轉換成支持Alexa的智能設備。
要從本書中獲得最大的收穫
物聯網技術需要許多不同的學科和技能來開發物聯網產品。從根本上說,除了具備C和Python的編程能力外,你還需要閱讀圖來設置實例中的硬體原型。我們還假定你熟悉TCP/IP協議和密碼學基礎知識,以便輕鬆掌握這些例子。在某些章節中,如果你對該主題的基礎知識感到不適應,建議閱讀一些參考書。
每個例子前都列出了必要的硬體組件。然而,你應該準備好麵包板、跳線和萬用表,以便能夠構建電路。最好還能有焊接設備,因為許多新模塊需要焊接頭,以便將它們連接到麵包板上。
作為開發環境,你應該在你的電腦上安裝VS Code。本書中的例子是在Linux機器上開發和測試的,但不管是哪種操作系統平臺,都應該可以工作。在必要的情況下,為不同的平臺推薦了外部工具的替代品。
需要一個移動設備來處理這些例子。這些移動應用程式在安卓和iOS平臺上都可以使用。
你可以從GitHub上下載本書的示例代碼文件,網址是https://github.com/PacktPublishing/Internet-of-Things-with-ESP32。
1-ESP32簡介
什麼是物聯網?
儘管不同的觀點對物聯網的定義可能略有不同,但在物聯網世界中,有一些關鍵概念將其與其他類型的技術區分開來:
- 連接性: 物聯網設備是連接的,要麼連接到互聯網,要麼連接到本地網路。牆上的老式恆溫器等待手動操作的基本編程功能不能算作物聯網設備。
- 識別: 物聯網設備在網路中被唯一地識別,設備本身可用於遠程更新、遠程管理和診斷。
- 自主操作: 物聯網系統的設計是為了最小化或沒有人類的干預。每個設備從其安裝的環境中收集數據,然後它可以與其他設備溝通數據,以檢測系統的當前狀態,並按照配置做出響應。如果需要,這種響應可以是行動、日誌或警報的形式。
- 互操作性: 物聯網解決方案中的設備相互交談,但它們不一定屬於一個供應商。當不同供應商設計的設備共用共同的應用級協議時,在異質網路中添加新設備就像點擊設備或管理軟體上的幾個按鈕一樣容易。
- 可擴展性: 物聯網系統能夠進行橫向擴展,以應對不斷增加的工作量。在必要時增加新的設備來增加容量,而不是用更好的設備來替換現有的設備(垂直擴展性)。
- 安全性: 我希望我可以說,每個物聯網解決方案都至少實施了一套最低限度的強制性安全措施,但不幸的是,情況並非如此,儘管有一些不好的經驗,包括臭名昭著的Mirai僵屍網路攻擊。從積極的方面看,我可以說,物聯網設備大多具有安全啟動、安全更新和安全通信功能,以確保保密性、完整性和可用性(CIA三要素)。
Gartner在2011年的炒作周期中加入了物聯網,預計超過10年後將成為主流應用。然而,許多相關技術,如RFID、網狀網路和藍牙,以及移動和雲技術等推動因素,在2011年之前就已經在名單上了。從那時起,Gartner在其名單上增加了其他一些物聯網技術和應用,包括以下內容:
- 物聯網平臺
- 互聯家庭
- 智能灰塵
- 邊緣計算
- 邊緣的低成本、單板電腦
5G和嵌入式人工智慧是Gartner名單上的其他革命性技術,支持物聯網並擴大其應用領域。
參考資料
- 軟體測試精品書籍文檔下載持續更新 https://github.com/china-testing/python-testing-examples 請點贊,謝謝!
- 本文涉及的python測試開發庫 謝謝點贊! https://github.com/china-testing/python_cn_resouce
- python精品書籍下載 https://github.com/china-testing/python_cn_resouce/blob/main/python_good_books.md
我們在哪裡應用物聯網?
應用範圍很廣,但從概念上講,我們可以將其分為兩個基本類別:
- 在消費者物聯網類別中,我們可以看到主要是智能家居和安全系統、個人醫療保健產品、可穿戴技術和資產跟蹤應用。
- 工業物聯網類別有更多的應用領域,正如你所期望的那樣。每年,IoT Analytics都會通過審查數以千計的新項目來發佈工業應用的十大趨勢清單,2020年的清單依次包含了製造業、交通、能源、零售、城市、醫療保健、供應鏈、農業和建築應用(https://iot-analytics.com/top-10-iot-applications-in-2020)。
邊緣的AI/ML
人工智慧已經存在了很長時間,有許多機器視覺、自然語言處理(NLP)、語音識別和ML項目的成功案例。然而,它們都需要耗能的強大硬體,以便能夠應對CPU和記憶體密集型的計算,而這一點在記憶體和處理能力低得多的簡陋的感測器設備上是不可能的。TensorFlow Lite解決了這個問題。它的轉換器可以輸出一個模型,一組通過運行數據進行預測的規則,其大小低至14KB,適合任何現代微控制器,如ARM Cortex-M3設備,功耗非常低,這使你能夠擁有具有ML能力的電池操作的感測器設備。一個有趣的項目來自Benjamin Cabé(在Twitter上:@kartben)。在他的項目中,他成功地訓練了模型來辨別不同類型的烈酒,準確率達到92%。他用SeeedStudio的Wio終端作為計算板,它有一個ARM Cortex-M4F內核,運行頻率為120MHz。
意義是巨大的。現在我們有能力開發一個真正的智能設備,而不是假的感測器設備,這樣它可以為它收集的數據添加意義,不僅可以根據數據,而且可以根據意義做出反應。本傑明採用了一個簡單的氣體感測器來檢測各種氣體,如一氧化碳(CO)、二氧化氮(NO2)、乙醇(C2H5CH)和其他一些類型。但該設備本身可以理解它實際聞到的氣味,這要歸功於它在固件中使用的ML模型。如果沒有這樣的能力,該設備將不得不把它的數據發送到另一臺更強大的機器或雲端來進行分析,然後等待回覆,以決定下一步該怎麼做。此外,如果它以某種方式失去了網路連接,那麼在恢復連接之前,就不能再做任何事情了。
你可以在以下鏈接中查看TensorFlow Lite的支持平臺:https://www.tensorflow.org/lite/microcontrollers。
能量採集
無線感測器網路(WSNs Wireless Sensor Networks)的一個重要討論和研究課題一直是感測器節點的能量消耗。很明顯,越少越好。如果你有一些開發電池操作的無線設備的經驗,你知道運行到睡眠的概念,這意味著做完工作後儘快進入睡眠模式,以保存最寶貴的資源--能源。儘管如此,無論你做什麼,感測器節點必須消耗能量,用戶在一段時間後必須更換電池。在這一點上,一項有趣的技術為你提供了幫助--能量採集,自尼古拉-特斯拉的時代就已經存在。能量可以從各種環境來源中獲取,包括光、振動和無線能源。要做到這一點,採集解決方案首先需要通過各種組件來獲取環境能量,這取決於能源類型。
如果能量來自射頻源,它就是射頻天線;如果是光,它就是一個光伏電池。然後,這種原始電能必須在集成電路的幫助下進行轉換,以便將其儲存在電容器或電池中。但你知道,這說起來容易,做起來難。儘管市場上有幾個來自不同硅供應商的電源管理集成電路(PMIC Power Management Integrated Circuits ),但很難說它們是否有效地解決了這個問題。主要的挑戰是要採集非常低的能量水平,需要將非常低的電壓提升到更高的邏輯水平,需要多個外部元件來操作,以及在PCB上有很大的晶元足跡。因此,這些挑戰阻礙了供應商生產高性能的能量收集晶元。不過,有一種產品聽起來確實很有希望。
Nowi Energy宣傳其NH2D0245 PMIC是與市場上其他半導體巨頭相比效率最高、占地面積最小的電源管理IC。為了證明他們的論點,他們與模塊公司MMT一起推出了一個混合智能手錶模塊,這樣,裝有該模塊的手錶在其生命周期內不需要充電就可以運行。能量收集是一個熱門話題,所以當然也有競爭對手,如來自比利時的e-peas半導體。你可能想在你的下一個WSN項目中嘗試這些PMIC之一。
納米機器人
來自康奈爾大學的研究項目。這項研究的結果已於2020年8月發表在《自然》雜誌上,文章名為《電子集成、大規模製造的微型機器人》。他們發明瞭納米級的執行器,你簡直無法用眼睛看到。這個超級微小的結構上有兩個太陽能電池來移動腿部,當激光束落在這些太陽能電池上時,它們產生足夠的電壓來激活腿部。
物聯網解決方案的基本結構
物聯網解決方案將許多不同的技術結合到一個產品中,從物理設備開始,涵蓋所有層級,直到最終用戶的應用。解決方案的每一層都旨在實現企業設定的相同願景,但在設計和開發時需要採用不同的方法。我們肯定不能在物聯網項目中談論一刀切的解決方案,但我們仍然可以應用有組織的方法來開發產品。讓我們看看在一個典型的物聯網產品中,解決方案有哪些層次:
-
設備硬體: 每個物聯網項目都需要帶有系統晶元(SoC)或微控制器單元(MCU)和感測器/執行器的硬體來與物理世界互動。除此之外,每個物聯網設備都是連接的,所以我們需要選擇最佳的通信媒介,如有線或無線。電源管理也是這個類別下的另一個考慮因素。
-
設備固件: 我們需要開發設備固件,在SoC上運行,以滿足項目的要求。這是我們收集數據並將其傳輸到解決方案中的其他組件的地方。
-
通信: 連接問題在解決方案架構的這個類別中處理。物理介質的選擇對應於解決方案的一個部分,但我們仍然需要決定設備之間的協議,作為共用數據的共同語言。一些協議可能通過定義物理介質到應用層來提供整個通信堆棧。如果是這種情況,你不需要擔心其他事情,但如果你的堆棧將應用層的上下文管理留給了你,那麼是時候決定使用什麼物聯網協議了。
-
後臺系統: 這是解決方案的骨幹。所有數據都在後端系統上收集,並提供產品的管理、監測和集成能力。後臺系統可以在企業內部硬體或雲供應商上實施,同樣取決於項目要求。此外,這也是物聯網遇到其他顛覆性技術的地方。你可以應用大數據分析,從來自感測器的數據中提取更深層次的信息,或者你可以使用人工智慧演算法,為你的系統提供更多的智能功能,如異常檢測或預測性維護。
-
終端用戶應用: 你很可能需要為你的終端用戶提供介面,讓他們訪問功能。10年前,我們只談論桌面、網路或移動應用程式。但今天我們有了語音助手。你可以把它們看作是一種現代的人際互動界面,把語音助手集成作為一項功能添加進去可能是一個好主意,特別是在消費者領域。
下圖描述了物聯網解決方案的一般結構:
物聯網安全
剩下的一個重要考慮因素是安全。實際上,這都是關於安全的。無論我寫什麼,都不能過分強調其重要性。物聯網設備與現實世界相連,任何安全事故都有可能對直接環境造成嚴重損害,更不用說其他網路安全犯罪。因此,在設計解決方案的任何硬體或軟體組件時,它應該始終在你的檢查清單中。雖然安全,作為一個主題,絕對值得單獨寫一本書,但我可以為現場的設備列出一些黃金規則:
- 始終尋求減少硬體和固件的攻擊面。
- 儘可能地防止物理篡改。如果沒有必要,任何物理埠都不應該被打開。
- 將秘密密鑰保存在安全介質上。
- 實施安全啟動、安全固件更新和加密通信。
- 不要使用預設密碼;TCP/IP埠不應不必要地開放。
- 在可能的情況下,將健康檢查機制與異常檢測結合起來。
作為物聯網開發者,我們應該普遍接受安全設計原則。由於物聯網產品有許多不同的組件,在設計產品時,端到端的安全性成為關鍵點。應該對每個組件進行風險影響分析,以決定傳輸中的數據和休息中的數據的安全級別。有許多國家/國際機構和組織提供有關網路安全的標準、準則和最佳做法。其中一個專門從事物聯網技術的機構是物聯網安全基金會。他們正在積極開發有關該主題的準則和框架,並公佈了許多這些準則,這些準則可以免費獲得。
如果你想查看這些指南,你可以訪問物聯網安全基金會網站,查看他們的出版物:https://www.iotsecurityfoundation.org/best-practice-guidelines/。
ESP32平臺和模塊介紹
第一個ESP32晶元是在2016年推出的。ESP32使我們能夠將網關的價格削減到原來的四分之一。有了ESP32作為主計算單元,我們將Z-wave模塊作為網路協處理器連接到它上面。另一端是Wi-Fi,這是ESP32的內置功能,用於連接後端系統。我們不擔心安全要求,因為ESP32晶元中有用於加密/解密的加密硬體加速器。這就是我們所需要的一切。然而,像往常一樣,生活並不那麼容易。我們從市場上採購的Z-wave庫的目標是基於Linux的板子,而不是像ESP32這樣資源有限的SoC。所以我們開始為ESP32移植整個Z-wave庫,並獲得了成功。最後,我們擁有了市場上最緊湊、最實惠的Z-wave網關。
為什麼採用ESP32?
- 價格便宜和可用性
- Wi-Fi和藍牙在單一的SoC中
- 強大的硬體功能,有許多外圍介面,不同的電源模式,以及加密硬體加速
- 在晶元和模塊方面,有不同的要求的變體
- 先進的開發平臺和框架
- 巨大的社區
- 最後,與頂級雲基礎設施的原生集成
ESP32的特點
自從市場上推出第一款ESP32以來,Espressif推出了ESP32的幾個變體,最近,在2020年,他們推出了ESP32-S2系列晶元。ESP32系列是通用的、功能豐富的、多功能的SoC解決方案,你可以在需要Wi-Fi連接的許多不同類型的物聯網項目中使用。讓我們快速瞭解一下其主要功能:
- CPU和記憶體: 32位Xtensa® LX6微處理器,時鐘頻率/MIPS高達240 MHz/600 MIPS。單核或雙核的變種。448 KB ROM, 520 KB SRAM, 和16 KB RTC存儲器。支持外部SPI快閃記憶體和SPI RAM的模塊變體。外圍設備的DMA。
- 連接性: Wi-Fi 802.11 n (2.4 GHz) 高達150 Mbps (STA和softAP模式)和符合Bluetooth v4.2 BR/EDR和BLE規範的藍牙。
- 周邊介面: GPIO、ADC、DAC、SPI、I2C、I2S、UART、eMMC/SD(晶元變體)、CAN、IR、PWM、觸摸感測器和霍爾感測器。
- 安全性: 加密硬體加速(隨機數、散列、AES、RSA和ECC)、1024位OTP、安全啟動和快閃記憶體加密。
- 電源模式: 在超低功耗(ULP)協處理器和實時時鐘(RTC)的幫助下有不同的電源模式。深度睡眠模式(ULP激活)下的功耗為100μA。
新的ESP32-S2系列有點不同,一些明顯的區別包括以下幾點:
- 單核。
- 沒有藍牙。
- 不支持SD/eMMC,但增加了USB OTG。
- 增強了安全功能。
為了使硬體設計更容易,Espressif提供了不同配置的ESP32模塊。模塊的可變參數是ESP32晶元的變體、外部快閃記憶體(4、8或16MB)、外部SRAM和天線類型。我們可以選擇帶有PCB天線的模塊,或者在U.FL/IPEX連接器的幫助下實現外部天線選項。在ESP32-S2方面,截至本書編寫時,我們只有一個模塊選項。大多數時候,在你的項目中選擇其中一個模塊就足夠了。但是,如果你需要特定的ESP32晶元,例如具有高溫操作的晶元,那麼你需要使用一個相應的晶元變體,例如ESP32-U4WDH,並相應地設計你的PCB。你可以在Espressif的網站上找到可用的模塊:https://docs.espressif.com/projects/esp-idf/zh_CN/latest/esp32/hw-reference/index.html。
下麵的照片顯示了一個集成有板載天線的ESP32-WROOM-32D模塊:
可以在市場上找到許多來自不同供應商的板子。我們可以很容易地用這樣的套件開始開發,而不需要進行實際的硬體設計和最終產品的原型。所有的模型都集成了USB-UART橋接晶元和USB埠,所以我們只需要將套件插入我們的開發PC,就可以閃現和測試固件:
開發平臺和框架
ESP32是相當流行的。因此,有很多選擇,你可以選擇作為你的開發平臺和框架。
當然,第一個是直接來自Espressif本身。他們稱之為Espressif物聯網開發框架(ESP-IDF)。它支持所有三個主要的操作系統環境--Windows、macOS和Linux。在安裝了一些先決條件的軟體包後,你可以從GitHub倉庫下載ESP-IDF,並將其安裝在你的開發電腦上。他們已經將所有必要的功能收集到一個名為idf.py的Python腳本中,供開發人員使用。你可以通過使用這個命令行工具來配置項目參數和最終的二進位圖像。你也可以在項目的每一步中使用它,從構建階段開始,到從電腦的串列埠連接和監控你的ESP32板。但正如我所說,這是一個命令行工具,所以如果你是一個更喜歡圖形用戶界面的人,那麼你需要安裝Visual Studio Code併在其中安裝一個ESP-IDF擴展。這裡是ESP-IDF的鏈接:https://docs.espressif.com/projects/esp-idf/zh_CN/latest/esp32/get-started/index.html。
第二個選擇是Arduino IDE。正如你所期望的那樣。Arduino提供了它自己的庫來與ESP32板一起工作。如果你有使用Arduino IDE的經驗,你就知道它是多麼容易使用。然而,與ESP-IDF相比,它是以開發靈活性為代價的。你在Arduino允許你做的事情方面受到限制,你需要遵守它的規則。
你可以選擇的第三個選擇是PlatformIO。這不是獨立的IDE或工具,而是作為Visual Studio Code中的擴展,作為開源的嵌入式開發環境。它支持許多不同的嵌入式板、平臺和框架,包括ESP32板和ESP-IDF。安裝之後,它將自己與VSCode UI集成,在這裡你可以找到ESP-IDF的idf.py提供的所有功能。除了VSCode IDE的功能外,PlatformIO還有集成的調試器,支持單元測試,靜態代碼分析,以及嵌入式編程的遠程開發工具。PlatformIO是平衡易用性和開發靈活性的好選擇。
這三個框架的編程語言是C/C++,所以你需要瞭解C/C++才能在這些框架內開發。然而,C/C++不是ESP32的唯一編程語言。你可以使用MicroPython進行Python編程,或者使用Espruino進行JavaScript編程。它們都支持ESP32板子,但說實話,我不會用它們來開發任何將在市場上推出的產品。儘管由於你對編程語言的偏好,你可能對它們感到更舒服,但你在它們中都找不到ESP-IDF的功能。
實時操作系統選項
基本上,RTOS提供了確定性的任務調度器。儘管調度規則根據調度演算法的不同而變化,但我們知道我們創建的任務將在這些規則的一定時間內完成。使用實時操作系統的主要優點是降低了複雜性,改進了軟體結構,便於維護。
ESP-IDF支持的主要實時操作系統是FreeRTOS。ESP-IDF使用自己的Xtensa版本的FreeRTOS。與普通的FreeRTOS相比,其根本區別在於對雙核的支持。在ESP-IDF FreeRTOS中,你可以從兩個核心中選擇一個來分配任務,也可以讓FreeRTOS選擇。與原來的FreeRTOS相比,其他的區別主要來自於對雙核的支持。FreeRTOS是在MIT許可下發佈的:https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-reference/system/freertos.html。
如果你想把你的ESP32連接到亞馬遜網路服務(AWS)物聯網基礎設施,你可以通過使用亞馬遜FreeRTOS作為你的RTOS選擇來實現。ESP32在AWS的合作伙伴設備目錄中,並得到官方支持。亞馬遜FreeRTOS有必要的庫來連接到AWS物聯網和其他與安全有關的功能,如TLS、OTA更新、與HTTPS、WebSockets和MQTT的安全通信,幾乎是開發安全連接設備的一切:https://docs.aws.amazon.com/freertos/latest/userguide/getting_started_espressif.html。
Zephyr是另一個RTOS的選擇,它有一個寬鬆的自由軟體許可,Apache 2.0。Zephyr需要在開發機器上安裝ESP32工具鏈和ESP-IDF。然後,你需要用它們來配置Zephyr。當配置準備好後,我們使用命令行Zephyr工具 "west",用於構建、閃光、監控和調試目的:https://docs.zephyrproject.org/latest/boards/xtensa/esp32/doc/index.html。
我想在這裡分享的最後一個RTOS是Mongoose OS。它通過其網路UI工具mos提供了一個完整的開發環境。它與幾個雲物聯網平臺,即AWS物聯網、谷歌物聯網、微軟Azure和IBM Watson,以及任何其他支持MQTT或REST端點的物聯網平臺(如果你需要一個自定義平臺)進行了原生集成。Mongoose OS有兩種不同的許可證,一種是Apache 2.0社區版,另一種是有商業許可證的企業版:https://mongoose-os.com/mos.html。
釘釘或微信號: pythontesting 微信公眾號:pythontesting