STM32整合ATK-01-LORA模块实现定向传输实现三点组网(一主加二从)案例

2023-05-16

背景

应物联网无网的环境要求,需要使用Lora模块进行组网以此传输数据,本来用了正点原子的Lora模块,以正点的强大资料支持,我本应该非常熟悉这些组网操作了,但硬件调试实在是让我差不多很苦恼,一方面需要不断的去排查接线问题,一方面又要去关注软件代码是否已经发送了数据。

原因:因为用此lora模块发送完数据后,用TTL在桌面串口助手上查看,但它没有回馈,这意味着不知道是否它到底发送是否成功,不知道是否有其他地方被我疏忽了,欢迎同行赐教。

配上正点的lora

接线

这里在我测试的时候,有时成功后过一段时间再次进行测试则又连不上,也许是因为接线的问题(这是硬件调试的通病)。

关于更新固件

解决用上位机设置后丢失保存的问题。

正点原子LORA模块ATK-01固件升级与断电不丢失设置参数_昊月光华的博客-CSDN博客

定向传输

引用正点的文档

1)点对点 1,模块发送时可修改地址和信道,用户可以指定数据发送到任意地址和信道。 2,可以实现组网和中继功能。 发送模块(1 个):地址+信道+数据 接收模块(1 个):数据 点对点(透传):模块地址、信道、速率相同 点对点(定向):模块地址可变、信道可变,速率相同 图 2.4.2.1 定向传输(点对点) 例如: 设备 A 地址 0X1234,信道 0X17; 设备 B 地址 0xABCD,信道 0X01; 设备 C 地址 0X1256,信道 0x13。 设备 A 发送:AB CD 01 AA BB CC DD 设备 B 接收:AA BB CC DD 设备 C 接收:无 设备 A 发送:12 56 13 AA BB CC DD 设备 B 接收:无 设备 C 接收:AA BB CC D

STM32整合

像精英版,探索版都提供了lora的ATK接口,(这里的ATK-MOUDLE接口对应lora上的MD0和AUX对应的引脚需要拉低)省去了接线的麻烦。

贯彻与大道至简的原则,我没有像正点那样在程序运行过程中去通过AT指令更改LORA的工作模式,能通过先配置再使用再好不过(当做无线串口用是再方便不过的了)

先在一台电脑通过USB转TTL接多个LORA节点做测试:

发送的前3个字节为16进制,这里在调试的时候需要注意。

比如我以三个lora为例(下面分别叫做A,B,C):定向传输信道以不同地址可以不同,速率必须相同

Alora:地址613(16位 0-65535) 信道为15

Blora:地址614(16位 0-65535) 信道为15

Clora:地址615(16位 0-65535) 信道为15(最大信道为32,越好的LORA模块,信道数量越多,受相邻信道干扰的可能性越小!)

A和B发送给C(让其做中心节点)的实例:

C的地址为615 信道为15 其十六进制为 0X02 0X67 0X0F。当让一台电脑接多个LORA节点做测试时,发送配置为16进制(HEX格式发送),每两位为一个字节,所以测试发送的数据必须是偶数。至于为什么我写得如此详细,是因为发送成功才能看到结果,发送失败是没有任何错误回馈的!这为了排查是软件原因还是硬件原因。

Alora ,Blora发送

Clora收到:

STM32测试

配置串口为DMA的发送模式,串口的全局中断,串口DMA发送中断打开。

//定向传输 信道加地址
u8 Rx3sBuf[300]={0X02,0X67,0X0F}; // Rx3发送数据缓存数组
#define LoraData  "{\"data\": \"%s\"}"
//通过Lora发送给巡检中心节点
void SendMessageByUsart3(const char * src){

    char  temp[100]={0};

     u16 len=0;
  
    //清空缓存数组
    memset(Rx3sBuf,0x00,sizeof(Rx3sBuf));
    //设置报文前缀
    Rx3sBuf[0]=0x02;
    Rx3sBuf[1]=0x67;
    Rx3sBuf[2]=0x0F;
       sprintf(temp, LoraData, src);
           len = strlen(temp);
        temp[len++]='\r';
        temp[len++]='\n';
        temp[len]='\0';

       strcat(Rx3sBuf, temp);
      
       HAL_UART_Transmit_DMA(&huart3,Rx3sBuf,len+3);
}

用Cloira用USB转TTL接在电脑上,测试正确、

以前相关

正点原子Lora无线串口的透明传输点对点通信及其注意事项_lora点对点通信_昊月光华的博客-CSDN博客

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

STM32整合ATK-01-LORA模块实现定向传输实现三点组网(一主加二从)案例 的相关文章

  • lemon源码分析

    基本概念见上篇 lemon源码基本概念整理 1 follow集 对于如下4条产生式 program 61 expr TK SEM expr 61 expr TK IMPL expr expr 61 TK LPAREN expr TK RPA

随机推荐

  • Tcl脚本初步学习

    1 命令 Tcl 是一门基于命令的脚本语言 xff0c 每个命令通过换行符或分好隔开 每条命令都包含一个或多个单词 xff0c 第一个单词是命令名 xff0c 其他单词是命令的参数 xff0c 如 xff1a 命令 命令名 参数 set a
  • SQLite3源码学习(31) WAL日志的锁机制

    1 锁的原理 先来回顾一下回滚日志的文件锁 xff0c 之前的锁是针对数据库文件加锁的 xff0c 有4种类型 xff0c 分别是shared reserverd pending和exclusive 在WAL日志模式下不再使用原来的锁 xf
  • QGC调试px4固件飞控

    文章目录 前言一 开源软件地址二 硬件接线三 无人机调试1 刷固件2 选机架3 校准传感器4 校准遥控器5 飞行模式设置6 电源设置7 查看电机8 试飞 总结 前言 开源无人机调试 xff1a 硬件 xff1a pixhawk 2 4 8
  • CMake 基本使用方法

    1 学习背景 C语言工程使用make来构建工程 xff0c 但是对于大型工程来说文件的依赖关系很复杂 xff0c 手写makefile非常麻烦 xff0c 一般开源代码的构建方式都是使用autotool来配置编译环境和自动生成makefil
  • 嵌入式操作系统学习(3)FreeRTOS的任务调度机制

    1 任务状态 FreeRTOS可以创建多个任务 xff0c 但是对于单核cpu来说 xff0c 在任意给定时间 xff0c 实际上只有一个任务被执行 xff0c 这样就可以把任务分成2个状态 xff0c 即运行状态和非运行状态 当任务处于运
  • GTK+开发环境搭建

    一般讲到GUI程序开发 xff0c 大家都会想到C 43 43 等面向对象的高级语言 xff0c 而认为C语言不能做界面 C语言也可以用来写界面 xff0c GTK 43 就是一个用来写界面的库 xff0c 它本身就是用C语言写的 xff0
  • ▲什么是迭代器?迭代器有什么作用?

    什么是迭代器 xff1f 先说说它是干嘛的吧 xff01 迭代器的作用是用来访问容器 xff08 用来保存元素的数据结构 xff09 中的元素 xff0c 所以使用迭代器 xff0c 我们就可以访问容器中里面的元素 没错 xff01 这和访
  • 【C/C++】面试题:函数指针

    问题1 xff1a 如何把一个类的成员函数赋值给空指针 xff1f 他的回答是 xff1a 函数指针应该加类域 正确 接下来再问 xff0c 如果要赋值给一个没有类域的指针 xff0c 应该怎么办 xff1f 他说 xff1a 不能那样赋值
  • 机器学习环境搭建:GTX970+Ubutnu1404_64bit+TensorFlow(GPU)

    xfeff xfeff TF的GPU版本需要安装CUDA和cuDNN xff0c 而在Ubuntu中安装显卡驱动稍微麻烦一点 下面的安装比较简单 xff1a 1 检查显卡支持情况 https developer nvidia com cud
  • USB设备的插入检测

    1 USB的插入检测机制 xff1a USB端口的D 43 和D 均用一个15k的电阻接地 xff0c 当无设备接入时 xff0c 均处于低电平 xff1b 在设备端在D 43 xff08 表示高速设备或者全速设备 xff09 或者D xf
  • Keil MDK 安装pack包

    安装pack包 pack包安装有两种方法 xff0c 一种是在keil中直接更新 xff0c 另一种是到官网下载pack包然后安装 我比较推荐第二种方法 xff0c 第一种方法很大概率会失败 xff08 这里以STM32F103c8单片机为
  • Java中flush()的使用

    对于Java中的文件操作 xff0c 常见的有FileWriter 和FileReader 有时不注意写flush 会发现写入数据或是读取数据错误 xff0c 比如 xff1a package lxt import java io File
  • Mysql查询(以xx字符开头,以xx字符结尾,第几个字符是xxx)

    需要弄清两件事 xff1a 1 xff1a 表示占多个字符 2 一个下划线表示占一个字符 xff0c 汉字所占字符与其编码集有关 如名称以xxx字符开头的条件 xff1a where name REGEXP UML REGEXP函数就是以查
  • 局域网内用JAVA建立MQTT客户端监听MQTT服务器消息并持久化到数据库

    这玩意能干什么 xff1f 我只能说 xff0c 这是一个物联网的方案 xff0c 能通过java客户端监听来自单片机发送的消息 xff0c 单片机有什么消息 xff1f 常见的有 xff1a 比如持久性的传感器数据上报 xff0c 这你得
  • STM32基于HAL库的非DMA的轮询ADC单通道与多通道的采样

    目录 单通道 xff08 连续转换模式 xff09 单通道 xff08 单次转换模式 xff09 非DMA的多通道采样 单通道 xff08 连续转换模式 xff09 扫描模式失能 xff0c 间断模式失能 xff0c 连续转换模式使能 规则
  • Not enough information to list load addresses in the image map.(STM32编译报错)

    以我遇到的两种情况 第一种 xff1a 只有函数声明 xff0c 缺少函数定义 xff0c 缺少源文件引入进工程 第二种 xff1a 变量重复定义 xff0c 重复定义指全局作用域下重复定义 这种错误常发生在自己忘记了已经定义过了这个变量或
  • 基于HAL库的STM32的串口DMA发送数据(解决只发送一次数据)及DMA+空闲中断接受数据

    目录 前提回顾 配置串口的DMA发送数据和空闲中断 43 DMA接受数据 关于串口的DMA发送只发送一次的问题解决 前人经验 xff08 DMA初始化在串口初始化之前 xff0c 这里我只用了串口1的DMA发送 xff09 我遇到的坑点 D
  • ESP32的MQTT AT固件烧录+STM32以ESP32的MQTT AT固件的AT指令连接EMQX下mqtt服务器实现消息订阅和发布

    目录 写在前面 三种方案 xff08 利用ESP32连接EMQX下的MQTT xff09 步骤 ESP32烧录固件并AT指令进行测试 下载固件 烧录工具下载 烧录固件 xff08 选择ESP32 xff09 关于AT 指令与MQTT服务器断
  • 基于STM32结合CubeMX学习Free-RT-OS的源码之信号量与互斥量

    目录 CUBEMX上的配置以及使用 信号量 互斥量 CUBEMX上的配置以及使用 信号量与互斥量都是从队列中衍生出来的 xff0c 他们是一种特殊的队列 不同的地方在于 他们不含有队列的数据部分 xff0c 只有队列结构体 定义属性 xff
  • STM32整合ATK-01-LORA模块实现定向传输实现三点组网(一主加二从)案例

    背景 应物联网无网的环境要求 xff0c 需要使用Lora模块进行组网以此传输数据 xff0c 本来用了正点原子的Lora模块 xff0c 以正点的强大资料支持 xff0c 我本应该非常熟悉这些组网操作了 xff0c 但硬件调试实在是让我差