如何使用RP2040设计和部署LoRa物联网传感器节点
我生活在一个农业国家的中心地带。这里的土壤承载着我们经济过去与未来的动人故事。如果你对数字感兴趣,这里有几点数据:农业贡献了我国GDP的约33%,并提供了超过40%的就业机会。我的项目初衷并非追求创新,但如果最终实现了创新,我也愿意接受。真正推动我前行的是改善现状的迫切需求,哪怕只是微小的进步。美国国际开发署(USAID)曾发表文章指出,近年来农业生产率持续停滞不前。目前的耕作方式相当落后,如果我们继续依赖这些传统方法来提高生产效率,最终可能也会被淘汰。
当前农民面临的最大挑战之一,就是他们与能够提升产量的技术之间存在的鸿沟。本项目旨在消除这一差距。我设计了一个物联网传感器节点,可部署到农场中,收集农民所需的重要参数,并通过分析这些数据来最大化生产效率。为实现这一目标,我需要解决以下几个挑战:
- 节点必须由电池供电,并支持太阳能充电;
- 传感器节点需具备成本效益,因为需要部署多个节点;
- 能够通过低功耗广域网(LPWAN)向云端传输信息;
- 可与工业级传感器进行通信。
为了解决这四个主要问题,我首先绘制了一个方框图,以概述电子系统的整体结构。
通常来说,目标是让电路板的核心包含一个高性能、低功耗、低成本的微控制器,它能够通过RS485协议支持工业级传感器,同时配备一个低功耗广域网模块和电源管理电路,以为MCU及连接的各类外设供电。
在本项目中,我将详细介绍如何在Green Dot Board上实现这一目标。你可以前往项目页面,克隆或 fork 该项目以获得编辑权限。
1:电源管理:Brave板
绿色圆点板最重要的特性之一是电源管理。根据系统核心要求,该设备能够长期自主运行而无需担心电力问题。因此,我决定首先设计一个电源管理电路,并确保其正常工作,以降低整个系统的风险。
大多数可连接到该系统的传感器需要3.3V、5V或12V的电压。为此,我设计了能够提供这些不同电压的电源管理电路。你可以在此处查看勇敢电源管理电路的设计。该板可通过锂聚合物电池(LiPo)、4V至6V的太阳能板,或Micro USB供电。从这些输入中,有一组专用组件用于生成并调节上述各输出电压。
a) 12V和5V电源轨
对于12V和5V电源轨,我采用了高效率的MT3608L 1.2MHz升压转换器。通过使用分压电路来调整器件的输出电压,并采用SPDT开关在12V和5V输出之间进行切换。
输出电压的设定可通过以下公式计算:
Vout = Vref × (1 + R1/R2),其中Vref = 0.6V,如数据手册所示
电感器的推荐值为4.7μH至22μH,而稳压器的高开关频率使我能够在此选用小型元件。
对于输入和输出电容,使用22μF陶瓷电容,其介质类型为X5R或X7R。
b) 3.3V电源轨
对于3.3V电源轨,我首先采用RT8059转换器,这是一种高效脉宽调制(PWM)降压DC/DC转换器,可在2.8V至5.5V的宽输入电压范围内提供1A输出电流。这非常符合我的需求,因为所使用的锂聚合物电池标称电压为3.7V,充满电时最高可达4.2V,放电最低约为3.0V。
可通过电压分压电路设置输出电压,其计算公式与之前所见相同。
在选择电感器时,可使用以下公式估算电感器的数值:
其中,纹波电流可近似为最大输出电流的30%至40%。
随后,我采用了一款具有可编程电流限制功能的超低损耗电源分配开关,以保护电源免受过流和短路的影响。电流限制通过将电阻Rset从ISET引脚连接到GND来实现。要获得所需的Rset值,可使用以下公式:
Rset = 6800 / 电流(A)
c) 充电电路
为了给电池充电,我使用了CN3063,这是一种适用于单节锂离子电池和锂聚合物电池的恒流/恒压线性充电器。该器件非常适合太阳能供电应用,同时也支持USB接口规范。其调节电压预设为4.2V,精度为1%,但也可通过电阻进行调整。该设备可接受4.4V至6V的输入电压,因此需要使用一个功率约为5W的小型太阳能板。
此外,这款器件还有一些其他有趣的功能,尚未提及,包括:
可编程充电电流:通过外接电阻,连续充电电流可编程至600mA,满足多样化的充电需求。
自适应充电:芯片内置的8位ADC根据输入电源的输出能力自动调节充电电流,适用于多种使用场景。
状态指示:开漏输出引脚用于显示充电器状态,便于实时监控充电过程。
充电电流通过将Riset电阻从ISET引脚连接至GND来设定。在恒定充电电流模式下,ISET引脚电压被稳定为2V。
I = (Vset / Rset) × 900
我使用两个二极管将USB和太阳能板的电流分别导向充电电路。
针对V2版本进行了改进,因此使用MCU读取该数值将非常实用。
我还意识到,在某些情况下,我会同时连接太阳能板和USB到主控板上。虽然不会对电路造成任何破坏,但我会使用MOSFET实现一个自动开关,当太阳能板和USB同时连接时,自动断开太阳能板供电。
2:无线连接
在无线连接方面,LoRaWAN 是一个显而易见的选择。我不会深入讲解 LoRaWAN 的理论原理,目前只需说明一点:LoRaWAN 是一种低功耗、广域网络协议,其基础是 LoRa 无线电调制技术。它的主要功能是为设备与互联网建立无线连接,例如让您的运动传感器与报警系统实现直接通信,并在检测到异常运动时及时通知您。
LoRaWAN 具备多项优势,使其成为物联网应用的理想选择:
•远距离通信:顾名思义,LoRaWAN 提供长距离通信能力,因此非常适合在大型农场末端部署传感器节点。
•低功耗设计:LoRaWAN 采用低功耗设计,使物联网设备能够节省能源,依靠电池长时间运行。
•低数据速率:尽管不适用于高带宽应用,但LoRaWAN的低数据速率非常适合定期传输小数据包。这使其适用于传感器网络和监控系统等仅需周期性更新的应用场景。
我选择使用SEEED Studio的LoRa-E5模块,因为它内置了AT命令固件,只需几个简单的指令即可轻松创建原型或应用程序。然而,将模块焊接到电路板上可能是整个Green Dot开发过程中最具挑战性的部分。该模块体积较小,我认为自己没有合适的工具来完成这种手工焊接工作。直到我拿到焊锡膏和更优质的焊铁尖端后,才终于完成了焊接任务。
围绕该模块进行设计相当简单。我将UART和NRST引脚连接到主机MCU,用于发送AT命令。此外,我还把Pin24连接到一个触摸按钮,因为模块的接地会强制其进入Boot升级模式。由于该模块工作电压为3.3V,因此我也确保提供了相应的电源。
a) 注册我们的LoRa模块
要将设备注册到LoRaWAN平台,您可以选择两种方式之一:个性化激活(ABP)或空中激活(OTAA)。两者的主要区别在于,ABP操作简单且快速,而OTAA通过动态密钥交换提供更强的安全性。因此,在本例中我们将使用OTAA来注册设备。
在LoRaWAN网络中使用OTAA(空中激活)注册设备时,通常需要以下信息:
•设备EUI(扩展唯一标识符):设备的唯一标识符,通常是烧录在设备中的硬件特定标识。该标识可生成并写入设备,但在此我们直接读取其值。
•应用EUI(AppEUI):应用程序的唯一标识符。这是OTAA所必需的,由网络服务提供商分配给应用程序,用于将设备与特定应用关联。您可以通过LoRaWAN网络服务提供商获取,也可以自行生成。它是一个64位(8字节)的值。
•应用密钥(AppKey):设备与网络服务器之间共享的秘密密钥。该密钥在OTAA过程中用于建立安全连接。AppKey通常应保密,仅由设备和网络服务器知晓。它是一个128位(16字节)的值。同样,您也可以使用随机值作为AppKey。
本次演示我将使用Loriot,因为它对我而言已可直接获取,但相同的概念也适用于其他类似平台,例如The Things Network(TTN)。第一步是通过提供生成的密钥和设备名称来注册设备。
接下来需要确保这些相同的密钥被写入LoRa模块,具体操作如下所示。
3:选择微控制器
为物联网传感器节点的成功,选择合适的微控制器至关重要。考虑到低成本、低功耗、高效率以及开发环境便捷等要求,我决定采用Seeed Studio的XIAO RP2040。这款开发板搭载了Raspberry Pi的RP2040微控制器,为微控制器领域带来了高性能、低成本和易用性。
Seeed Studio网站上列出的一些功能包括:
•高性能:搭载Raspberry Pi 2040芯片,双核处理器最高可达133 MHz,配备264KB SRAM和2MB内置闪存。
•超小型设计:尺寸为21 x 17.5mm,Seeed Studio XIAO系列经典外形,适用于可穿戴设备。
•多种开发接口:2个按钮、11个数字/4个模拟引脚、1个I2C接口、1个UART端口、1个SPI端口以及1个SWD连接焊盘接口。
•支持多种开发平台:兼容Arduino、MicroPython、CircuitPython开发,适合初学者,满足电子爱好者需求。
该SEEED模块内置RGB LED,用于直观显示系统状态。
传感器接口
在与传感器交互方面,绿色圆点板可连接UART、I2C和RS485传感器。连接块上还设有两根引脚,可通过RP2040作为可编程的IO引脚使用。
对于RS485,我使用了SP3485,这是一种+3.3V低功耗半双工RS485收发器,数据速率可达10Mbps。RS485标准支持多设备共用同一总线(多点接入)以及长距离布线,并具有出色的抗干扰能力。可连接的传感器包括以下几种:
•土壤NPK传感器
•工业级土壤pH传感器
•工业级土壤湿度、温度及电导率(EC)传感器
RS3485周边的辅助组件包括一个旁路电容、RO线路上的上拉电阻,以及在A、B绞合对电缆末端添加一个120欧姆的终端电阻。我采用120欧姆电阻,因为RS485所使用的绞合对电缆被定义为具有120欧姆的特征阻抗。因此,在RS485传输线末端加入120欧姆电阻后,信号将被电阻衰减,而非反射回总线。
最后一步是将信号路由至我的微控制器。
注意:在测试过程中,我注意到一个你可能已经从该电路图中发现的问题,即我忘记将SP3485的使能引脚连接到我的微控制器上。这一点将在我的第二个版本中进行修正。
固件
我编写了一段简单的 MicroPython 代码,用于向云端发送数据作为概念验证。代码可在我的 GitHub 个人主页上找到。我首先编写了一些与 LoRa 模块交互的简单函数,然后利用这些函数加入网络并发送数据到云端。
在主文件中,我先导入所需的库,并定义了固件参数。
接着进入一个无限循环:首先检查是否是首次运行该代码,如果是,则加入网络;否则继续执行后续代码,先读取传感器数值,再将数值转换为十六进制格式进行传输。数据传输完成后,系统会休眠一段预设的上行链路间隔时间。
最终的设置如下图所示。我正考虑制作一个3D打印的外壳,以便让所有设备井然有序地摆放。
结语与最后说明
以上就是大家所看到的“绿色圆点板”(Green Dot Board)。从一开始,这个项目就让我感到无比愉快,希望你们也能有同样的感受。下面是一张示意图,展示了数据如何被接收并上传至云端。接下来的步骤是构建一个自定义仪表板来显示所有这些信息,或者使用像Datacake这样的平台,它能与Loriot或TTN无缝集成以实现数据可视化。
我将逐步解决过程中出现的一些问题,并持续更新设计。在进行更新时,您会收到提示通知,您可以选择接收或拒绝。接受更新只需点击“接受”按钮即可。
本文编译自hackster.io





