电子说
在电子设计领域,无线通信模块的选择对于项目的成功至关重要。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 公里。
逻辑引脚为微控制器的通用 I/O 引脚集,逻辑电压均为 3.3V,几乎所有引脚都可进行 PWM 输出,且都可作为中断输入。常见引脚功能如下:
由于 Feather 尺寸较小,并非所有引脚都能引出到扩展板,因此使用以下引脚控制无线电模块:
Feather 模块出厂时已进行全面测试,但未安装引脚,用户可根据需求选择不同的引脚选项进行组装。
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 连接器的 Feather Radio 板,需自行购买 uFL 连接器(http://adafru.it/1661),Feather RP2040 RFM 板已预装。还需 uFL 到 SMA 适配器(http://adafru.it/851)和匹配无线电频率的天线。焊接 uFL 连接器时,注意将其底部的两个大侧焊盘(接地)和一个小入口焊盘焊接到 Feather 底部。连接 uFL/SMA 适配器时要小心,避免撕裂 PCB 焊盘,连接后使用应力释放装置。
Feather 模块可通过两种方式供电:
模块提供多个电源引脚,包括 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 引脚仍会供电。
需注意,不要使用碱性或 NiMH 电池连接到电池端口,也不要使用 7.4V RC 电池,以免损坏模块。此外,不建议直接连接外部 3.3V 或 5V 电源,可能会导致意外行为或损坏模块。
首先,需要下载最新版本的 Arduino IDE,建议使用 1.8 或更高版本。
打开 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”等。
下载并运行 Adafruit 驱动安装程序,选择要安装的驱动,点击“安装”完成安装。
选择“示例” -> “基础” -> “Blink”示例代码,点击“上传”,若上传成功,可看到 LED 闪烁。
若要使用 ARef 引脚进行非 3.3V 模拟参考,使用 analogReference(AR_EXTERNAL) 代码。
对于 M0 & M4 板,使用 pinMode(pin, INPUT_PULLUP) 代替旧的 pinMode(pin, INPUT) 和 digitalWrite(pin, HIGH) 方式。
在 Adafruit M0/M4 核心中,Serial 可直接用于 USB 通信。若使用官方 Arduino SAMD 核心,需使用 SerialUSB 代替 Serial。
Feather M0 上的某些引脚可进行 PWM 输出,但部分引脚(如模拟引脚 A5)无法进行 PWM。同时,在使用 analogWrite() 时,需注意其 PWM 范围与 AVR 不同。
若代码中使用了 M0 核心不支持的库,可使用 #ifdef 进行条件编译,避免编译错误。
对于 M0/M4 板,需双击复位按钮启动引导加载程序,进入引导加载程序模式后,红色 LED 会闪烁。
在 32 位平台上,避免直接进行变量类型转换,可使用 memcpy() 函数进行数据复制。
M0 库不支持完整的浮点转换,可参考相关线程找到可用的 dtostrf 函数。
可使用以下函数监测可用 RAM:
extern "C" char *sbrk(int i);
int FreeRam () {
char stack_dummy = 0;
return &stack_dummy - sbrk(0);
}
在 ARM 平台上,在变量名前添加 const 可将变量或字符串存储在 FLASH 中。
在 Arduino 开发板管理器的 Adafruit SAMD Boards 包版本 1.4.0 及以上,可通过“工具”菜单调整 M4 设备的性能选项,如 CPU 速度(超频)、优化、缓存、Max SPI 和 Max QSPI 等。但这些调整可能会带来不确定性,若遇到问题,可选择默认性能设置并重新上传代码。
建议使用 AirSpayce 的 Radiohead 库进行无线电通信,该库支持多种无线电模块。
可从 GitHub 手动下载 RadioHead 库,或点击按钮下载为 zip 文件。解压后将 RadioHead 文件夹放置在 arduinosketchfolder/libraries/ 文件夹中,重启 Arduino IDE。
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 和 Adafruit CircuitPython RFM9x 模块时,需注意以下设计限制:
将 RFM9x 扩展板连接到电路板时,注意 G0/中断线无需连接。以 Feather M0 为例,连接方式如下:
若使用 Feather M0 RFM9x 并安装了 CircuitPython 6.0 或更高版本,无需安装库模块。若使用较旧版本,需从 Adafruit 的 CircuitPython 库捆绑包中安装 adafruit_rfm9x.mpy 和 adafruit_bus_device 库。
在 CircuitPython 的 REPL 中,可按以下步骤初始化并使用无线电:
import board
import busio
import digitalio
# 初始化 SPI 连接
全部0条评论
快来发表一下你的评论吧 !