带你飞越LoRa世界--Feather 32u4 LoRa开发板体验
扫描二维码
随时随地手机看文章
欢迎加入LoRa qq交流群:546600408。
Adafruit想必大家不陌生,其创立者是MIT的大鳄Limor "Ladyada" Fried,初衷是创建一个最佳的在线电子学习站点并为全球创客提供最佳的学习产品。从2005年到现在,Adafruit已经推出了无数的开发板,深受全球电子爱好者的欢迎。
"From what we get, we can make a living; what we give, however, makes a life" - Arthur Ashe
今天给大家介绍的Feather 32u4 LoRa开发板是Feather家族中的一员。从名字可以看出,这是一款用于学习及评估LoRa技术的开发板。相比LoRa在国外火爆的局面,国内似乎还没有掀起太大的波澜,不过技术这东西,说火爆就火爆了,有时间还是了解下也好。
Adafruit的Feather系列开发板,正如其名字所宣称那样,轻薄、小巧,最重要的是,它能带你飞起来。
Feather 32u4 LoRa开发板主要用于体验LoRa技术,除了板载的RFM9x LoRa模块之外,开发板上还集成了一块Atmega32u4微控制器,用于与LoRa通信。Feather 32u4 LoRa提供了几种LoRa制式模块供用户选择,用户可以根据实际情况选择433或868/915MHz的无线模块。同其它2.4GHz的无线技术如BLE相比,LoRa在通信距离上具有更强的优势,同时其低功耗特性使得完全可以使用电池来对LoRa设备进行供电。
Feather 32u4 LoRa的体验相当小巧,其三维约为51mm x 23mm x 8mm,默认没有焊接排针,用户可以根据需要选择是否焊接,开发板内很贴心的附赠了排针,开发板的重量大约5.5g,拿在手里轻如无物,不愧Feather之名。
Feather 32u4 LoRa的主要特性列举如下
• 板载ATmega32u4微控制器,@8MHz运行频率
• 3.3V 工作电压,最高不超过500mA电流
• USB接口,支持串口调试
• SX1272 LoRa模块,使用SPI接口与MCU通信
• +5 to +20 dBm,高达100mW输出能力
• 功耗极低,睡眠是仅300uA电流,+20dBm峰值传输电流约120mA,正常情况下约40mA
• 提供两针DC电池供电接口
从上图也可以看出,开发板主要包括USB、DC电池接口,MCU及LoRa模块,再加上GPIO接口,就是开发板的全部。[!--empirenews.page--]
20个GPIO接口足以满足一些简单的外设通信需求,通过GPIO复用,开发板还提供了I2C、SPI、PWM及UART等常用的的通信或控制功能,下图是部分外设接口的功能描述,完整的GPIO功能及复用请参考官方文档
值得注意的是LoRa模块默认并没有提供天线,最简单的办法就是使用一根电线来充当天线,在一般实验用的情况下效果尚可。如果想将开发板放到盒子里的话,就需要使用uFL天线及SMA接头来连接以达到更好的效果。
前面也提到了RFM9x LoRa模块提供了433、868/915等频率供用户选择,此次测试用到的模块具体型号为RFM69HCW,是一款支持900MHz频段的模块,在实际通信时需要注意这一点。
开发板使用的主控是ATmega32u4,开发环境当然是首选Arduino了,不过鉴于Arduino有点朴素,另外也没有代码提示及补全功能。这里准备使用微软的Visual Studio Code(VSC)来作为开发IDE。不过VSC并不是一个IDE,它只是一个编辑器,所以要作一些必要的配置工作。配置工作的基本步骤如下
下载并配置Arduino,如板级BSP支持,串口配置等
下载并配置VSC,添加Arduino Extention,使得VSC能感知Arduino的存在
配置代码补全及提示功能
LoRa软件库的配置
VSC只是一个编辑器,使用Arduino Extension来管理Arduino相关的操作,如开发板类型的选择,工具链的支持及串口的配置,第一步还是老老实实把Arduino下载下来并配置好,安装Arduino的过程就不赘述,注意一点,Arduino有两种类型的安装包,一种是传统的EXE文件,双击就可以安装;另一种是ZIP格式的包,下载解压后就可以使用。
确保Arduino安装正常后,开始添加适合32u4 LoRa的板级BSP软件,主要包含相关的底层CPP文件及一些示例代码。在Arduino的Preferences对话框中添加如下URL,以便让Arduino能找到BSP的位置,如下
在Arduino的Boards Manager对话框中选择并安装适合32u4 LoRa的BSP,如下
这个过程需要的时间可能会比较长,视网络速度而定。
现在应该能在Arduino在找到Adafruit Feather 32u4开发板了,这时候把32u4 LoRa开发板与PC连接,同时还应该能够看到开发板对应的串口。如果没有发现串口,可能还需要安装相应的串口驱动。[!--empirenews.page--]
接下来准备VSC。
默认安装的VSC是不支持Arduino的,需要先安装Arduino Extension,安装Extension的步骤如下图
在Extension搜索框中输入Arduino,会找到好几个关于Arduino的扩展插件,这里选择微软官方提供的Arduino插件即可。安装好插件之后需要点击Reload按钮以加载该插件。
现在Arduino Extension准备就绪,还需要配置一下,让Arduino Extension感知到Arduino的位置,如下
这里最重要的就是指定Arduino所在的位置,如图中所示,根据实际情况调整Arduino所在的位置。
接下来使用GTAGS来让VSC具备代码提示及代码补全功能,具体设置可以参考"告别简陋,让Arduino开发变得高大上——MS VSCode体验"一文,/evm/trick/201709/737533.htm。
最后一步是准备LoRa模块相关的支持,从https://cdn-learn.adafruit.com/assets/assets/000/035/106/original/RadioHead-1.62.zip?1472068723这里下载Radio支持包,使用Arduino的Sketch/Add File...菜单命令导入下载好的压缩包文件。验证是否添加好了相关的支持,可以打开File/Example选项,查看是否有如下的示例代码文件
万事俱备,只欠东风。
LoRa(Long Rang, low Power)是构建IoT网络中非常重要的技术,主要特性有三:远距离、低功耗、大容量。相比于其它的无线通信技术来说,LoRa更适合构建物理覆盖范围非常的大的物联网,低功能特性在需要使用电池供电的场合尤其适用。
Feather 32u4 LoRa板载的LoRa模块型号为RFM69HCW,实际使用的是SX1272芯片,从物理层实现了LoRa的调制及解调功能。RFM69HCW通过SPI接口与ATmega32u4通信,实现基本的数据通信功能,其硬件连接如下
LoRa通信可以使用简单的点对点通信模式,也可以使用类似WiFi那种星形连接拓扑。简单的点对点通信模式只需要两个LoRa结点就可以通信,而更复杂的星形拓扑或网状拓扑通信模式,则需要一个LoRa网关。只是目前的LoRa一般价格不菲。典型的LoRa通信模式如下
对于一个典型的IoT通信模型来说,传感器收集到的信息,一般通过网关集中、筛选后再上传到服务器;除了数据的上行,也可以通过服务器下发控制指令,实现远程控制。
结点与网关交换信息的不同方式,又可以分为三类:
• Class A: 低功耗模式,必须实现
• Class B: 低延迟,可选实现
• Class C: 无延迟,可选实现,功耗较大
先看一段简单的硬件初始化代码,如下
/* for feather32u4 */
#define RFM95_CS 8
#define RFM95_RST 4
#define RFM95_INT 7
#define RF95_FREQ 915.0
// Singleton instance of the radio driver
//RH_RF95 rf95;
RH_RF95 rf95(8, 7); // Rocket Scream Mini Ultra Pro with the RFM95W
首先指定MCU与LoRa模块通信的一些基本配置,如片选、复位及中断引脚,这里分别对应于8、4及7号引脚,接下来是定义ISM频段,前面提到这是一款900MHz的芯片,所以要设置为915。
接下来的代码是使用硬件配置的引脚来初始化LoRa芯片,底层代码通过SPI接口来指定相关的指令,如设置LoRa的配置参数,设置发射功率等。LoRa使用扩频技术来实现远距离及低功耗,不同的调制参数适用不同的场合,例如不同的传输距离,典型的配置列表如下
不同的扩频因子SF、带宽BW及CR的组合,可以得到不同的传输速率,结合不同的发射功率,还可以选择传输距离等
while (!rf95.init()) {
Serial.println("LoRa radio init failed");
while (1);
}
Serial.println("LoRa radio init OK!");
// Defaults after init are 434.0MHz, modulation GFSK_Rb250Fd250, +13dbM
if (!rf95.setFrequency(RF95_FREQ)) {
Serial.println("setFrequency failed");
while (1);
}
Serial.print("Set Freq to: "); Serial.println(RF95_FREQ);
// Defaults after init are 434.0MHz, 13dBm, Bw = 125 kHz, Cr = 4/5, Sf = 128chips/symbol, CRC on
// The default transmitter power is 13dBm, using PA_BOOST.
// If you are using RFM95/96/97/98 modules which uses the PA_BOOST transmitter pin, then
// you can set transmitter powers from 5 to 23 dBm:
rf95.setTxPower(23, false);
这一段代码设置ISM频率,使用默认的BW、CR及SF参数,这些参数在LoRa每个结点上,这些参数要求保持一致。剩下的事情就是发送及接收数据的处理工作了,代码就不详细介绍了。[!--empirenews.page--]
现在得给Feather 32u4 LoRa找一个伙伴,来看看实际的通信效果。我们需要另外一个LoRa结点,实现与Feather 32u4 LoRa相似的功能,即接收及响应另一个peer传递过来的信息,更高级的应用当然是结合LoRa网关实现真正的物联功能。
这是用来与Feather 32u4 LoRa通信的LoRa结点,来自国内的Dragino出品的LoRa Shield,同样是基于Arduino主控的一款LoRa产品,价廉物美。
该产品也提供了基于RadioHead库的测试代码,只要将LoRa通信参数设置为相同即可实现简单通信,这些调整的参数主要包括:SPI硬件接口,LoRa通信相关的配置参数如频率、BW、SF等。
最后的测试结果如下
神同步!
由于两个结点的位置挨得非常近,RSSI的指标也令人满意,不过由于Feather 32u4 LoRa并没有焊接天线,远程测试的过程就免了,估计也不会很理想。
Feather 32u4 LoRa小巧、便携,用来评估及学习LoRa的相关知识非常不错,不过建议购买的时候最好买一对,毕竟,通信这种活,一个是玩不转的。Adafruit的官方教程也非常不错,如果E文不是问题的话。真实的产品,当然还要结合LoRa网关及IoT服务提供商提供的服务。
嗯,这样才是真实的IoT。