×

将您的Adafruit Feather RP2040连接到物联网

消耗积分:0 | 格式:zip | 大小:0.00 MB | 2023-06-16

tr12345

分享资料个

描述

本指南是代表 Arm 软件开发人员团队创建的,请在 Twitter 上关注我们:@ArmSoftwareDev和 YouTube:Arm 软件开发人员以获取更多资源!

关于

该项目将指导您使用 LoRaWAN 通信将您的Adafruit Feather RP2040板连接到The Thing Networks 。

重点将放在基本的 LoRaWAN 通信上,其中板将定期发送其内部温度,发送到板的消息将用于控制内置 LED。

虽然本指南侧重于Adafruit Feather RP2040板,但可以使用任何配备Raspberry Pi 的 RP2040 微控制器 (MCU) 的板,例如Raspberry Pi Pico如果您不使用本指南中使用的Adafruit LoRa Radio FeatherWing - RFM95W 900 MHz - RadioFruit ,您还需要Semtech SX1276无线电模块或分线器,例如Adafruit RFM95W LoRa 无线电收发器分线器 - 868 或 915 MHz - RadioFruit

什么是 LoRaWAN?

LoRaWAN是低功耗广域网的网络协议规范。它使用Semtech 的 LoRa (远程)无线电技术作为物理层 - 允许以低数据速率(0.3 至 50 kbps)进行远程通信(5 - 20 公里,使用正确的天线和视线)。

LoRaWAN 网络由几个组件组成:终端节点、网关/集中器、网络服务器和应用程序服务器。Thing Network - LoRaWAN Architecture页面对这些组件有很好的解释。

LoRaWAN 节点是发送和接收数据的嵌入式设备 - 我们将在本指南中专注于创建 LoRaWAN 节点。

什么是物联网?

The Things Network是一个构建开源和去中心化 LoRaWAN 网络的全球社区。

该网络由遍布全球 150 多个国家的 19k+ 个社区运行的LoRaWAN 网关组成,并被全球 142k+ 社区成员使用。

对于本指南,您需要确保物联网 (TTN) 网关在范围内,请查看TTN 地图了解网络覆盖范围。如果您所在地区没有 TTN 网关,您可以购买TTN 室内网关,用于开发和试验 TTN 和 LoRaWAN。

poYBAGN1ItaATjBtAAZ305MkyS8030.png
TTN网络覆盖图截图
 

组装硬件

Adafruit Feather RP2040 板没有焊接任何接头。您需要使用烙铁将用于羽毛的短接头套件 - 12 针 + 16 针母接头焊接到板上。

pYYBAGN1ItmADzSdAAC3bIGLOkc883.jpg
Adafruit Feather RP2040 板顶部焊接了短母头
 

接下来将公接头焊接到Adafruit LoRa Radio FeatherWing-RFM95W 900 MHz-RadioFruit以及Simple Spring Antenna - 915MHz 有关详细信息,请参阅Radio FeatherWing 组装指南

pYYBAGN1ItuACkoXAAEEUI1MnQw319.jpg
Adafruit LoRa Radio FeatherWing 板的底部,带有弹簧天线和焊接的公头
 

开箱即用的LoRa Radio FeatherWing 仅将 SPI 数据引脚连接到接头引脚我们还需要将 Feather Wing 上的 DIO1、IRQ、CS 和 RST 连接器焊接到连接器 B、C、D 和 E(注意:这些连接很灵活,可以在软件中更改)。

poYBAGN1It2AYNLDAABAaq4d8uI782.png
Adafruit LoRa Radio FeatherWing 板 DIO1、IRQ、CS 和 RST 连接的接线图
 

将 FeatherWing 插入 Feather 板的顶部。

pYYBAGN1IuCAIjaqAADopRtllDQ009.jpg
附有 LoRa Radio FeatherWing 板的 Adafruit Feather RP2040 板的底视图
 

设置 Pico SDK 开发环境

您首先需要使用 Raspberry Pi 的 Pico SDK 和所需的工具链来设置您的计算机。

有关详细信息,请参阅“ Raspberry Pi Pico 入门”。

该指南的第 2.1 节可用于所有操作系统,然后是操作特定部分:

  • Linux:第 2.2 节
  • macOS:第 9.1 节
  • 窗户:第 9.2 节

获取和编译 pico-lorawan 库和示例

确保设置了PICO_SDK环境变量。

export PICO_SDK_PATH=/path/to/pico-sdk

在终端窗口中,克隆 git 存储库并更改目录:

cd ~/ 

git clone --recurse-submodules https://github.com/sandeepmistry/pico-lorawan.git


cd pico-lorawan

创建一个构建目录并将目录更改为它:

mkdir build

cd build

运行cmakemake进行编译:

cmake .. -DPICO_BOARD=adafruit_feather_rp2040

make

获取开发板默认 Dev EUI

在注册库中包含的示例之一时,我们需要一个唯一的板标识符来打印它。

使用 USB 电缆将开发板插入计算机,然后按住BOOTSEL按钮,然后点击开发板上的RESET按钮,

examples/default_dev_eui/pico_lorawan_default_dev_eui.uf2文件复制到挂载的树莓派Pico启动ROM盘:

cp examples/default_dev_eui/pico_lorawan_default_dev_eui.uf2 /Volumes/RPI-RP2/.

使用串行监视器应用程序,例如屏幕打开查看板的 USB 串行输出,将/dev/cu.usbmodem0000000000001替换为板的路径:

screen /dev/cu.usbmodem0000000000001

将显示基于板闪存序列号的板默认 Dev EUI,在下面的屏幕截图中值为“ 4545373038056807 ”。

poYBAGN1IuOAMWhvAAIMKYTwihM677.png
 

记下此值以供下一步使用。

将设备添加到物联网

Things Network 已弃用他们的 V2 堆栈,该堆栈将在 2021 年底关闭,现在向用户推荐更多 V3 堆栈。V3 现在称为“ The Things Stack Community Edition ”。本节将指导您在 V3 堆栈上设置节点。

转到The Things Stack 社区版控制台并选择您所在的地区。

poYBAGN1IuaAHZh_AAPWp6KEk-c169.png
 

接下来单击“使用 The Things ID 登录”按钮

poYBAGN1IuqAaBWzAATwCz_3rHE174.png
 

如果您还没有 TTN 帐户,请单击注册创建一个然后登录。

pYYBAGN1Iu6AesIPAAO3E9uTqrU807.png
 

登录后,单击“转到应用程序”。

poYBAGN1IvKAMLWjAAYFWUyUkzw712.png
 

如果您没有现有的应用程序,请单击“添加应用程序”按钮创建一个。

pYYBAGN1IvaAWa8_AAOqRk3pv8U234.png
 

输入一个Application ID,我们在下面使用了“ feather-rp2040-app ”,然后点击“ Create application ”按钮。

poYBAGN1IvmAM4HYAAQ-MKjGVG4712.png
 

单击“添加终端设备”按钮以创建新设备。

pYYBAGN1Iv2AO7DiAAXfRuLe5hE419.png
 

单击“手动”选项卡,因为我们正在创建的设备不在 LoRaWAN 设备存储库中。

pYYBAGN1IwGAWHslAATp2L-zo6E150.png
 

选择“无线激活 (OTAA) ”作为激活模式,选择“ MAC V1.0.2 ”作为 LoRaWAN 版本。该字段的其余部分可以保留其默认值,然后您可以单击“开始”按钮。

poYBAGN1IwaAZIACAAXUji_3VZo953.png
 

接下来输入“ End device ID ”,在下面的屏幕截图中输入“ feather-rp2040 ”,为 JoinEUI 输入全 0,并使用您从开发板获得的默认 Dev EUI 值作为DevEUI字段。然后单击“网络层设置”按钮。

pYYBAGN1IwqAACXyAAX91pbqA7M026.png
 

选择您所在地区的“频率计划”和“地区参数版本”为PHY V1.0.2 REV A ,然后单击“加入设置”按钮。

pYYBAGN1Iw6ATNTQAAX8BhgNKho565.png
 

单击 AppKey 旁边的圆形箭头按钮生成 AppKey,然后单击“添加终端设备”按钮。

poYBAGN1IxOAbq5WAAaGwCb5QuM663.png
 

现在已经添加了设备,请记下 JoinEUI、DevEUI 和 AppKey 值以备后用。

配置板 OTAA 设置

打开examples/otaa_temperature_led/config.h并输入从上一节获得的信息。

US915 示例:

#define LORAWAN_REGION LORAMAC_REGION_US915

// set to NULL use the boards default Dev EUI
#define LORAWAN_DEVICE_EUI NULL

// Join EUI
#define LORAWAN_APP_EUI "0000000000000000"

#define LORAWAN_APP_KEY "00DBE0B97B52F2F01A406CC8B3830753"

// TTN specific channel mask, only needed for US915 region
#define LORAWAN_CHANNEL_MASK "FF0000000000000000020000"

EU868 示例:

#define LORAWAN_REGION LORAMAC_REGION_EU868

// set to NULL use the boards default Dev EUI
#define LORAWAN_DEVICE_EUI NULL

// Join EUI
#define LORAWAN_APP_EUI "0000000000000000"

#define LORAWAN_APP_KEY "00DBE0B97B52F2F01A406CC8B3830753"

// set to NULL for default channel mask
#define LORAWAN_CHANNEL_MASK NULL

现在使用更新的 OTAA 设置重新编译示例:

make

按住BOOTSEL按钮,然后点击板上的RESET按钮,

examples/otaa_temperature_led/pico_lorawan_otaa_temperature_led.uf2文件复制到挂载的树莓派Pico启动ROM盘:

cp examples/otaa_temperature_led/pico_lorawan_otaa_temperature_led.uf2 /Volumes/RPI-RP2/.

使用串行监视器应用程序,例如屏幕打开查看板的 USB 串行输出,将/dev/cu.usbmodem0000000000001替换为板的路径:

screen /dev/cu.usbmodem0000000000001

如果成功,板将加入 TTN 并开始每 30 秒发送一次内部温度传感器值。

pYYBAGN1IxaAasu0AAIzw8tnAaQ156.png
 

您还可以在 TTN 控制台中查看板状态。

poYBAGN1IxuAN99PAAfdrMWFCUM190.png
 

单击“实时数据”以查看板的实时数据:

poYBAGN1IyCAQIkSAAgWSSx5jRE069.png
 

数据消息值是十六进制的,应该与串行监视器上显示的值相匹配。在上面的屏幕截图中,0x26 = 38 °C。

接下来我们可以向板子发送一条下行消息,点击“消息”选项卡。

poYBAGN1IySALAZZAAX7g9R1keo492.png
 

然后“ Downlink ”,输入01作为Payload,然后点击“ Simulate uplink ”按钮。注意:如果按钮被禁用,您可以刷新页面以启用它。

pYYBAGN1IymAVhorAAbHohmkC6A817.png
 

一旦板子收到下行信息,它的板载 LED 就会亮起,并且串行监视器上也会显示一条信息:

poYBAGN1IyyATCv6AAMbdg8_aIA143.png
 

LoRaWAN B 类设备在发送上行消息后,只能在特定窗口期内接收下行消息。我们加载的示例每 30 秒发送一条消息,因此您必须等待一分钟才能收到它。

您现在可以向威廉希尔官方网站 板发送另一个带有 00 的下行链路消息以清除 LED。

pYYBAGN1IzCAfAILAAOohy1Nlvw678.png
 

下一步

我们已经介绍了如何使用 Raspberry Pi Pico SDK 和带有 The Things Network V3的pico-lorawan库创建基于 RP2040 的 LoRaWAN 节点。我们创建的示例应用程序每 30 秒将板子内部温度发送到 TTN,下行链路消息可以远程控制板子的 LED。

您现在可以通过以下方式构建此示例:

  • 在上行链路消息中添加更多传感器值
  • 使用来自下行链路消息的附加值来控制其他执行器
  • 遵循The Things Stacks 集成指南,使用 HTTP Web 挂钩、MQTT、NODE-Red、IFFT 或云平台(例如 AWS IoT)处理应用程序上的下行链路消息。

由于 Raspberry Pi RP2040 包含双核功能,您还可以创建更高级的项目,这些项目可以在一个核上收集和使用机器学习,同时让另一个核处理与 TTN 的 LoRaWAN 通信。

如果您使用本指南制作了一个很酷的项目,请在Hackster.io上为它创建一个项目指南,供其他人欣赏!

在世界标准时间 4 月 29 日下午 5 点举行的本周Arm 创新咖啡会议上,聆听 The Things Network 团队的更多信息,并了解该项目的实际运行情况

 

pYYBAGN1IzKAFQy-AAEJEQVpi8c662.jpg
https://www.youtube.com/watch?v=HiVEFmhJD7g
 

 


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

评论(0)
发评论

下载排行榜

全部0条评论

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

'+ '

'+ '

'+ ''+ '
'+ ''+ ''+ '
'+ ''+ '' ); $.get('/article/vipdownload/aid/'+webid,function(data){ if(data.code ==5){ $(pop_this).attr('href',"/login/index.html"); return false } if(data.code == 2){ //跳转到VIP升级页面 window.location.href="//m.obk20.com/vip/index?aid=" + webid return false } //是会员 if (data.code > 0) { $('body').append(htmlSetNormalDownload); var getWidth=$("#poplayer").width(); $("#poplayer").css("margin-left","-"+getWidth/2+"px"); $('#tips').html(data.msg) $('.download_confirm').click(function(){ $('#dialog').remove(); }) } else { var down_url = $('#vipdownload').attr('data-url'); isBindAnalysisForm(pop_this, down_url, 1) } }); }); //是否开通VIP $.get('/article/vipdownload/aid/'+webid,function(data){ if(data.code == 2 || data.code ==5){ //跳转到VIP升级页面 $('#vipdownload>span').text("开通VIP 免费下载") return false }else{ // 待续费 if(data.code == 3) { vipExpiredInfo.ifVipExpired = true vipExpiredInfo.vipExpiredDate = data.data.endoftime } $('#vipdownload .icon-vip-tips').remove() $('#vipdownload>span').text("VIP免积分下载") } }); }).on("click",".download_cancel",function(){ $('#dialog').remove(); }) var setWeixinShare={};//定义默认的微信分享信息,页面如果要自定义分享,直接更改此变量即可 if(window.navigator.userAgent.toLowerCase().match(/MicroMessenger/i) == 'micromessenger'){ var d={ title:'将您的Adafruit Feather RP2040连接到物联网',//标题 desc:$('[name=description]').attr("content"), //描述 imgUrl:'https://'+location.host+'/static/images/ele-logo.png',// 分享图标,默认是logo link:'',//链接 type:'',// 分享类型,music、video或link,不填默认为link dataUrl:'',//如果type是music或video,则要提供数据链接,默认为空 success:'', // 用户确认分享后执行的回调函数 cancel:''// 用户取消分享后执行的回调函数 } setWeixinShare=$.extend(d,setWeixinShare); $.ajax({ url:"//www.obk20.com/app/wechat/index.php?s=Home/ShareConfig/index", data:"share_url="+encodeURIComponent(location.href)+"&format=jsonp&domain=m", type:'get', dataType:'jsonp', success:function(res){ if(res.status!="successed"){ return false; } $.getScript('https://res.wx.qq.com/open/js/jweixin-1.0.0.js',function(result,status){ if(status!="success"){ return false; } var getWxCfg=res.data; wx.config({ //debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。 appId:getWxCfg.appId, // 必填,公众号的唯一标识 timestamp:getWxCfg.timestamp, // 必填,生成签名的时间戳 nonceStr:getWxCfg.nonceStr, // 必填,生成签名的随机串 signature:getWxCfg.signature,// 必填,签名,见附录1 jsApiList:['onMenuShareTimeline','onMenuShareAppMessage','onMenuShareQQ','onMenuShareWeibo','onMenuShareQZone'] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2 }); wx.ready(function(){ //获取“分享到朋友圈”按钮点击状态及自定义分享内容接口 wx.onMenuShareTimeline({ title: setWeixinShare.title, // 分享标题 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享给朋友”按钮点击状态及自定义分享内容接口 wx.onMenuShareAppMessage({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 type: setWeixinShare.type, // 分享类型,music、video或link,不填默认为link dataUrl: setWeixinShare.dataUrl, // 如果type是music或video,则要提供数据链接,默认为空 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享到QQ”按钮点击状态及自定义分享内容接口 wx.onMenuShareQQ({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享到腾讯微博”按钮点击状态及自定义分享内容接口 wx.onMenuShareWeibo({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享到QQ空间”按钮点击状态及自定义分享内容接口 wx.onMenuShareQZone({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); }); }); } }); } function openX_ad(posterid, htmlid, width, height) { if ($(htmlid).length > 0) { var randomnumber = Math.random(); var now_url = encodeURIComponent(window.location.href); var ga = document.createElement('iframe'); ga.src = 'https://www1.elecfans.com/www/delivery/myafr.php?target=_blank&cb=' + randomnumber + '&zoneid=' + posterid+'&prefer='+now_url; ga.width = width; ga.height = height; ga.frameBorder = 0; ga.scrolling = 'no'; var s = $(htmlid).append(ga); } } openX_ad(828, '#berry-300', 300, 250);