当前文档版本为 v1.0.1,您可以访问当前页面的 开发中 版本以获取最近可能的更新。

Solution: XN297 BLE Mesh Demo

1 功能概述

此例程演示2.4G (XN297 模式) 下的私用组网功能,支持消息的重传,中继,网路隔离等功能。

后续还要添加如下功能:

  1. 2.4G 组网功能添加调频策略

  2. 增加2.4G 入网feature

  3. 增加蓝牙 peripheral 功能

2 环境要求

  • board: pan108xxb1_mesh_dongle

  • uart (option): 显示串口shell

  • 测试硬件:智能手机

  • PC工具: 软件shell工具(支持串口,波特率921600)

3 编译和烧录

例程位置:zephyr\samples_panchip\solutions\xn297_ble_mesh

使用 ZAL 工具可以对其进行编译、烧录、打开 VS Code 调试等操作。关于 ZAL 工具的详细介绍请参考:Zephyr APP Launcher 工具介绍

4 演示说明

本项目演示是一个 xn297mesh 组网的 demo,同时支持蓝牙连接(蓝牙功能待支持)。拥有相同网路key 的设备便可以在网路层自由进行应用数据发送。应用数据的通信格式和协议用户可以自己定义。

默认的代码用pan108xxb1_mesh_dongle开发板,可以演示一个灯同步的功能。

  1. 设置一个主灯在main.c, while(1), 打开 #if true /* sender device can enable this block code */

  2. 设置其他从灯在main.c, while(1), 关闭 #if false /* sender device can enable this block code */,并修改网路地址。

4.1 网路数据发送的接口

int32_t network_packet_send(network_packet_metadata_t *metadata, uint8_t *p_tra_pdu, uint8_t len)

调用方法,用户只需指定目的地址 dst ,传输的跳数 ttl,以及传输数据内容和大小。

uint8_t app_data[] = {0x00, 0x01};

while (1) {
		#if true /* sender device can enable this block code */
		static network_packet_metadata_t n_meta;

		n_meta.ttl = 0x4;
		n_meta.dst = 0x0011;
		network_packet_send(&n_meta, app_data, 2);
		app_data[1]++;
		#endif

		k_msleep(500);
	}

上图是演示代码周期发送数据的demo,建议用户在多节点测试过程,只让一个设备不断的发送数据(#if true 修改为 #if false),这样可以更加直观的理解测试结果。

4.2 网络测数据上报

在项目的任意位置定义这个名字的函数即可,默认演示代码在main.c 中定义。

void app_data_receive(network_packet_metadata_t *net, uint8_t *p_tra_pdu, uint8_t len)
{

	printk("src:%x,ttl:%x\n", net->src, net->ttl);
	printk("data:");
	for (uint8_t i = 0; i < len; i++)
		printk("%x", *(p_tra_pdu+i));
	printk("\n");

	P04 = (p_tra_pdu[1] & 0x01);
}

4.2 设置网络相关的参数

项目中有个 weak.c,目前定义了静态设备地址和网路key,用户可以自己修改或者其他方式动态给予key和地址,后续会增加入网协议,这样网路key以及设备地址都会给予。目前demo 建议给不同的设备烧录不同的地址,即用户手动修改地址。

static uint8_t m_netkey[16] = { 0x1, 0x2, 0x3, 0x04, 0x05, 0x7, 0x8, 0x9, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16 };

extern uint8_t *netkey_get(void)
{
	return m_netkey;
}

extern uint16_t local_address_get(void)
{
	return 0x0011;
}

4.3 设置bearer 链路的参数

#define TRANSIMIT_TIMES 2
#define RELAY_TIMES 2

TRANSIMIT_TIMES 表示原始消息发送的次数,比如主动调用了 network_packet_send 函数

RELAY_TIMES 表示relay 消息发送的次数

5 RAM/Flash资源使用情况

Memory region         Used Size  Region Size  %age Used
FLASH:       83548 B       384 KB     21.25%
SRAM:       32600 B        50 KB     63.67%