用树莓派+lora shield搭建一个LoRaWAN网关

文章目录

  • 1. 创建单信道LoRaWAN网关
    • 1.1 准备工作
      • 配置树莓派上网
      • 开启树莓派SPI接口
      • 安装必需库文件
    • 1.2 正式开始
      • 把LoRa shield连接到树莓派上
      • 下载单信道LoRa网关代码到树莓派
  • 2. TTN网站相关操作
    • 2.1 注册并登录TTN
    • 2.2 注册Gateway
    • 2.3 注册Application
    • 2.4 注册device
  • 3. Client端操作
    • 3.1 下载代码
    • 3.2 修改代码
      • 3.2.1 client端代码修改
  • 4. 观察实验结果

1. 创建单信道LoRaWAN网关

1.1 准备工作

配置树莓派上网

网上教程很多,不再介绍。

开启树莓派SPI接口

  • 输入命令
    pi@raspberrypi:~ $ sudo raspi-config
  • 在"Interfacing Options"选项中,找到SPI选项,选择enable。
    在这里插入图片描述
    在这里插入图片描述

安装必需库文件

使用“ sudo apt-get installconnectionpi”为Raspberry Pi中使用的BCM2835安装以C语言编写的GPIO访问库;

1.2 正式开始

把LoRa shield连接到树莓派上

在这里插入图片描述

在这里插入图片描述

下载单信道LoRa网关代码到树莓派

  • 下载单信道LoRa网关代码到树莓派
    源代码地址:https://github.com/tftelkamp/single_chan_pkt_fwd
  • 编译代码并运行
$ make all
$ ./single_chan_pkt_fwd

在这里插入图片描述
如上图,树莓派表示已经找到连接到自己的LoRa shield了。将“Gateway ID”部分记录下来。
这边工作还没有完成,先放一放,回来再做。

2. TTN网站相关操作

2.1 注册并登录TTN

进入TTN之后,点击头像边的下拉箭头,选择“console”,进入控制台,如下所示。

在这里插入图片描述

2.2 注册Gateway

选择“GATEWAYS”,在进去的页面选择“register gateway”
在这里插入图片描述
在“Gateway ID”部分填写前面记录的ID,并在下面小方框里面打“√”。选好对应的频段之后,点击页面最下面的“Register Gateway”。
在这里插入图片描述

2.3 注册Application

点击“Applications”,进入页面。点击“add application”,进入配置页面。
在这里插入图片描述
在填写好“Application ID”之后,点击页面最下面的按钮“Add application”,生成对应的应用,具体如下图所示。
在这里插入图片描述

2.4 注册device

在对应的应用下面注册设备,点击“register device”。
在这里插入图片描述
在输入“Application ID”之后,点击生成“Register”,生成对应的设备。
在这里插入图片描述
在修改网关代码main.cpp对应部分的代码,并重新编译运行。

  1. 修改中心频率:
uint32_t freq = 868100000;

改成

uint32_t freq = 433175000;
  1. 修改服务器地址:根据自己选择的TTN服务器修改。参考链接:TTN服务器列表。网站给出的是域名,根据工具把转换为ip地址。域名/IP查询工具。
    我使用的服务器是router.eu.thethings.network,对应的IP地址为:52.169.76.203
#define SERVER1 "54.72.145.119"

改成

#define SERVER1 "52.169.76.203"  

3. Client端操作

3.1 下载代码

代码链接:https://github.com/dragino/Lora/tree/master/Lora%20Shield/Examples/lora_shield_ttn

3.2 修改代码

3.2.1 client端代码修改

  1. 根据TTN上的设备信息修改NWKSKEY、APPSKEY、DEVADDR等参数。
    在这里插入图片描述
    在这里插入图片描述
  2. 当使用的client的默认工作频率是433MHz的时候,我们需要修改一下LMIC库文件,保证双方通信。
    ① 在代码中添加433MHz相关的代码,具体参考如何添加其他频段,例如EU433
    ② 在lmic.c里面强制转化发送的中心频率为433MHz。
bit_t LMIC_setupChannel (u1_t chidx, u4_t freq, u2_t drmap, s1_t band) {
...
LMIC.channelFreq [chidx] = freq;
}

变为

bit_t LMIC_setupChannel (u1_t chidx, u4_t freq, u2_t drmap, s1_t band) {
...
freq = 433175000;//这个频率应该与gateway监听的频率相同
LMIC.channelFreq [chidx] = freq;
}

4. 观察实验结果

搭建的gateway上观察到的收包现象:
在这里插入图片描述
TTN上观察到的收包现象:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/508490.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于linux的MsQUIC编译及样例运行

参考链接: https://github.com/microsoft/msquic/blob/main/docs/BUILD.md 软件相关版本 Ubuntu 20.04 编译/构建 1. 下载源代码 $ git clone --recursive https://github.com/microsoft/msquic.git 2. Powershell安装: 安装链接(根据…

MD文件图片base64自动编码

看工具链接请直接将文章拉到最后… 概述 不知道你在使用markdown写文章的时候有没有遇到过这样的烦恼, 文件写完了, 想将写完的文章粘贴到博客的时候, 你满心欢喜的复制粘贴, 但是发现图片根本复制不过去, 是不是很难受, 尤其对于我这种使用markdown写文章, 写完后想把文章发…

转载:tcpdump抓包和Wireshark解包

转自:https://www.cnblogs.com/domestique/p/8028405.html 简介 用简单的话来定义tcpdump,就是:dump the traffic on a network,根据使用者的定义对网络上的数据包进行截获的包分析工具。 tcpdump可以将网络中传送的数据包的“头…

散列表(哈希表)

概述 什么是散列表? 如果说起它的另一个名字, 你一定很熟悉, 它的英文叫"Hash Table", 哈希表, 很熟悉吧. 散列的思想, 其实就是利用数组的随机访问特性, 将key-value形式的数据, 其中的key转换成数组下标, 即可实现将其存放到数组中, 进而实现随机访问. 而其中将…

如何让nRF52840 dongle化身为BLE sniffier (过程详细记录)

参考链接: How to install BLE Sniffer on nRF52840 Dongle and run it – Jimmys thing 软件环境: Windows 10Python v3.6 or later: 安装地址:Python Releases for Windows | Python.orgWireshark v2.4.6 or later: 安装地址:Wireshark DownloadnRF Connect: 安装地址: n…

哈希算法的用途

什么是哈希算法 一说到哈希算法, 我瞬间就想到了哈希函数、哈希表, 其实他们并不是一回事. 简单来说, 哈希算法就是将任意长度的字符串通过计算转换为固定长度的字符串, 不对, 不光字符串, 应该说是将任意长度的二进制串转换为固定长度的二进制串, 这个转换的过程就是哈希算法…

解决/mnt中有hgfs无共享文件

问题: 已经设置了共享目录,进入 /mnt/hgfs 文件夹,但发现提示没有共享的文件夹 使用以下办法解决(root权限): 解决: 1. 切换到root权限 sudo passwd root 2. 查看当前有哪些共享的目录 vmware-hgfsclient 3.进行挂…

贪婪算法回顾

回顾 还记的贪婪算法么? 如果你不记得了, 看了下面这个例子你一定会想起来, 因为这个例子太普遍了, 几乎每个将贪婪算法的地方, 第一个例子都是它, 言归正传. 问题: 现在有如下课程表, 要将这些课尽可能多的安排在教室A内. 课程名开始时间结束时间语文课9:0010:00数学课9:3…

【安全】基础概念梳理-基本加密方式、数字签名、证书

一、两种基本加密方式 1.1 对称加密 对称加密是指双方持有相同的密钥进行通信,加密速度快。常见的对称加密算法有DES、3DES、AES等。存在问题:通信双方如何获得相同的密钥? 1.2 非对称加密 非对称加密,又称为公开密钥加密&#…

PHP 自动加载

回顾 开始的时候, 如果想在一个php文件中使用其它文件的类或方法, 需要通过include/require方法将文件包含进来. 这种方法的缺点也很明显: 如果需要引入很多文件, 就需要很多的include语句, 不仅不美观, 而且也难免会又遗漏如果多个文件中定义了相同名称的常量, 会导致抛出重…

【坑】云相关

1. NAT NAT(Network Address Translation,网络地址转换:当在专用网内部的一些主机本来已经分配到了本地IP地址(即仅在本专用网内使用的专用地址),但又想和因特网上的主机通信(并不需要加密&…

Pycharm 2019 添加 docker 解释器

打开docker的tls 点击设置: 搜索docker, 添加: 点击解释器选项 添加 选择docker 这里说缺少映射, 先不管 接下来, 创建一个新项目, 在选择解释器的时候, 如果选择刚刚添加的, 会报错, 先选一个能用的, 进到项目再换 在右下角的解释器小部件, 选择我们刚刚添加的 然后就可以正常…

【待补】Wireshark+BLE dongle: BLE数据包捕获以及分析

文章目录前言1. 捕获BLE数据包2. 分析BLE数据包2.1 过滤掉不感兴趣的BLE数据包2.2 利用Wireshark内嵌工具生成图表前言 硬件:Nordic 52840 dongle 软件: Wireshark 1. 捕获BLE数据包 待补充。 2. 分析BLE数据包 2.1 过滤掉不感兴趣的BLE数据包 以自…

js动态添加div

问题 有没有遇到过这样的需求, 在页面上会有不定个input, 点击添加按钮就添加 每次写这玩意好麻烦啊, 把他封装起来, 需要的时候调用就好了 思路 因为每个input标签的name如果相同的话, 在后端接收的时候会出错, 所以我的解决办法就是在name后加上一个数字, 后端用一个循环进…

【坑】Sketch算法——Count-Min Sketch和Universal Sketch

文章目录参考链接一、Sketch算法用来做什么?二、Min-count sketch基础思想:进阶:特点:三、Universal Sketch参考链接 [1] Count-Min Sketch: https://blog.csdn.net/pipisorry/article/details/64126199 [2] Cormode G, Muthukrishnan S. An improved …

css中的单位

前端开发中, 做适配是少不了的, 这就用到了css中的各种长度单位, 做一下总结 在css中, 长度单位分为以下几种 绝对单位: px、in、cm、mm、pt、pc百分比单位: vw、vh、vmin、vmax、%相对单位: em、rem、ex、ch 各单位介绍 px 不用过多介绍, 精确像素 in 寸 cm 厘米 mm…

【5G入门】MCS调制编码方案简介

​ 目录参考资料:1. MCS简介MCS是什么如何选择MCS有哪些MCS可供选择如何配置MCS示例参考资料: 链接: 5G NR Modulation and Coding Scheme – Modulation and Code Rate. 1. MCS简介 MCS是什么 MCS(Modulation and Coding Scheme&#xf…

caffe初体验

caffe是一个深度学习的框架, 具体我也不太清楚, 可以自行百度吧, 我也是刚刚知道有这么一个框架, 才疏学浅啊. 在安装完caffe, 我的第一个想法就是, 别管他是个啥东西, 总得先让我运行一些看一看吧. 刚好, 官方就准备了一些数据, 供我们运行一下看一看使用. 因为我是通过dock…

【安全】进阶的Mosquitto:搭建一个安全的MQTT服务

目录一、基础版Mosquitto安装及运行Mosquitto安装Mosquitto运行二、基础安全版Mosquitto安装及运行(需要输入密码)Mosquitto安装Mosquitto配置Mosquitto测试效果三、安全版Mosquitto安装及运行Mosquitto安装TLS安装Mosquitto配置Mosquitto测试效果注意一…

PHP注释标记整理

什么是注释标记 我们在平常写代码或看别人写的代码时, 在方法的说明注释中经常会有这样的注释: /*** param $num* return array*/上面的*param* return 就是注释标记 注释标记用于生成文档, param指明需要接收的参数, return指明返回值 在使用 phpDocumentor 等工具生成文档…