Adafruit Feather M0 Radio with LoRa Radio Module:打造灵活无线通信解决方案

电子说

1.4w人已加入

描述

Adafruit Feather M0 Radio with LoRa Radio Module:打造灵活无线通信解决方案

在电子设计领域,无线通信模块的选择对于项目的成功至关重要。Adafruit Feather M0 Radio with LoRa Radio Module 以其独特的特性和丰富的功能,为工程师们提供了一个强大而灵活的无线通信解决方案。本文将深入介绍这款模块的各个方面,包括其概述、引脚布局、组装、电源管理、Arduino IDE 配置、代码适配以及无线电使用等内容。

文件下载:3178.pdf

一、模块概述

Adafruit Feather M0 RFM95 LoRa Radio 是一款集成了长距离(LoRa)数据包无线电收发器的微控制器,内置 USB 和电池充电功能。其核心采用 ATSAMD21G18 ARM Cortex M0 处理器,时钟频率为 48 MHz,逻辑电压为 3.3V,拥有 256K 的 FLASH 和 32K 的 RAM。该模块尺寸小巧,仅 2.0" x 0.9" x 0.3"(51mm x 23mm x 8mm),重量仅 5.8 克,非常适合便携式项目。

此外,它还具备丰富的接口和功能,如 20 个 GPIO 引脚、硬件串口、硬件 I2C 和 SPI 支持、8 个 PWM 引脚、10 个模拟输入和 1 个模拟输出等。同时,模块还内置了 100mA 锂聚合物充电器和充电状态指示灯 LED,方便用户使用和监测电池状态。

这款 LoRa 无线电模块使用 RFM9x LoRa 868/915 MHz 无线电模块,适用于小数据包传输,在需要比 2.4 GHz 更远传输距离的场景中表现出色。其功率输出范围为 +5 至 +20 dBm,最高可达 100 mW,睡眠模式下功耗约为 300uA,+20dBm 发射时峰值电流约为 120mA,主动监听时约为 40mA。在默认库设置下,使用线四分之一波天线,视距传输距离可达 1.2 英里/2 公里,通过调整设置和使用定向天线,传输距离可达 20 公里。

二、引脚布局

(一)电源引脚

  • GND:所有电源和逻辑的公共接地端。
  • BAT:连接可选锂聚合物电池的 JST 插孔的正电压。
  • USB:连接微 USB 插孔时的正电压。
  • EN:3.3V 稳压器的使能引脚,上拉,接地可禁用 3.3V 稳压器。
  • 3V:3.3V 稳压器的输出,可提供 500mA 峰值电流。

(二)逻辑引脚

逻辑引脚为微控制器的通用 I/O 引脚集,逻辑电压均为 3.3V,几乎所有引脚都可进行 PWM 输出,且都可作为中断输入。常见引脚功能如下:

  • #0 / RX:GPIO #0,也是 Serial1(硬件 UART)的接收(输入)引脚,也可作为模拟输入。
  • #1 / TX:GPIO #1,也是 Serial1 的发送(输出)引脚,也可作为模拟输入。
  • #20 / SDA:GPIO #20,也是 I2C(Wire)数据引脚,默认无上拉电阻,使用 I2C 时可能需要 2.2K - 10K 上拉电阻。
  • #21 / SCL:GPIO #21,也是 I2C(Wire)时钟引脚,默认无上拉电阻,使用 I2C 时可能需要 2.2K - 10K 上拉电阻。
  • A0:该引脚既是模拟输入 A0,也是具有 DAC(数模转换器)的模拟输出引脚,可将原始电压设置为 0 至 3.3V 之间的任意值。

(三)RFM/SemTech 无线电模块引脚

由于 Feather 尺寸较小,并非所有引脚都能引出到扩展板,因此使用以下引脚控制无线电模块:

  • #8:用作无线电 CS(芯片选择)引脚。
  • #3:用作无线电 GPIO0 / IRQ(中断请求)引脚。
  • #4:用作无线电复位引脚。

(四)其他引脚

  • RST:复位引脚,接地可手动复位 AVR 并手动启动引导加载程序。
  • ARef:模拟参考引脚,通常参考电压与芯片逻辑电压相同(3.3V),若需要替代模拟参考,可连接到该引脚并在固件中选择外部 AREF,但电压不能高于 3.3V。

三、组装

Feather 模块出厂时已进行全面测试,但未安装引脚,用户可根据需求选择不同的引脚选项进行组装。

(一)引脚选项

  • 普通公引脚:可将 Feather 插入无焊面包板。
  • 插座母引脚:虽不能插入面包板,但便于连接 FeatherWing。
  • “堆叠引脚”:兼具插入无焊面包板和连接 FeatherWing 的能力,但体积稍大。

(二)组装步骤

1. 焊接普通公引脚

  • 准备引脚条:必要时将引脚条裁剪至合适长度,将其插入面包板,长引脚朝下,便于焊接。
  • 安装扩展板:将扩展板放在引脚上,使短引脚穿过扩展板焊盘。
  • 焊接:确保焊接所有引脚,以实现可靠的电气连接。

2. 焊接母引脚

  • 固定引脚:使用胶带将插座固定在适当位置,防止翻转电路板时引脚掉落。
  • 定位焊接:翻转电路板后,在每个引脚条上焊接一两个点,将引脚固定到位。
  • 焊接:确保焊接所有引脚,以实现可靠的电气连接。

四、天线选项

Feather Radio 模块没有内置天线,用户可选择以下两种天线进行连接:

(一)线天线

线天线,即“四分之一波鞭状天线”,成本低且性能良好。只需将导线裁剪至合适长度,433 MHz 对应 6.5 英寸(16.5 cm),868 MHz 对应 3.25 英寸(8.2 cm),915 MHz 对应 3 英寸(7.8 cm)。将导线末端剥去 1 - 2 毫米,镀锡后焊接到 Feather 最右侧的 ANT 焊盘上即可。

(二)uFL 天线

若需要外部天线,对于未安装表面贴装 uFL 连接器的 Feather Radio 板,需自行购买 uFL 连接器(http://adafru.it/1661),Feather RP2040 RFM 板已预装。还需 uFL 到 SMA 适配器(http://adafru.it/851)和匹配无线电频率的天线。焊接 uFL 连接器时,注意将其底部的两个大侧焊盘(接地)和一个小入口焊盘焊接到 Feather 底部。连接 uFL/SMA 适配器时要小心,避免撕裂 PCB 焊盘,连接后使用应力释放装置。

五、电源管理

(一)电池与 USB 电源

Feather 模块可通过两种方式供电:

  • USB 电缆:插入 USB 插孔,模块将 5V USB 电压调节至 3.3V。
  • 锂聚合物(LiPo/LiPoly)或锂离子(LiIon)电池:连接到 JST 插孔,模块可使用可充电电池供电。当 USB 供电时,模块会自动切换到 USB 电源,并开始为电池充电(若电池已连接)。

(二)电源供应

模块提供多个电源引脚,包括 BAT 引脚(连接锂聚合物 JST 连接器)、USB 引脚(连接 USB 时的 +5V)和 3V 引脚(3.3V 稳压器输出)。3.3V 稳压器峰值电流为 500mA,但不能连续从 5V 获取 500mA 电流,否则会导致稳压器过热。

(三)电池测量

为方便监测电池电压,模块在 BAT 引脚连接了一个双 100K 电阻分压器,并连接到 D9(模拟 #7 A7)。通过读取该引脚电压并乘以 2,即可得到电池电压。示例代码如下:

#define VBATPIN A7
float measuredvbat = analogRead(VBATPIN);
measuredvbat *= 2; // 恢复实际电压
measuredvbat *= 3.3; // 乘以 3.3V 参考电压
measuredvbat /= 1024; // 转换为电压
Serial.print("VBat: ");
Serial.println(measuredvbat);

(四)使能引脚

若要关闭 3.3V 稳压器,可将 EN 引脚接地,此时 BAT 和 USB 引脚仍会供电。

(五)替代电源选项

  • 永久安装:使用 5V 1A USB 墙式适配器,通过 USB 电缆提供可靠电源。
  • 移动使用:使用 USB 电池组。
  • 高电压电源:使用 5V 降压转换器,并连接到 USB 电缆的 5V 和 GND 输入。

需注意,不要使用碱性或 NiMH 电池连接到电池端口,也不要使用 7.4V RC 电池,以免损坏模块。此外,不建议直接连接外部 3.3V 或 5V 电源,可能会导致意外行为或损坏模块。

六、Arduino IDE 设置

(一)下载 Arduino IDE

首先,需要下载最新版本的 Arduino IDE,建议使用 1.8 或更高版本。

(二)添加 URL

打开 Arduino IDE,导航到“首选项”菜单,在“附加开发板管理器网址”选项中添加以下 URL:

package_adafruit_index.json https://adafruit.github.io/arduino-board-index/

添加后,点击“确定”保存新的偏好设置。

(三)安装板支持包

打开“工具” -> “开发板” -> “开发板管理器”,选择“全部”类别,搜索并安装“Arduino SAMD Boards”(版本 1.6.11 或更高)和“Adafruit SAMD”包。安装完成后,建议重启 Arduino IDE。

(四)选择开发板

在“工具” -> “开发板”菜单中选择匹配的开发板,如“Feather M0”、“Feather M0 Express”等。

(五)安装驱动(仅适用于 Windows 7 & 8)

下载并运行 Adafruit 驱动安装程序,选择要安装的驱动,点击“安装”完成安装。

(六)上传示例代码

选择“示例” -> “基础” -> “Blink”示例代码,点击“上传”,若上传成功,可看到 LED 闪烁。

七、代码适配

(一)模拟参考

若要使用 ARef 引脚进行非 3.3V 模拟参考,使用 analogReference(AR_EXTERNAL) 代码。

(二)引脚输出与上拉

对于 M0 & M4 板,使用 pinMode(pin, INPUT_PULLUP) 代替旧的 pinMode(pin, INPUT)digitalWrite(pin, HIGH) 方式。

(三)串口与 SerialUSB

在 Adafruit M0/M4 核心中,Serial 可直接用于 USB 通信。若使用官方 Arduino SAMD 核心,需使用 SerialUSB 代替 Serial

(四)模拟写入 / PWM

Feather M0 上的某些引脚可进行 PWM 输出,但部分引脚(如模拟引脚 A5)无法进行 PWM。同时,在使用 analogWrite() 时,需注意其 PWM 范围与 AVR 不同。

(五)缺失头文件

若代码中使用了 M0 核心不支持的库,可使用 #ifdef 进行条件编译,避免编译错误。

(六)引导加载程序启动

对于 M0/M4 板,需双击复位按钮启动引导加载程序,进入引导加载程序模式后,红色 LED 会闪烁。

(七)对齐内存访问

在 32 位平台上,避免直接进行变量类型转换,可使用 memcpy() 函数进行数据复制。

(八)浮点转换

M0 库不支持完整的浮点转换,可参考相关线程找到可用的 dtostrf 函数。

(九)可用 RAM 监测

可使用以下函数监测可用 RAM:

extern "C" char *sbrk(int i);
int FreeRam () {
  char stack_dummy = 0;
  return &stack_dummy - sbrk(0);
}

(十)数据存储在 FLASH

在 ARM 平台上,在变量名前添加 const 可将变量或字符串存储在 FLASH 中。

(十一)M4 性能选项

在 Arduino 开发板管理器的 Adafruit SAMD Boards 包版本 1.4.0 及以上,可通过“工具”菜单调整 M4 设备的性能选项,如 CPU 速度(超频)、优化、缓存、Max SPI 和 Max QSPI 等。但这些调整可能会带来不确定性,若遇到问题,可选择默认性能设置并重新上传代码。

八、使用 RFM9X 无线电

(一)Arduino 库

建议使用 AirSpayce 的 Radiohead 库进行无线电通信,该库支持多种无线电模块。

(二)RadioHead RFM9x 库示例

1. 下载库

可从 GitHub 手动下载 RadioHead 库,或点击按钮下载为 zip 文件。解压后将 RadioHead 文件夹放置在 arduinosketchfolder/libraries/ 文件夹中,重启 Arduino IDE。

2. 基本 RX & TX 示例

  • 发送器示例代码:打开 RadioHead -> feather -> Feather9x_TX 示例代码,根据使用的芯片组和布线情况,注释或取消注释相应的引脚定义。设置 RF95_FREQ 以匹配无线电硬件的频率,上传代码后,发送器将每秒发送一个小数据包。
  • 接收器示例代码:打开 RadioHead -> feather -> Feather9x_RX 示例代码,确保 RF95_FREQ 值与发送器匹配,同样根据芯片组和布线情况调整引脚定义。上传代码后,接收器将接收并确认小数据包,并发送回复。

(三)引脚布局

不同类型的 Feather 板(如 Feather 32u4、Feather M0、RP2040 Feathers 等)的 RFM9X 引脚布局不同,需根据实际情况进行设置。

(四)频率设置

可通过设置 RF95_FREQ 来调整无线电通信的频率,不同国家/ITU 区域有不同的 ISM 频段,需确保使用合法的频率。

(五)设置与初始化

setup() 函数中,设置串口控制台并对无线电进行硬复位,然后调用 init() 函数初始化库,并设置频率和输出功率。

(六)传输与接收代码

  • 传输代码:在 loop() 函数中,等待 1 秒后发送数据包,调用 send() 函数发送数据,并使用 waitPacketSent() 等待传输完成。
  • 接收代码:在 loop() 函数中,使用 available() 函数检查是否有数据包到达,若有则使用 recv() 函数接收数据,并打印接收到的信息和 RSSI 值,然后发送回复。

九、CircuitPython for RFM9x LoRa

(一)设计考虑

使用 CircuitPython 和 Adafruit CircuitPython RFM9x 模块时,需注意以下设计限制:

  • 每次只能发送和接收最多 252 字节的数据包。
  • 纯 Python 代码接收数据包是“尽力而为”的,无中断支持,需及时处理接收到的数据包。
  • 发送和接收数据包会阻塞 Python 代码,设计应用时应将无线电使用作为主要场景,减少后台任务。
  • 模块默认配置与 RadioHead RFM95 Arduino 库兼容,若需不同调制或设置,需自行配置。
  • 模块不支持加密和同步字,若需要需在应用代码中自行实现。

(二)布线

将 RFM9x 扩展板连接到电路板时,注意 G0/中断线无需连接。以 Feather M0 为例,连接方式如下:

  • 电路板 3V 连接到无线电 VIN
  • 电路板 GND 连接到无线电 GND
  • 电路板 SCK 连接到无线电 SCK
  • 电路板 MOSI 连接到无线电 MOSI
  • 电路板 MISO 连接到无线电 MISO
  • 电路板 D5 连接到无线电 CS(或其他数字 I/O 引脚)
  • 电路板 D6 连接到无线电 RST(或其他数字 I/O 引脚)

(三)模块安装

若使用 Feather M0 RFM9x 并安装了 CircuitPython 6.0 或更高版本,无需安装库模块。若使用较旧版本,需从 Adafruit 的 CircuitPython 库捆绑包中安装 adafruit_rfm9x.mpyadafruit_bus_device 库。

(四)使用方法

在 CircuitPython 的 REPL 中,可按以下步骤初始化并使用无线电:


import board
import busio
import digitalio

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

全部0条评论

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

×
20
完善资料,
赚取积分