Solution: XN297 BLE Mesh Demo¶
1 功能概述¶
此例程演示2.4G (XN297 模式) 下的私用组网功能,支持消息的重传,中继,网路隔离等功能。
后续还要添加如下功能:
2.4G 组网功能添加调频策略
增加2.4G 入网feature
增加蓝牙 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开发板,可以演示一个灯同步的功能。
设置一个主灯在main.c, while(1), 打开
#if true /* sender device can enable this block code */
设置其他从灯在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: 85204 B 384 KB 21.67%
SRAM: 32816 B 50 KB 64.09%