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

Solution: Electric Meter

1 功能概述

此项目是一个智能电表的解决方案,目前支持国家电网标准的 realtek 协议 和 nordic 协议,此方案已完成蓝牙综合台体的12项的检测 和 2.4G台体的稳定性测试,需要请联系公司的FAE。

重要

此例程仅存在于特殊版本的SDK中,如有需要请联系Panchip。

2 环境要求

  • board: pan108xx 相关的 evaluate board

  • uart: 显示串口log和shell交互

  • 测试软件 (option): nRF Connect

执行多连接时,需要多个支持蓝牙的设备。

3 编译和烧录

例程位置:zephyr\samples_panchip\solution\electric-meter

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

4 项目说明

4.1 工作模式说明

蓝牙工作在两主三从模式下,能同时与 2 路(采集器、台体自动线、手持设备)主机和 3 路从(外置负荷开关、报警装置、各类外置传感器)建立连接并发数据,典型网络拓扑如下:

4.2 软件架构介绍

4.2.1 蓝牙连接的通信流程

如上图,蓝牙作为主机的时候需要去扫描特定的广播地址,这个广播地址由电表的 MCU 通过 uart 协议设置的(这儿不详细阐述设置逻辑),当主机扫描到了广播地址后,主动连接配对加密,然后查找服务,更新连接参数等。

蓝牙作为从机的时候,只需要支持配对加密,支持主机需要的服务,具体的服务结构层次如下:

primary services
    UUID_SERVICE = {0x79, 0x41, 0xDC, 0x24, 0x0E, 0xE5, 0xA9, 0xE0, 0x93, 0xF3, 0xA3, 0xB5, 0x01, 0x00, 0x40, 0x6E}
	UUID_CHAR_WRITE_WITHOUT_RESP{} = {0x79, 0x41, 0xDC, 0x24, 0x0E, 0xE5, 0xA9, 0xE0, 0x93, 0xF3, 0xA3, 0xB5, 0x01, 0x00, 0x40, 0x6E}
	UUID_CHAR_NOTIFY = {0x79, 0x41, 0xDC, 0x24, 0x0E, 0xE5, 0xA9, 0xE0, 0x93, 0xF3, 0xA3, 0xB5, 0x03, 0x00, 0x40, 0x6E}
	Client Characteristic Configuration

4.2.1 蓝牙芯片与电表主机的串口通信协议

具体协议细节内容参考<Realtek电表私有通信协议规范v1.46.pdf>,这儿简单协议命令的一些功能

5 演示说明

5.1 接一个电表进行测试

测方法需要外接一个支持 realtek 协议的电表进行测试

5.2 串口命令测试

测方法需要对照<Realtek电表私有通信协议规范v1.46.pdf>的串口协议,通过一个串口工具,向EVB 板子的P06(uart TX) P07(uart RX)进行命令和场景的模拟。

5.3 自动进行多连接压力测试

测方法主要测试自动连接3个从机的方法,既可以压力测试设备作为从机功能,也可以测试设备作为主机的功能。测试过程中,可以通过nrf connection 软件连接测试模拟一个完整2主3从功能

主机设备,打开prj 文件最后的测试宏, 编译下载1个设备

CONFIG_METER_MASTER_TEST=y

从机设备,打开prj 文件最后的测试宏,编译下载3个设备,注意每个设备要自己设置好

CONFIG_METER_SLAVE_TEST=y

从机设置地址的位置, 在ble_interface.c 文件中,修改 addr,第一个地址,剩下3个地址不要修改

slave1 设置为 0xc1, 0, 0, 0, 0, 3

slave2 设置为 0xc1, 0, 0, 0, 0, 3

slave3 设置为 0xc1, 0, 0, 0, 0, 3

#ifdef CONFIG_METER_SLAVE_TEST
	m_link_timeout = 20;
	m_meter_ble_info.pair_info[0].key = 123456;
	m_meter_ble_info.pair_info[1].key = 123456;
	m_meter_ble_info.pair_info[2].key = 123456;
	m_meter_ble_info.pair_info[3].key = 123456;

	uint8_t addr[24] = {0xc1, 0, 0, 0, 0, 3, 0xff, 0, 0, 0, 0, 3,
						0xff, 0, 0, 0, 0, 4, 0xff, 0, 0, 0, 0, 5};

	memcpy((void *)m_meter_ble_info.addr_list.addr, addr, 24);
#endif

6 其它说明

6.1 配置

项目配置文件: prj.conf,其中包含了 Bluetoothshelldebug等的一些配置。

其中支持的最大连接数量由如下参数配置:

CONFIG_BT_MAX_CONN=5

spark controller 特殊的配置

CONFIG_BT_SPARK_BLE_CONTROLLER_EN=y   使能SPARK controller 反之选择的是 Origin controller
CONFIG_BT_CTLR_MAX_MST_CONN=3 支持3个 master
CONFIG_BT_CTLR_MAX_SLV_CONN=2 支持2个 slave

7 RAM/Flash资源使用情况

Memory region         Used Size  Region Size  %age Used
FLASH:      100932 B       384 KB     25.67%
SRAM:       44373 B        46 KB     94.20%