IoT Pi Pro LoRaWAN 设备开发

更新时间:
2023-11-30
下载文档

IoT Pi Pro LoRaWAN 设备开发

本章将介绍如何使用 MS-RTOS 的 LoRaWAN 组件在 IoT Pi Pro 上开发一个能接入到 EdgerOS 的 LoRa 温度监测设备。它通过 LoRaWAN 协议将数据传输到 EdgerOS,用户可以使用该设备远程监测温度。

硬件准备

SX1278 模块

SX1278 是 Semtech 公司在 2013 年推出的一款远距离、低功耗、高性能的物联网无线收发器,具备特殊的 LoRa 调制方式,在一定程度上增加了通信距离。

本实验使用的是翼辉信息的 IoT Pi Pro 开发板和安信可科技 AI-Thinker 的 SX1278 模块(型号为 Ra-02):

LoRa-ra-02

连接 SX1278 模块到 IoT Pi Pro

使用杜邦线将 SX1278 模块的引脚与 IoT Pi Pro 对应的引脚连接,SX1278 模块的引脚与 IoT Pi Pro 引脚的对应关系如下表所示:

SX1278 模块引脚IoT Pi Pro 引脚功能
3.3v3v33.3V供电
RSTPA2复位
DIO0PE8数字 IO0
DIO1PE4数字 IO1
DIO2PB12数字 IO2
DIO3PA12数字 IO3
DIO4PD4数字 IO4
NSSPA5SPI 片选输入
MOSIPC3SPI 数据输入
MISOPC2SPI 数据输出
SCKPB13SPI 时钟输入
GNDGND接地

需要在 SX1278 模块的 I-PEX 接口接入弹簧天线,实物连接如下图所示:

connection

软件准备

IoT Pi Pro 开发环境搭建

参考《IoT Pi Pro 快速入门》,完成以下步骤:

  • 完成 MS-RTOS 开发工具下载和安装

  • 在 MS-RTOS 云开发平台上完成 msrtos_base_sdk 配置和下载,配置 MS-RTOS 时,需要手动勾选 libmsdriver、esp_at_net、fatfs、littlevgl、st_touchgfx、cjson、mbedtls、libsddc 这几个组件,如下图所示:

    msrtoscloudide

  • 在 IoT studio 上完成 msrtos_base_sdk 工程导入和编译

  • 在 IoT studio 上完成 bspstm32h7xx 工程的下载、导入和编译

  • 在 IoT studio 上完成 bootstm32h7xx 工程的下载、导入和编译,如下图所示:

    boot

开发应用

获取 LoRaWAN 组件

进入 msrtos_base_sdk 根目录,使用 git 工具从 MS-RTOS github 社区open in new window 下载 LoRaWAN 组件,命令如下:

git clone https://github.com/ms-rtos/lorawan.git

下载完成后右键 msrtos_base_sdk 工程选择 Refresh 菜单项刷新工程,刷新完成后将出现 lorawan 组件,如下图所示:

lorawan-module

msrtos_base_sdk 根目录下的 Makefile 中添加 lorawan,如下图所示:

Makefile

配置入网参数

msrtos_base_sdk\lorawan\src\ms_lora_config.h 文件为 lorawan 组件的配置头文件,相关配置如下所示:

#define ACTIVE_REGION                 LORAMAC_REGION_CN470

#define LORA_CFG_DEV_EUI              {0x47, 0x36, 0x54, 0x9f, 0x00, 0x31, 0x00, 0x05}
#define LORA_CFG_JOIN_EUI             {0x52, 0x69, 0x73, 0x69, 0x6e, 0x67, 0x48, 0x46}
#define LORA_CFG_APP_KEY              {0x2b, 0x7e, 0x15, 0x16, 0x28, 0xae, 0xd2, 0xa6,\
                                       0xab, 0xf7, 0x15, 0x88, 0x09, 0xcf, 0x4f, 0x3c}
#define LORA_CFG_SE_PIN               {0xFF, 0x00, 0x00, 0xE5}
#define LORA_CFG_CHAN_MASK            {MS_BIT(0), 0, 0, 0, 0, 0}

通过修改配置宏的值来修改相应的入网和工作参数,配置宏的解析如下表所示:

配置宏描述
ACTIVE_REGION有效区域,中国区使用 CN470 频段,故定义为 LORAMAC_REGION_CN470
LORA_CFG_DEV_EUI设备的 DevEUI,由长度为 8 的 uint8_t 型数组构成
LORA_CFG_JOIN_EUI设备的 JoinEUI,由长度为 8 的 uint8_t 型数组构成
LORA_CFG_APP_KEY设备的 AppKey,由长度为 16 的 uint8_t 型数组构成
LORA_CFG_CHAN_MASK信道掩码,由长度为 6 的 uint16_t 型数组构成 96 位的位图,第 0 位为 1,即使用 0 号信道

除了使用配置宏 ACTIVE_REGION 配置区域外,还需要分别在 msrtos_base_sdk\lorawan\iblorawan.mkmsrtos_base_sdk\lorawan\classa_test.mk 文件中添加预定义宏 REGION_CN470,如下图所示:

liblorawan.mk

classa-test.mk

配置端口号

msrtos_base_sdk\lorawan\src\classa_test.c 文件中修改宏 LORAWAN_APP_PORT 的值来设置应用端口号,参考程序如下:

/*!
 * LoRaWAN application port
 */
#define LORAWAN_APP_PORT                            2

配置消息类型

上报消息时,如果需要接收者应答就把 msrtos_base_sdk\lorawan\src\classa_test.c 文件中的宏 LORAWAN_CONFIRMED_MSG_ON 设置为 true, 如果不需要接收者应答则把 LORAWAN_CONFIRMED_MSG_ON 设置为 false。设置为无需应答消息的参考程序如下:

/*!
 * LoRaWAN confirmed messages
 */
#define LORAWAN_CONFIRMED_MSG_ON                    false

LoRaWAN 的消息类型及描述如下表所示:

消息类型描述
Unconfirmed-data message接收者无需应答的消息
Confirmed-data message接收者需要应答的消息
Multicast message多播消息
Proprietary messages专用消息

上传温度值

msrtos_base_sdk\lorawan\src\classa_test.c 文件中定义变量 temperatureValue,用于保存温度传感器的值,代码如下:

/*!
 *  temperature value
 */
static float temperatureValue = 25.52;

msrtos_base_sdk\lorawan\src\classa_test.c 文件的函数 PrepareTxFrame 中,填充需要发送数据内容和数据长度,将要上传的温度值 temperatureValue 填充到应用数据缓冲区 AppDataBuffer 中,数据长度设置到应用数据大小变量 AppDataSize 中,参考代码如下所示:

/*!
 * \brief   Prepares the payload of the frame
 */
static void PrepareTxFrame( uint8_t port )
{
    switch( port )
    {
    case 2:
        {
            /*
             * 把温度值填充到应用数据缓冲区
             */
            AppDataSizeBackup = AppDataSize = sizeof(temperatureValue);
            memcpy1(AppDataBuffer, (uint8_t *)&temperatureValue, AppDataSize);
        }
        break;
    case 224:
        if( ComplianceTest.LinkCheck == true )
        {
            ComplianceTest.LinkCheck = false;
            AppDataSize = 3;
            AppDataBuffer[0] = 5;
            AppDataBuffer[1] = ComplianceTest.DemodMargin;
            AppDataBuffer[2] = ComplianceTest.NbGateways;
            ComplianceTest.State = 1;
        }
        else
        {
            switch( ComplianceTest.State )
            {
            case 4:
                ComplianceTest.State = 1;
                break;
            case 1:
                AppDataSize = 2;
                AppDataBuffer[0] = ComplianceTest.DownLinkCounter >> 8;
                AppDataBuffer[1] = ComplianceTest.DownLinkCounter;
                break;
            }
        }
        break;
    default:
        break;
    }
}

配置消息上传周期

msrtos_base_sdk\lorawan\src\classa_test.c 文件中修改宏 APP_TX_DUTYCYCLE 的值来设置消息的上传周期,参考代码如下:

/*!
 * Defines the application data transmission duty cycle. 5s, value in [ms].
 */
#define APP_TX_DUTYCYCLE                            5000

编译 LoRaWAN 组件

选中 msrtos_base_sdk 工程,点击编译按钮,将编译 msrtos_base_sdk 工程的组件,编译完成后,会在 lorawan/Debug 目录生成 classa_test.bin 文件,该文件就是 LoRaWAN CLASSA 模式的应用程序镜像,如下图所示:

Build-Project

烧写镜像

使用 MS-RTOS AutoTester 烧写镜像,请参考《IoT Pi Pro 快速入门》完成 bootstm32h7xx.binbspiotpipro.binclassa_test.bin 镜像烧写,注意不同的镜像需要烧写到不同的地址,如下表所示:

镜像烧写地址
bootstm32h7xx.bin0x08000000
bspiotpipro.bin0x90000000
classa_test.bin0x90100000

验证功能

验证前,先在手机的爱智 App 上开启 EdgerOS 的 LoRa 服务,参考《LoRaWAN 协议介绍》完成以下步骤:

  1. 完成 EdgerOS LoRa 服务配置,通道 1 的信道需要与程序中的 LORA_CFG_CHAN_MASK 一致(如 0 号信道),如下图所示:

    select-channel
  2. 完成 LoRaWAN 设备二维码生成,需要使用程序中指定的入网参数生成的二维码,如下图所示:

    device-qrcode

  3. 完成 LoRaWAN 设备添加,添加成功后如下图所示:

    added-device

完成以上 3 个步骤后点击 MS-RTOS Auto Tester GO 按钮或对 IoT Pi Pro 进行复位,IoT Pi Pro 的 CPU 将开始运行,MS-RTOS 启动后,会自动运行 FLASH 0x90100000 地址处的 classa_test 应用程序,IoT Pi Pro 入网成功后会打印:JOINED 字样,同时会显示激活类型、设备地址和数据速率,如下图所示:

Shell-terminal

该程序中实现的功能及其相关描述如下表所示:

功能端口消息类型消息数据数据类型消息周期
温度监测2Unconfirmed-data message温度值浮点型5s
文档内容是否对您有所帮助?
有帮助
没帮助