https://www.raspberrypi.org/blog/how-to-add-lorawan-to-raspberry-pi-pico/
2021年4月27日 阿拉斯代尔·艾伦(Alasdair Allan)
LoRaWAN 可以说是围绕物联网广域网络协议的标准战争的赢家,是一个低功率、低带宽和远程协议。打算通过网关将电池供电的远程传感器连接到互联网,在好日,使用合理的天线,您很可能从现成的 LoRa 收音机获得 15 公里的射程。缺点是可用带宽将以字节而不是兆字节甚至千字节进行测量。
一个Adafruit RFM95W LoRa无线电分路器连接到一个树莓派Pico
对Raspberry-Pi-Pico的LoRa连接的支持是由andeep-Mistry,Arduino-LoRa库的作者,最近他还为我们提供了对Pico的以太网支持。他的库使用Semtech SX1276无线电模块为Pico和其他基于RP2040的板添加了LoRa支持。这意味着,突破像Adafruit的RFM95W板,以及他们的LoRa FeatherWing,是完全支持。
LoRaWAN 覆盖?
要使用支持LoraWAN的Pico,您需要在LoRa网关的范围内。幸运的是有一个东西网络,一个开放源码的社区LoRaWAN网络,覆盖全球。
关于物联网 https://youtu.be/U4UrXl-SGEo
根据您所处的位置,您很有可能已经处于覆盖范围。然而,如果你不是,那么你不必太担心。
英国物联网网关地图
获取资源
如果您已经设置了Raspberry-pipico工具链并正在运行,请确保picosdk签出是最新的,包括子模块。如果不是,你首先应该建立C/C++ SDK,然后你需要从GITHUB抓取这个项目。
$ git clone --recurse-submodules https://github.com/sandeepmistry/pico-lorawan.git
$ cd pico_lorawan
在继续之前,请确保已设置PICO_SDK_PATH。例如,如果您正在Raspberry Pi上构建东西,并且运行了pico_setup.sh脚本,或者按照我们的入门指南中的说明进行了操作,那么您应该将PICO_SDK_PATH指向
$ export PICO_SDK_PATH = /home/pi/pico/pico-sdk
之后,您就可以构建库和示例应用程序了。但在你这么做之前,我们需要做另外两件事:配置云基础设施,把我们的数据传输到哪里,把我们的LoRa无线电板连接到我们的Raspberry-Pi-Pico上。
设置应用程序
物联网络当前正在从V2堆栈迁移到V3堆栈。由于我的家庭网关是几年前建立的,我仍然在使用V2软件,还没有迁移。因此,我将构建一个V2风格的应用程序。但是,如果您正在使用公共网关或构建自己的网关,则可能应该构建V3样式的应用程序。说明是类似的,你应该能够使你的方式通过根据下面写的。请注意,对于新的V3堆栈,有一个单独的网络控制台,事情看起来可能有些不同。
从TTN V2迁移到V3
当你的新网关范围内的任何LoRa设备都将接收其数据包并将其发送到物联网的上游时,数据包将被丢弃在地面上,除非它们有地方去。换句话说,物联网需要知道将网关接收的数据包路由到何处。
为了给它这个信息,我们首先需要在Things网络控制台中创建一个应用程序。要做到这一点,您只需键入一个唯一的应用程序ID字符串(可以是任何字符串),控制台将生成一个应用程序EUI和一个默认访问密钥,我们将使用该密钥将设备注册到应用程序中。
添加应用程序
一旦我们注册了一个应用程序,那么我们所要做的就是将我们的单个设备(或者以后可能是许多设备)注册到该应用程序,这样后端就知道从该设备路由数据包的位置。
注册设备
注册我们的设备可以从控制台的应用程序页面完成。
将设备注册到应用程序
设备ID是一个人类可读的字符串,用于标识远程设备。由于Adafruit的RFM9W转接板与收音机放在同一个袋子里,上面写着一个唯一的标识符,因此我们可以用它来后置一个字符串,以唯一地标识我们的Pico板,因此我们最终使用类似pico-xy-xy-xy-xy-xy-xy的东西作为我们的设备ID。
我们还需要生成一个设备EUI。这是64位唯一标识符。这里我们可以再次使用标签中的唯一标识符,除了这次我们可以用两个前导零,0000XYXYXYXYXYXY,来生成我们的设备EUI。您还可以使用pico_get_unique_board_id( )生成设备EUI。
如果您在注册后查看设备页面,您将需要应用程序EUI和应用程序Key来让您的板与LoRa网络通信,或者更准确地说,让网络正确地将数据包从您的板路由到您的应用程序。
记下您的设备EUI、应用程序EUI和应用程序密钥。
把东西装在试验板上
现在我们已经设置了云后端,接下来我们需要做的是将Pico连接到LoRa突破板。不幸的是,RFM95W突破并不是真正的实验板友好。至少它不是实验板友好,如果你需要访问无线电的引脚在双方的董事会像我们这样为这个项目-在这种情况下,突破只是有点太宽了一个标准的实验板。
连接一个树莓皮Pico到一个Adafruit RFM95W LoRa无线电分机
幸运的是,这并不是一个大问题,但你可能需要抓住一个男性对女性跳线沿着你的实验板一串。继续,把RFM95W模块连接到你的Raspberry Pi Pico上。转接板上的引脚与Pico之间的映射应如下所示:
物理引脚、RP2040引脚、SX1276模块和RFM95W转接头之间的映射这些管脚是库的默认值,可以在软件中更改。
构建和部署软件
现在我们已经在云端建立了我们的后端,并且我们已经实际“构建”了我们的无线电,我们可以构建和部署我们的LoRaWAN应用程序。该库提供的一个示例应用程序将从RP2040微控制器上的片上传感器读取温度,并通过LoRaWAN无线电定期将其发送到您的物联网应用程序。
void internal_temperature_init() {
adc_init();
adc_select_input(4);
adc_set_temp_sensor_enabled(true);
}
float internal_temperature_get() {
float adc_voltage = adc_read() * 3.3f / 4096;
float adc_temperature = 27 - (adc_voltage - 0.706f) / 0.001721f;
return adc_temperature;
}
继续并将目录更改为签出中的otaa_temperature_led示例应用程序。这个例子使用OTAA,所以我们需要我们创建的设备EUI、应用程序EUI和应用程序密钥。
$ cd examples/otaa_temperature_led/
在您喜爱的编辑器中打开config.h文件,并将REGION、DEVICE_EUI、APP_EUII和APP_KEY更改为网络控制台中显示的值。代码要求的是(默认)字符串格式,十六进制数字之间没有空格,而不是字节数组表示形式。
#define LORAWAN_REGION LORAMAC_REGION_EU868
#define LORAWAN_DEVICE_EUI "Insert your Device EUI"
#define LORAWAN_APP_EUI "Insert your Application EUI"
#define LORAWAN_APP_KEY "Insert your App Key"
#define LORAWAN_CHANNEL_MASK NULL
我在英国,我的LoRa电台广播频率是868MHz,所以我要把我的地区设为LORAMAC_REGION_EU868。如果您在美国,您使用的是915MHz,因此需要将您的地区设置为LORAMAC_REGION_US915。
在编辑完config.h文件之后,可以继续构建示例应用程序。
$ cd ../..
$ mkdir build
$ cd build
$ cmake ..
$ make
如果一切顺利,您应该在build/examples/otaa_temperature_led/中有一个名为pico_lorawan_otaa_temperature_led.uf2的UF2文件。你现在可以用正常的方式把这个UF2文件加载到你的Pico上。
拿起你的树莓皮皮卡和微型USB电缆。将电缆插入Raspberry Pi或笔记本电脑,然后按住Pico上的BOOTSEL按钮,同时将micro USB电缆的另一端插入电路板。然后在插上电路板后松开按钮。
一个名为RPI-RP2的磁盘卷应该会弹出到您的桌面上。双击以打开它,然后将UF2文件拖放到其中。如果您遇到问题,请参阅我们的入门指南第4章以了解更多信息。
你的Pico现在正在运行你的LoRaWAN应用程序,如果你想你应该能够看到一些调试信息打开USB串行连接到你的Pico。打开终端窗口并启动minicom。
$ minicom -D /dev/ttyACM0
发送数据
但是,您需要转到网络控制台才能看到真正的信息。您应该看到一个初始的join消息,后面是一些帧。每一帧代表一个由你的Pico通过LoRaWAN和物联网应用程序的网关发送的温度测量值。
数据通过LoRaWAN进入物联网
有效载荷值是由Raspberry Pi Pico的内部温度传感器以十六进制测量的温度。这有点超出了本文的范围,但是您现在可以添加一个解码器和集成,允许您将十六进制数据解码为人类可读的数据,然后,在其他各种选项中,将其保存到数据库中。为了说明您在这里可以做什么,请转到应用程序的“有效负载格式”选项卡,并在“解码器”框中输入以下Javascript,
function Decoder(bytes, port) {
var decoded = {};
decoded.temp = bytes[0];
return decoded;
}
然后向下滚动并点击绿色的“保存有效负载功能”按钮。
返回到“数据”选项卡,您应该看到有效负载(十六进制)现在与Celcius中的温度一起被后置挂起。我们的简单解码器将我们的有效负载转换回Javascript对象。
发送命令
除了发送温度数据外,这个示例应用程序还允许您直接从Things Network控制台切换Raspberry Pi Pico上的LED。
通过LoRaWAN将数据发送回Raspberry Pi Pico
转到网络控制台中的设备页面,在下行有效负载框中键入“01”,然后点击“发送”按钮。然后翻到“数据”选项卡。你应该看到一个“下载计划”行,如果你继续看你应该看到字节下行。当这种情况发生时,板上的指示灯在你的树莓皮Pico应该打开!返回网络控制台并在有效负载框中键入“00”将(最终)关闭Pico的LED。
记住,LoRaWAN是远程的,但是带宽很低。您不应该期望对下行链路命令的即时响应。
现在在哪里?
OTAA示例应用程序对于您来说是一个非常好的框架,它可以让您获取数据并通过LoRa将数据发送到云端,还可以将命令从云端发送回支持LoRa的Pico。
Arm创新咖啡-物联网 https://youtu.be/HiVEFmhJD7g
在本周四(4月29日)10:00 PDT(北京时间18:00)举行的Arm Innovation Coffee大会上,将围绕Things Network展开更多讨论,并从Raspberry Pi Pico现场演示LoRaWAN。
包装
可以在Raspberry Pi论坛上找到对Pico开发的支持。还有一个(非官方的)Discord服务器,很多活跃在社区的人似乎都在那里闲逛。有关文档的反馈应作为问题发布到GitHub上的pico反馈存储库,或直接发布到与其相关的存储库。
所有的文档,以及许多其他的帮助和链接,都可以在入门页上找到。如果你不知道那是在未来,你总是可以找到它从你的Pico:要访问页面,只要按住你的Pico上的BOOTSEL按钮,插入你的笔记本电脑或树莓皮,然后释放按钮。继续并打开RPI-RP2卷,然后单击INDEX.HTM文件。
这将始终带您进入入门页。https://www.raspberrypi.org/documentation/pico/getting-started/