可以说,LoRaWAN是围绕物联网的广域网协议进行标准战争的赢家,它是一种低功耗,低带宽,远程协议。 打算在一天之内,使用合理的天线,通过网关将电池供电的远程传感器连接回互联网,大家可能会从现成的LoRa无线电获得15公里的射程,它的缺点是可用带宽将以字节为单位,而不是以兆字节甚至千字节为单位。
Arduino LoRa库的作者Sandeep Mistry整合了对树莓派Pico的LoRa连接的支持,最近他还为我们提供了对Pico的以太网支持,它的库使用Semtech SX1276无线电模块为Pico和其他基于RP2040的板增加了LoRa支持,这意味着完全支持Adafruit的RFM95W板等突破以及其LoRa FeatherWing。
LoRaWAN覆盖范围是哪
要使用支持LoraWAN的Pico,大家需要处于LoRa网关的范围内。 幸运的是,有物联网(The Things Network),这是一个开源社区LoRaWAN网络,具有全球覆盖范围。
根据所在的位置,很有可能已经处于覆盖范围之内。 但是,如果不是这样,则不必担心太多。
LoRaWAN基站的成本只有几千美元的日子早已一去不复返了。 现在可以以75英镑左右的价格购买LoRa网关。
获取来源
如果你已经设置并可以使用树莓派 Pico工具链,请确保你的pico-sdk签出是最新的,包括子模块。 如果没有,则应首先设置C / C ++ SDK,然后再从GitHub中获取项目。
在继续之前,请确保已设置好PICO_SDK_PATH。 例如,如果在树莓派上构建东西,并且已经运行pico_setup.sh脚本,或者按照《入门指南》中的说明进行操作,则可以将PICO_SDK_PATH指向
之后,大家准备构建库和示例应用程序。 但是在执行此操作之前,我们需要做另外两件事:在将要存储数据的云基础架构上进行配置,并将LoRa无线电板连接到树莓派 Pico。
设置一个应用程序
物联网目前正在从V2迁移到V3堆栈。 因此,我将构建一个V2风格的应用程序,但是,如果你使用公共网关或构建自己的网关,则可能应该构建V3风格的应用程序。 说明类似,你应该可以根据下面的内容逐步完成操作。 请注意,对于新的V3堆栈,有一个单独的网络控制台,外观可能有所不同。
新网关范围内的任何LoRa设备都将接收其数据包并向上游发送到The Things Network时,除非将数据包放到其他地方,否则数据包将被丢弃在地面上。 换句话说,物联网需要知道网关接收的数据包的路由位置。
为了提供此信息,我们首先需要在The Things Network Console中创建一个应用程序。 为此,只需输入一个唯一的Application ID字符串即可(可以是任意值),控制台将生成一个Application EUI和一个默认的Access Key,我们将使用它们将设备注册到我们的应用程序中。
一旦注册了一个应用程序,我们要做的就是向该应用程序注册我们的单个设备(或以后可能有许多设备),以便后端知道从该设备路由数据包的位置。
注册设备
可以从控制台中的应用程序页面完成注册我们的设备。
设备ID是人类可读的字符串,以确定我们的远程设备。由于Adafruit的RFM9W突破板在与收音机相同的包装袋中贴有标有唯一标识符的贴纸,因此我们可以使用它在字符串后附加一个字符串来唯一地标识我们的Pico板,因此我们最终得到了诸如pico-xy- xy-xy-xy-xy-xy作为我们的设备ID。
我们还需要生成一个设备EUI2。这是一个64位的唯一标识符。再次,我们可以使用标签中的唯一标识符,除了这次我们可以用两个前导零(0000XYXYXYXYXYXYXY)填充,以生成设备EUI。你也可以使用pico_get_unique_board_id()生成设备EUI。
如果您在注册后查看“设备”页面,则需要Application EUI2和Application Key2使您的板与LoRa网络通信,或更准确地说,是让网络正确地将数据包从您的板路由到您的应用。
记下你的设备EUI,应用程序EUI和应用程序密钥。
在面包板上接线
现在我们已经设置了云后端,接下来需要做的是将Pico连接到LoRa突破板。不幸的是,RFM95W的突破并不是那么友好。如果你像我们在本项目中那样需要访问电路板两侧的无线电引脚,则至少对面包板不友好。在这种情况下,对于标准面包板而言,分接头的宽度有点太宽了。
幸运的是,这并不是什么大问题,但是可能需要抓住一束公对母跳线以及面包板,继续并将RFM95W模块连接到 Pico,分支板上的引脚和您的Pico之间的映射应如下所示:
物理引脚,RP2040引脚,SX1276模块和RFM95W分支之间的映射
这些引脚是库的默认引脚,可以在软件中更改。
构建和部署软件
现在,我们已经在云中建立了后端,并且我们已经物理上“构建”了我们的无线电,我们可以构建和部署LoRaWAN应用程序。 该库提供的示例应用程序之一将从RP2040微控制器上的片上传感器读取温度,并通过LoRaWAN无线电将其定期发送到您的Things Network应用程序。
继续,并在结帐时将目录更改为otaa_temperature_led示例应用程序,本示例使用OTAA,因此我们需要创建的设备EUI,应用程序EUI和应用程序密钥。
在自己喜欢的编辑器中打开config.h文件,然后将REGION,DEVICE_EUI,APP_EUI和APP_KEY更改为网络控制台中显示的值,该代码期望使用(默认)字符串格式,十六进制数字之间没有空格,而不是字节数组表示形式。
然后,在自己编辑config.h文件之后,可以继续构建示例应用程序。
如果一切顺利,应该在build / examples / otaa_temperature_led /中有一个UF2文件,名为pico_lorawan_otaa_temperature_led.uf2。 现在,可以按照常规方式将此UF2文件加载到Pico上。
抓住自己的Raspberry Pi Pico开发板和Micro USB电缆,将电缆插入树莓派或笔记本电脑,然后在将Micro USB电缆的另一端插入开发板的同时,按住Pico上的BOOTSEL按钮,插入板卡后,然后松开按钮。
桌面上将弹出一个名为RPI-RP2的磁盘卷。 双击将其打开,然后将UF2文件拖放到其中。
Pico现在正在运行LoRaWAN应用程序,并且如果需要,可以通过打开与Pico的USB串行连接来查看一些调试信息,打开一个终端窗口并启动minicom。
传送资料
但是,你需要转到网络控制台以查看真实信息,应该看到一个初始加入消息,后跟许多帧,每个帧代表Pico通过LoRaWAN和The Things Network应用程序网关发送的温度测量值。
有效负载值是Pico内部温度传感器以十六进制形式测得的温度。 这有点超出本文的讨论范围,但是现在可以添加解码器和集成功能,从而可以将数据从十六进制解码为人类可读的数据,然后将其保存到数据库中。 为了说明可以在此处执行的操作的强大功能,请转到应用程序的“有效载荷格式”标签,然后在“解码器”框中输入以下Javascript,
然后向下滚动并点击绿色的“保存有效负载功能”按钮。
返回到“数据”选项卡,应该看到现在以十六进制表示的有效负载已经以摄氏温度为后缀,我们的简单解码器已将有效负载提取并将其转换回Javascript对象。
发送命令
除了发送温度数据之外,该示例应用程序还可以直接从The Things Network控制台切换 Pico上的LED。
转到网络控制台中的“设备”页面,然后在“下行有效负载”框中键入“ 01”,然后单击“发送”按钮。 然后翻转到“数据”选项卡,应该看到“预定下载”行,如果继续观看,应该看到该字节已下行。 发生这种情况时,Pico上的板载LED应该亮起! 返回网络控制台并在“有效负载”框中键入“ 00”(最终)将关闭Pico的LED。
请记住,LoRaWAN是远程的,但带宽很低,不应该期望立即响应下行的命令。