LoRaWAN网关搭建

这篇具有很好参考价值的文章主要介绍了LoRaWAN网关搭建。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

网关搭建方案

lorawan网关,LoRa,物联网,单片机,驱动开发

LoRaWAN 的入网网关的搭建,我为了图方便。使用了南京仁珏的 LoRaWAN 网关开发组件M-GW1302S-EV。这个开发组件采用树莓派的CM3+作为网关的 SoC ,使用南京仁珏自研的 M-GW1302S 射频模块作为 LoRaWAN 网关的基带芯片。同时,开发组件还集成了 GPS 、 RJ45 以及 4G 模块,比较方便网关的软件开发。

M-GW1302S-EV 的主要接口如下图所示:

lorawan网关,LoRa,物联网,单片机,驱动开发

SX1302

M-GW1302S-EV 使用的 LoRaWAN 基带芯片是 Semtech 的 SX1302 芯片。在 SX1302 前,Semtech 有 SX1301 的 LoRaWAN 基带芯片,SX1302 可以看做是 SX1301 升级版本。M-GW1302S 模块的是参考 Semtech 官方的开发板进行的设计的。SX1302 的内部主要模块如下图所示:

lorawan网关,LoRa,物联网,单片机,驱动开发

SX1302 内部的主要模块先不进行详细说明,有个大概了解即可。目前,能够通过模块快速搭建网关接入 LoRaWAN 服务器,方便进行 LoRaWAN 模块开发即可。

树莓派 CM3+

lorawan网关,LoRa,物联网,单片机,驱动开发

树莓派 CM3+ 以 BCM2837B0 为处理器,拥有 1G DDR2 RAM,10G eMMC,主要的总线外设有:

  • 48 x GPIO
  • 2 x I2C
  • 2 x SPI
  • 2 x UART
  • 2 x SD/SDIO
  • 1 x HDMI 1.3a
  • 1 x USB2 HOST/OTG
  • 1 x DPI
  • 1 x NAND 接口

M-GW1302S-EV 的基本设计把该预留的接口都进行预留了,M-GW1302S-EV 的接口如下图所示:

lorawan网关,LoRa,物联网,单片机,驱动开发

M-GW1302S 模块通过 CM3+ 的 SPI0 接口相连接。GPIO7 连接到了 M-GW1302S 的 LoRa_PERST 管脚。这里需要注意的是 GPIO7 连接到了 M-GW1302S 的 LoRa_PERST 管脚!

软件系统方面,CM3+ 模块可以直接跑树莓派官方的 Raspberry Pi OS 作为运行的系统。搭建 LoRaWAN 网关时,我就直接使用官方带桌面的 Raspberry Pi OS(32bits),作为网关运行的系统。树莓派 CM3+ 怎么安装系统就不再赘述了。

构建网关软件系统

Semtech 针对 SX1302 提供了官方的 sx1302_hal 代码库,通过这个代码库,可以直接参考官方的网关设计,编译工程后就可以直接在官方的参考设计运行网关的程序。不过,由于官方的参考设计一直在不断的迭代,导致 M-GW1302S 的设计与官方的参考设计有了一些偏差,M-GW1302S 自己也在 Gitee 上保留了自己的代码仓库,可以拿过来直接用。我为了方便,也在 Gitee 上 Fork 了自己的仓库。

由于 CM3+ 跑的是 Raspberry Pi OS 系统,可以直接接上鼠标键盘像操作 PC 一样进行操作。后续的操作,可以直接在 Raspberry Pi OS 的桌面呼叫命令行进行操作。根据我自己的个人习惯,我是通过 SSH 直接登陆到了 CM3+ 中进行下列操作。

获取源代码

在自己指定的目录下,从 gitee 获取 gw1302s 的源码:

git clone https://gitee.com/sage-xiong/gw1302s.git

编译工程

进入 gw1302s 工程目录:

cd gw1302s

PS: gw1302s 工程的以下操作都是在工程的根目录进行操作的,这个是需要注意的地方。

清空结果并编译源码:

make clean all

运行了 make clean all后,CM3+ 就开始构建工程。只需要等待工程编译完成即可。编译完成后,就像下面的结果。

lorawan网关,LoRa,物联网,单片机,驱动开发

至此,gw1302s 的官方源码构建完毕,可以根据构建的结果安装应用程序了。

应用程序安装

生成 ssh 秘钥

gw1302s 编译结束后,是通过 ssh-copy-id 的方式,讲编译的结果安装到需要运行的网关上的。因此,在安装可执行文件前,需要先生成本级的秘钥和证书:

ssh-keygen -t rsa

复制可执行文件

使用 ssh-copy-id 复杂可执行文件。其中的 userhost_dest是安装主机的用户名主机地址

ssh-copy-id -i ~/.ssh/id_rsa.pub user@host_dest

这里由于我使用的 CM3+ 账户名是 pi 并且是在 CM3+ 的本地进行安装,主机地址直接填 localhost 即可。所以,直接在命令行输入:

ssh-copy-id -i ~/.ssh/id_rsa.pub pi@localhost

由于我已经把可执行文件安装了,饭了一下的结果:

lorawan网关,LoRa,物联网,单片机,驱动开发

安装配置项

执行 make install_conf安装配置项。

make install_conf

配置项安装完成后,就可以在 gw1302s 的目录下的 bin 目录下,看到工程生成的所有文件了:

.
├── chip_id
├── global_conf.json
├── global_conf.json.sx1250.CN490
├── global_conf.json.sx1250.EU868
├── global_conf.json.sx1250.US915
├── global_conf.json.sx1257.EU868
├── gwstart.sh
├── lora_pkt_fwd
├── net_downlink
├── reset_lgw.sh
├── test_loragw_cal
├── test_loragw_capture_ram
├── test_loragw_counter
├── test_loragw_gps
├── test_loragw_hal_rx
├── test_loragw_hal_tx
├── test_loragw_i2c
├── test_loragw_reg
├── test_loragw_spi
├── test_loragw_spi_sx1250
└── update_gwid.sh

bin 目录下的几个主要文件的功能是:

  • global_conf.*: 网关配置文件,配置网关支持的频段信息,连接的服务器等。
  • gwstart.sh: 网关启动脚本,配置好后,可以直接运行启动网关的 LoRaWAN 程序。
  • test_xxx: 网关测试用的可执行文件
  • update_gwid.sh: gwid 更新脚本,用于配置文件的 gwid 更新。
  • lora_pkt_fwd: 网关的 packet_foward 程序,直接与 LoRaWAN 服务器通过 UDP 进行通讯。
  • reset_lgw.sh: sx1302 复位脚本,用于复位 M-GW1302S 模块。

修改 reset_lgw.sh 脚本

lorawan网关,LoRa,物联网,单片机,驱动开发

根据 M-GW1302S-EV 的原理图,树莓派 CM3+ 的 GPIO7 管脚与 M-GW1302S 的LoRa_PERST 管脚相连。SX1302 芯片在操作寄存器前,需要先对芯片进行复位。然而, Raspberry Pi OS 的系统更新后,使用 sudo raspi-config打开 spi 总线后,reset_lgw.sh脚本执行总是失败,导致 gwstart.sh网关启动脚本无法正确执行。查看 reset_lgw.sh脚本的内容:

#!/bin/sh

# This script is intended to be used on SX1302 CoreCell platform, it performs
# the following actions:
#       - export/unpexort GPIO7 used to reset the SX1302 chip
#
# Usage examples:
#       ./reset_lgw.sh stop
#       ./reset_lgw.sh start

# GPIO mapping has to be adapted with HW
#

SX1302_RESET_PIN=7

WAIT_GPIO() {
    sleep 0.1
}

init() {
    # setup GPIOs
    echo "$SX1302_RESET_PIN" > /sys/class/gpio/export; WAIT_GPIO

    # set GPIOs as output
    echo "out" > /sys/class/gpio/gpio$SX1302_RESET_PIN/direction; WAIT_GPIO
}

reset() {
    echo "CoreCell reset through GPIO$SX1302_RESET_PIN..."

    # write output for SX1302 CoreCell reset
    echo "1" > /sys/class/gpio/gpio$SX1302_RESET_PIN/value; WAIT_GPIO
    echo "0" > /sys/class/gpio/gpio$SX1302_RESET_PIN/value; WAIT_GPIO
}

term() {
    # cleanup all GPIOs
    if [ -d /sys/class/gpio/gpio$SX1302_RESET_PIN ]
    then
        echo "$SX1302_RESET_PIN" > /sys/class/gpio/unexport; WAIT_GPIO
    fi
}

case "$1" in
    start)
    term # just in case
    init
    reset
    ;;
    stop)
    reset
    term
    ;;
    *)
    echo "Usage: $0 {start|stop}"
    exit 1
    ;;
esac

exit 0

查看反馈结果后,发现是

echo "$SX1302_RESET_PIN" > /sys/class/gpio/export;

执行时,SX1302_RESET_PIN的 GPIO7 一直被占用,导致无法对 GPIO7 进行复位操作,最后导致无法复位 SX1302 模块。

由于在 Raspberry Pi OS 系统更新前,这个脚本是没有问题可以直接运行的,导致我查了很久都没有查出具体的问题。最后,改用 Raspi 提供的 gpio 操作工具,改写 reset_lgw.sh脚本如下:

#!/bin/sh

# This script is intended to be used on SX1302 CoreCell platform, it performs
# the following actions:
#       - export/unpexort GPIO7 used to reset the SX1302 chip
#
# Usage examples:
#       ./reset_lgw.sh stop
#       ./reset_lgw.sh start

# GPIO mapping has to be adapted with HW
#

SX1302_RESET_PIN=7

WAIT_GPIO() {
    sleep 0.1
}

init() {
    # set GPIOs as output
    sudo raspi-gpio set $SX1302_RESET_PIN op; WAIT_GPIO
}

reset() {
    echo "CoreCell reset through GPIO$SX1302_RESET_PIN..."

    # write output for SX1302 CoreCell reset
    sudo raspi-gpio set $SX1302_RESET_PIN dh; WAIT_GPIO
    sudo raspi-gpio set $SX1302_RESET_PIN dl; WAIT_GPIO
}

term() {
    # cleanup all GPIOs
    if [ -d /sys/class/gpio/gpio$SX1302_RESET_PIN ]
    then
        sudo raspi-gpio set $SX1302_RESET_PIN op; WAIT_GPIO
    fi
}

case "$1" in
    start)
    term # just in case
    init
    reset
    ;;
    stop)
    reset
    term
    ;;
    *)
    echo "Usage: $0 {start|stop}"
    exit 1
    ;;
esac

exit 0

再次运行,reset_lgw.sh脚本,发现没有问题,启动 gwstart.sh可以正常启动 LoRaWAN Gatew 的应用程序。

Gateway_ID set to fffeb827ebff48d6 in file ./global_conf.json
*** Packet Forwarder ***
Version: 1.0.5
*** SX1302 HAL library version info ***
Version: 1.0.5;
***
INFO: Little endian host
INFO: found configuration file global_conf.json, parsing it
INFO: global_conf.json.sx1250.CN490 does contain a JSON object named SX130x_conf, parsing SX1302 parameters
INFO: spidev_path /dev/spidev0.0, lorawan_public 1, clksrc 0, full_duplex 0
INFO: antenna_gain 0 dBi
INFO: Configuring legacy timestamp
INFO: Configuring Tx Gain LUT for rf_chain 0 with 16 indexes for sx1250
INFO: radio 0 enabled (type SX1250), center frequency 471400000, RSSI offset -207.000000, tx enabled 1, single input mode 1
INFO: radio 1 enabled (type SX1250), center frequency 475000000, RSSI offset -207.000000, tx enabled 0, single input mode 1
INFO: Lora multi-SF channel 0>  radio 0, IF -300000 Hz, 125 kHz bw, SF 5 to 12
INFO: Lora multi-SF channel 1>  radio 0, IF -100000 Hz, 125 kHz bw, SF 5 to 12
INFO: Lora multi-SF channel 2>  radio 0, IF 100000 Hz, 125 kHz bw, SF 5 to 12
INFO: Lora multi-SF channel 3>  radio 0, IF 300000 Hz, 125 kHz bw, SF 5 to 12
INFO: Lora multi-SF channel 4>  radio 1, IF -300000 Hz, 125 kHz bw, SF 5 to 12
INFO: Lora multi-SF channel 5>  radio 1, IF -100000 Hz, 125 kHz bw, SF 5 to 12
INFO: Lora multi-SF channel 6>  radio 1, IF 100000 Hz, 125 kHz bw, SF 5 to 12
INFO: Lora multi-SF channel 7>  radio 1, IF 300000 Hz, 125 kHz bw, SF 5 to 12
INFO: Lora std channel> radio 1, IF -200000 Hz, 250000 Hz bw, SF 7, Explicit header
INFO: FSK channel> radio 1, IF 300000 Hz, 125000 Hz bw, 50000 bps datarate
INFO: global_conf.json does contain a JSON object named gateway_conf, parsing gateway parameters
INFO: gateway MAC address is configured to FFFEB827EBFF48D6
INFO: server hostname or IP address is configured to "localhost"
INFO: upstream port is configured to "1700"
INFO: downstream port is configured to "1700"
INFO: downstream keep-alive interval is configured to 10 seconds
INFO: statistics display interval is configured to 30 seconds
INFO: upstream PUSH_DATA time-out is configured to 100 ms
INFO: packets received with a valid CRC will be forwarded
INFO: packets received with a CRC error will NOT be forwarded
INFO: packets received with no CRC will NOT be forwarded
INFO: GPS serial port path is configured to "/dev/ttyS0"
INFO: Reference latitude is configured to 0.000000 deg
INFO: Reference longitude is configured to 0.000000 deg
INFO: Reference altitude is configured to 0 meters
INFO: Beaconing period is configured to 0 seconds
INFO: Beaconing signal will be emitted at 869525000 Hz
INFO: Beaconing datarate is set to SF9
INFO: Beaconing modulation bandwidth is set to 125000Hz
INFO: Beaconing TX power is set to 14dBm
INFO: Beaconing information descriptor is set to 0
INFO: global_conf.json does contain a JSON object named debug_conf, parsing debug parameters
INFO: got 2 debug reference payload
INFO: reference payload ID 0 is 0xCAFE1234
INFO: reference payload ID 1 is 0xCAFE2345
INFO: setting debug log file name to loragw_hal.log
WARNING: [main] impossible to open /dev/ttyS0 for GPS sync (check permissions)
CoreCell reset through GPIO7...
INFO: Configuring SX1250_0 in single input mode
INFO: Configuring SX1250_1 in single input mode
INFO: [main] concentrator started, packet can now be received
INFO: concentrator EUI: 0x0016c001ff1f3e67
INFO: [down] PULL_ACK received in 2 ms
INFO: [down] PULL_ACK received in 1 ms

修改 global.json 配置连接到本地服务器

启动脚本 gwstart.sh的内容非常简单:

#!/bin/sh

cd /home/pi/gw1302s/bin
./update_gwid.sh ./global_conf.json
./lora_pkt_fwd

第 2 句脚本是更新 global_conf.json内部的网关的 gateway_ID属性唯一。

第 3 句是启动 lora_pkt_fwd程序与 LoRaWAN 服务器连接。 lora_pkt_fwd在没有参数的情况下,会以相同目录的 global_conf.json作为全局的配置启动。

global_conf.json默认情况下的文件包含了许多内容,目前只需要网关能先连接服务器,所以只限关注 gateway_conf主键下的内容:

"gateway_conf": {
    "gateway_ID": "fffeb827ebff48d6",
    /* change with default server address/ports */
    "server_address": "localhost",
    "serv_port_up": 1700,
    "serv_port_down": 1700,
    /* adjust the following parameters for your network */
    "keepalive_interval": 10,
    "stat_interval": 30,
    "push_timeout_ms": 100,
    /* forward only valid packets */
    "forward_crc_valid": true,
    "forward_crc_error": false,
    "forward_crc_disabled": false,
    /* Beaconing parameters */
    "beacon_period": 0,
    "beacon_freq_hz": 869525000,
    "beacon_datarate": 9,
    "beacon_bw_hz": 125000,
    "beacon_power": 14,
    "beacon_infodesc": 0
}

gateway_conf配置的是网关的一些基本信息,目前只需要关注一下几项:

  • gateway_ID: LoRaWAN 网关的设备 ID 在服务器接入时有用;
  • server_address: LoRaWAN 服务器 IP 地址,默认是腾讯云服务器,根据实际的需要修改成自己的 LoRaWAN 服务器就好;
  • serv_port_up: LoRaWAN 网关上行数据端口,UDP 端口号;
  • serv_port_down: LoRaWAN 网关下行数据端口,UDP 端口号;

我的 LoRaWAN 服务器是我自己搭建的服务器,所以,修改 server_address服务器的地址为 192.168.10.125然后保存即可。

然后重启网关服务:

cd ~/gw1302s/bin && ./gwstart.sh

到此,LoRaWAN 网关的基本配置就完成了。

Chirpstack 服务器添加网关

LoRaWAN 网关的接入,还需要在 Chirpstack 服务器上添加网关的 gateway_ID才能够在 Chirpstack 服务器的页面上看见 LoRaWAN 网关的相关信息。

登陆 Chirpstack

使用浏览器,访问 Chirpstack 地址进入登陆页。我使用自己搭建的 Chirpstack 服务器,所以直接访问 192.168.10.125:8080

lorawan网关,LoRa,物联网,单片机,驱动开发

默认的登陆用户名是 admin/admin

登陆完成后,直接在后台的左侧选项卡,选择 Gateways选项,进入 LoRaWAN 网关相关的配置页面。

lorawan网关,LoRa,物联网,单片机,驱动开发

按照图中的步骤完成后,就可以进入网关添加页面。

lorawan网关,LoRa,物联网,单片机,驱动开发

在网关添加页面中的 Gateway ID 栏填写上 global_conf.json中的 gateway_ID主键内容,就可以完成 LoRaWAN Gateway 的添加了,点击网页底部的 submit完成网关添加。

然后,退回 Gateways页面,就可以看到已经添加的网关:

lorawan网关,LoRa,物联网,单片机,驱动开发

等待一小段时间,重新刷新页面,就可以发现网关已经成功上线:

lorawan网关,LoRa,物联网,单片机,驱动开发

到此,LoRaWAN 网关的构建和服务器接入就全部完成了。文章来源地址https://www.toymoban.com/news/detail-788892.html

到了这里,关于LoRaWAN网关搭建的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 腾讯云物联网开发平台 LoRaWAN 透传接入 更新版

    之前有一篇文章介绍LoRaWAN透传数据,不过还是用物模型+云端数据解析脚本,不是真正的透传。腾讯云物联网开发平台也支持对LoRaWAN原始数据的透传、转发。今天来介绍下。 腾讯云 IoT Explorer 是腾讯云主推的一站式物联网开发平台,IoT 小能手从设备侧开发、平台功能操作、应

    2023年04月26日
    浏览(37)
  • 搭建自己的私有 开源LoRaWAN 网络服务器(The ThingsStack)---之配置

    这是使用 Docker 在您自己的硬件上安装 Things Stack Enterprise 或开源代码以运行您自己的私有 LoRaWAN® 网络服务器的指南。 运行 The Things Stack 的方法有多种。 Things Stack 开源和企业发行版旨在在您自己的硬件上运行,本指南也对此进行了介绍。 对于具有高吞吐量的高可用生产云部

    2024年02月12日
    浏览(37)
  • 在win10下搭建linux环境的LORAWAN服务器chirpstack

    本篇博文来介绍一下win10下搭建linux环境的LoRaWAN服务器chirpstack部署。 输入wsl --install命令 由于博主已经安装了WSL因此会出现查看WSL帮助文本界面 出现这种情况输入wsl --list --online 输入wsl --install -d 博主这里用的Ubuntu-20.04版输入指令是: wsl --install -d Ubuntu-20.04 下载完成后会出现

    2024年04月27日
    浏览(25)
  • 【LoRaWAN_End_Node】基于LoRaWAN模组代码解析

    基于lorawan模组的节点代码解析,可实现lorawan节点接入标准lorawan网关 获取博文,请关注博主,点赞+收藏博客并在评论区加联系方式获取 实验:lm401节点在修改的 LoRaWAN_End_Node 代码上实现数据的上报,以及接收平台数据并作出反应 版权声明:本文为博主原创文章,遵循 CC 4.

    2023年04月15日
    浏览(17)
  • 物联网毕设 - 基于单片机的智能鱼缸系统设计与实现 - 嵌入式 物联网 stm32 51单片机 智能鱼缸

    Hi,大家好,今天向大家介绍一个 单片机项目, 大家可用于 课程设计 或 毕业设计 基于单片机的智能鱼缸系统设计与实现 🔥 项目分享与指导: https://gitee.com/sinonfin/sharing 近年以来,随着我国综合实力飞速飙升,人们对物质和精神生活质量的要求也不断提升,各式各样的智能

    2024年02月03日
    浏览(50)
  • 单片机项目分享 单片机(stm32)远程智能宠物喂养系统 - 物联网 esp8266

    🔥 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。 为了大家能够顺利以及最少的精力通过毕设,学长分享优质毕业设计项目,今天

    2024年02月19日
    浏览(48)
  • 单片机项目分享 单片机 图像分类 智能识别机器人 - 物联网 深度学习 AI

    🔥 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。 为了大家能够顺利以及最少的精力通过毕设,学长分享优质毕业设计项目,今天

    2024年01月21日
    浏览(37)
  • 单片机项目分享 stm32机器视觉的人脸识别系统 - 单片机 物联网 嵌入式

    🔥 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。 为了大家能够顺利以及最少的精力通过毕设,学长分享优质毕业设计项目,今天

    2024年01月22日
    浏览(59)
  • 【单片机毕设选题】stm32实现车牌识别系统 -物联网 嵌入式 单片机

    🔥 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。 为了大家能够顺利以及最少的精力通过毕设,学长分享优质毕业设计项目,今天

    2024年02月20日
    浏览(44)
  • 单片机项目分享 基于stm32的便携用电功率统计系统 -物联网 嵌入式 单片机

    🔥 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。 为了大家能够顺利以及最少的精力通过毕设,学长分享优质毕业设计项目,今天

    2024年02月19日
    浏览(76)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包