物聯網 (IoT) 應用的開發人員需要確保他們的無線傳感器系統能夠無縫連接到基于云的軟件和服務。但是,這通常需要選擇和使用多個無線接口。確保這些接口都能滿足他們的要求,可讓他們不再將注意力集中在更高級別的物聯網應用本身。
為了解決這個問題,許多供應商都提供了開發板和軟件,幫助物聯網開發人員快速部署能夠通過局域網、中型網絡和廣域網進行無線連接的傳感器設備。
本文將介紹 Pycom Ltd. 提供的一個此類解決方案,并說明其特征和特性,然后展示如何應用。
對于大多數物聯網應用而言,高效的無線連接是物聯網設備設計的關鍵要求。迄今為止,沒有任何一種無線技術成為首選的連接解決方案。事實上,沒有任何一種無線技術可能占據優勢地位,因為無線提供商總能提供更加有效的替代方案。
物聯網應用的使用案例非常多,這就使得單一連接解決方案的概念變得更加復雜。相同的物聯網應用可能提出不同的連接要求,這取決于用戶的物理位置、數據吞吐量要求和其他條件。有時,同一個應用可能要求同一部物聯網設備支持使用藍牙與附近用戶進行交互,使用 Wi-Fi 與其他本地資源交互,使用 LTE 蜂窩網絡在 Wi-Fi 范圍外保持連接,甚至是使用 LoRaWAN 或 SigFox 與流入中央物聯網網關或控制器的其他地理位置分散型物聯網設備相連接。
如果這些設備能夠支持使用所有這些技術進行靈活連接,那么將為物聯網應用開發人員帶來顯著競爭優勢。早期實現這種多技術連接的方法導致設計過于復雜、成本過高,或者體積過大,以至無法滿足物聯網設計要求。即使使用較早的無線收發器,開發人員也面臨著與射頻信號路徑優化、降噪、物理布局等相關的挑戰。
對于開發人員而言,為單個無線技術構建優化的硬件解決方案已經非常困難。在旨在支持多種無線技術的硬件設計中,復雜性甚至還會顯著增加。即便在設計了合適的硬件之后,軟件工程師還要應對物聯網設計中爭奪相同有限資源的多個協議棧和軟件服務。
不足為奇的是,有效的多技術無線連接解決方案的部署,在最好的情況下也是有限的。Pycom 的多技術無線板和軟件可降低無線物聯網開發的復雜性,只需組合一些硬件和軟件即可,從而解決了這些難題。
無線選項
Pycom FiPy 和 GPy 是 55 x 20 x 3.5 毫米(mm)板,旨在為物聯網設計提供完整的多技術無線解決方案。與大多數無線產品不同,FiPy 支持藍牙 4.2、IEEE 802.11b/g/n Wi-Fi、窄帶 LTE、LoRaWAN 和 Sigfox。GPy 板不包含 LoRaWAN 和 Sigfox,但提供與 FiPy 相同的功能。本文重點介紹 FiPy 板。
在物聯網設計產品中,支持 LTE 蜂窩網絡是一種快速興起的趨勢。Pycom 的 LTE 解決方案是為其不斷擴大的支持蜂窩網絡的電路板系列而設計的,支持 LTE Cat M1 和 NB-IoT,在降低功耗的同時保持與大多數物聯網設備要求相符的吞吐量水平。通過利用這些不同的連接選項,開發人員可以優化其無線實現,以滿足靜態或動態應用對范圍、吞吐量和功耗的需求。
該板為除連接之外的物聯網設計要求提供了一個合適的平臺。FiPy 的核心是 Espressif ESP32 SoC,集成了雙處理器、8 MB 閃存、4 MB 的 RAM,還有一個提供藍牙和 Wi-Fi 連接的射頻無線電子系統。當網絡處理器執行通信協議棧時,主處理器可以運行用戶代碼。
SoC 帶有多通道 12 位模數轉換器 (ADC) 和一對 8 位數模轉換器 (DAC),可以滿足基本物聯網感測要求。除了標準串行接口、GPIO 和串行接口,Pycom 還通過板的可配置端口,提供模擬和射頻功能(圖 1)。
圖 1:Pycom FiPy 板引出了其處理器的引腳,開發人員可以將其映射到處理器的集成模擬和數字功能。(圖片來源:Pycom)
除了廣泛的功能外,FiPy 還提供節能特性,以滿足以電池供電的物聯網設計的節能要求。例如,開發人員可以將處理器置于深度休眠模式,并使用專用的超低功耗 (ULP) 處理器來處理 I/O 活動,電力消耗低至 25 微安 (μA)。ULP 處理器獨立于主處理器工作,可執行用戶代碼來訪問 GPIO,或者使用 SoC 的集成 ADC 或 DAC 執行數據轉換,為開發人員提供靈活的低功耗操作平臺,而不會影響外設工作。
插件硬件增強
對于具有更廣泛感測要求的物聯網設計,開發者可將 FiPy 與 Pycom 的 Pysense 感測板和 Pytrack 位置跟蹤板結合起來。
對于感測應用,Pysense 板提供 STMicroelectronics LIS2HH12 加速計、Silicon Labs SI7006-A20 溫度/濕度傳感器、Lite-On LTR-329ALS-01 環境光傳感器、NXP Semiconductors MPL3115A2 壓力傳感器——所有這些均通過板的共享 I2C 串行總線進行連接(圖 2)。在正常工作狀態下,所有這些傳感器都消耗最小的功率。例如,NXP MPL3115A2 壓力傳感器在正常采樣模式下僅消耗 40 μA,而功耗最大的傳感器 Lite-On LTR-329ALS-01 環境光傳感器則消耗大約 250 μA。其他兩個傳感器分別消耗大約 150 μA。
圖 2:通過將 FiPy 插入 Pysense 板,開發人員可以構建出能夠使用多個無線連接選項的多傳感器物聯網設備。(圖片來源:Pycom)
由于 Pysense 和 FiPy 的功耗需求相對較低,開發人員可以使用電池運行基于 Pycom 的設計長達數年。Pysense 板包括 Texas Instruments 的 BQ24040 電池充電器 IC 和連接器,使用帶有 JST 連接器的合適可充電電池(例如 TinyCircuits ASR00007 270 毫安小時 (mAh) 鋰離子聚合物 (LiPo) 電池)為設計供電。
對于位置跟蹤應用,Pytrack 板結合了精確的全球導航衛星系統 (GNSS) GPS 傳感器和加速計,以及與 Pysense 中所用相同的 LiPo 電池充電子系統。
Pysense 和 Pytrack 傳感器板上的針座提供了一個簡單的解決方案,可構建專用于每個物聯網應用的硬件平臺。開發人員只需將 FiPy 板插入適當的擴展板,即可創建特定的硬件配置。對于不需要 LoRaWAN 或 Sigfox 連接的應用,開發人員可以改為使用 GPy 板。
插件軟件增強
對于原型開發而言,組合多個板來擴展整體硬件功能是常見而重要的功能。但在過去,基礎設計的硬件增強可能會在軟件方面帶來重大挑戰,因為開發人員要努力尋找和集成支持特定硬件配置所需的不同軟件驅動程序和中間件。由于能夠支持 MicroPython,Pycom 讓應用軟件開發變得非常簡單,就如同將插件板用于物聯網設備硬件一樣。
MicroPython 采用 Python 語言,利用面向硬件的支持來增強其功能。同時,MicroPython 消除了嵌入式系統中不需要的 Python 功能,增強了性能,同時減少了資源受限的嵌入式設計的存儲器空間占用。
與 Python 相同,MicroPython 讓開發人員只需導入一個模塊即可添加特定軟件功能。例如,開發人員只需加載 ADC 模塊和讀取值,即可對 FiPy 的集成 ADC 進行編程(列表 1)。
Copy
import machine
adc = machine.ADC() # create an ADC object
apin = adc.channel(pin=‘P16’) # create an analog pin on P16
val = apin() # read an analog value
列表 1:與 Python 相同,MicroPython 允許開發人員通過導入軟件模塊來增強其軟件功能,從而提供了一種簡單方法來添加硬件特定的功能,如從模數轉換器 (ADC) 讀取數據,如下所示。(代碼來源:Pycom)
正如開發人員可以輕松地通過擴展板來增強設計一樣,他們可以通過導入適當的模塊來增加補充支持。將無線板插入擴展板后,開發人員只需將相應的 MicroPython 模塊添加到其代碼中即可。
MicroPython 的編程模型讓開發人員能夠無縫地使用這些模塊來快速實現物聯網應用。與列表 1 所示的對 ADC 硬件的軟件支持相同,對硬件擴展(例如 Pysense)的軟件支持只需開發人員導入相應的模塊即可。除了一套完整的傳感器專用模塊,還提供了演示其在典型軟件應用中使用的示例軟件,可以隨時使用。例如,為了讀取 Pysense 的 SI7006A20 溫度和濕度傳感器,在實例化用于讀取傳感器的溫度值 (si.temperature()) 和濕度值 (si.humidity()) 的 SI7006A20 對象 (SI7006A20(py)) 之前,開發人員只需導入 Pysense 模塊和傳感器專用模塊(列表 2)。
Copy
from pysense import Pysense
from LIS2HH12 import LIS2HH12
from SI7006A20 import SI7006A20
from LTR329ALS01 import LTR329ALS01
from MPL3115A2 import MPL3115A2,ALTITUDE,PRESSURE
py = Pysense()
mp = MPL3115A2(py,mode=ALTITUDE) # Returns height in meters. Mode may also be set to PRESSURE, returning a value in Pascals
si = SI7006A20(py)
lt = LTR329ALS01(py)
li = LIS2HH12(py)
print(mp.temperature())
print(mp.altitude())
mpp = MPL3115A2(py,mode=PRESSURE) # Returns pressure in Pa. Mode may also be set to ALTITUDE, returning a value in meters
print(mpp.pressure())
print(si.temperature())
print(si.humidity())
print(lt.light())
print(li.acceleration())
print(li.roll())
print(li.pitch())
print(py.read_battery_voltage())
列表 2:開發人員可以學習 Pycom Pysense API 和相關軟件示例,以便使用 Pycom Pysense 硬件板中集成的傳感器特定 MicroPython 模塊。(代碼來源:Pycom)
由于采用了這種模塊化方法,實現無線連接同樣簡單。開發人員只需為所需的無線技術導入適當的模塊,以及用于 HTTPS 或 MQTT 等協議的其他模塊。除了這些無線通信模塊之外,Pycom 示例軟件還演示了開發人員如何快速建立 Wi-Fi 連接,并使用 MQTT 與 Adafruit IO 等基于云的服務進行交互(列表 3)。Adafruit IO 在原型開發免費服務計劃中提供,是簡單的云資源,設計用于創建物聯網數據流流程,包括輸入數據流、數據管理和分析。
Copy
from mqtt import MQTTClient
import machine
import time
from network import WLAN
def sub_cb(topic, msg):
print(“Received: “ + msg)
wlan = WLAN(mode=WLAN.STA)
wlan.connect(“yourwifinetwork”, auth=(WLAN.WPA2, “wifipassword”), timeout=5000)
while not wlan.isconnected():
machine.idle()
print(“Connected to Wifi\n”)
client = MQTTClient(“device_id”, “io.adafruit.com”,user=“your_username”, password=“your_api_key”, port=1883)
client.set_callback(sub_cb)
client.connect()
client.subscribe(topic=“youraccount/feeds/lights”)
while True:
print(“Sending ON”)
client.publish(topic=“youraccount/feeds/lights”, msg=“ON”)
time.sleep(1)
print(“Sending OFF”)
client.publish(topic=“youraccount/feeds/lights”, msg=“OFF”)
time.sleep(1)
列表 3:Pycom 的示例軟件演示了開發人員如何使用幾個簡單的 Wi-Fi 模塊調用(以黃色突出顯示),通過 MQTT 與基于云的資源(例如此處所示的 Adafruit IO)進行交互。(代碼來源:Pycom)
Pycom 多技術無線板與 MicroPython 相結合,為開發無線物聯網設計提供了強大的平臺,能夠動態響應不斷變化的連接環境。很多物聯網應用都要求隨時訪問傳入的數據流。但是,舉例來說,每當局域網發生故障,或者由于干擾或網絡事件導致本地 Wi-Fi 信號強度下降時,應用將無法訪問旨在通過 Wi-Fi LAN 與云進行交互的物聯網設備。但是,對于 Pycom 板,開發人員只需切換到另一個無線連接選項即可。
例如,要通過 LTE 蜂窩服務連接,開發人員只需使用 MicroPython LTE 模塊。相同的底層方法允許開發人員在 Wi-Fi 和 LTE 蜂窩連接之間進行切換,而無需更改構建來與主機交互或提供應用級別功能的更高級代碼。例如,要使用 LTE 連接,開發人員只需加載 LTE 模塊,并且實例化相應的 LTE 對象,然后連接到提供商服務。因此,開發人員只需稍作改動,即可在應用中切換到 LTE 連接(列表 4)。
Copy
from mqtt import MQTTClient
import machine
import time
from network import LTE
def sub_cb(topic, msg):
print(“Received: “ + msg)
lte = LTE()
lte.connect()
while not lte.isconnected():
machine.idle()
print(“Connected to LTE\n”)
client = MQTTClient(“device_id”, “io.adafruit.com”, user=“your_username”, password=“your_api_key”, port=1883)
client.set_callback(sub_cb)
client.connect()
client.subscribe(topic=“youraccount/feeds/lights”)
while True:
print(“Sending ON”)
client.publish(topic=“youraccount/feeds/lights”, msg=“ON”)
time.sleep(1)
print(“Sending OFF”)
client.publish(topic=“youraccount/feeds/lights”, msg=“OFF”)
time.sleep(1)
列表 4:Pycom 示例軟件演示了開發人員如何使用 LTE 連接(以藍色突出顯示)而不是 Wi-Fi(在列表 3 中以黃色突出顯示),執行與云資源交互的更高級操作。(代碼來源:Pycom)
同樣的常規方法也適用于將連接切換到藍牙、LoRaWAN 或 Sigfox,以響應變化的條件。因此,開發人員可以構建出能夠輕松支持各種無線連接技術的物聯網設備。當操作或功能要求需要切換到不同的連接選項時(甚至在運行時期間進行切換),開發人員就可以輕松實現所需的動態切換功能,以保持可用性或滿足不斷變化的性能要求。
總結
開發人員可以使用專門為支持多種無線技術(包括藍牙、Wi-Fi、LTE、LoRaWAN 和 Sigfox)而構建的 Pycom 板,快速滿足新興的無線連接要求。通過將這些板與基于 MicroPython 的軟件相結合,開發人員可以快速實現能夠響應不斷變化的無線連接要求的物聯網設備。
評論
查看更多