基于MicroPython软件相结合的无线设计方案

描述

物联网 (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)。

Copyimport machine adc = machine.ADC()             # create an ADC objectapin = adc.channel(pin='P16')   # create an analog pin on P16val = 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)。

Copyfrom pysense import Pysensefrom LIS2HH12 import LIS2HH12from SI7006A20 import SI7006A20from LTR329ALS01 import LTR329ALS01from 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 Pascalssi = 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 metersprint(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 在原型开发免费服务计划中提供,是简单的云资源,设计用于创建物联网数据流流程,包括输入数据流、数据管理和分析。

Copyfrom mqtt import MQTTClientimport machineimport timefrom 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)。

Copyfrom mqtt import MQTTClientimport machineimport timefrom 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 的软件相结合,开发人员可以快速实现能够响应不断变化的无线连接要求的物联网设备。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分