华为星闪广播通信

华为星闪广播通信开发实践
该文章已生成可运行项目,

结论

成功通过两个星闪开发板 E528H-WS63 实现星闪通信。一方不断广播,另一方不建立连接,只接收数据。测试表明工作电流约50mA。星闪本身挺好的,但开发环境非常不友好。

安装

官方教程地址:tools · HiSpark/fbb_ws63 - 码云 - 开源中国 https://gitee.com/HiSpark/fbb_ws63/tree/master/tools

本教程基于windows环境(编译慢极了,关了杀毒软件加速也慢),跟随教程安装:tools/HiSparkStudio工具下载及安装.md · HiSpark/fbb_ws63 - Gitee.com https://gitee.com/HiSpark/fbb_ws63/blob/master/tools/HiSparkStudio%E5%B7%A5%E5%85%B7%E4%B8%8B%E8%BD%BD%E5%8F%8A%E5%AE%89%E8%A3%85.md

总共需要: fbb_ws63 软件包、HiSpark Studio (vscode同款) 、 Python 3.11.4 和 4 个python库

跑示例

打开 HiSpark Studio 并新建工程

 

找到sle(星闪)例程

sdk 路径:fbb_ws63-master\src\application\samples\bt\sle

接收端代码为 sle_speed_client.c

广播端代码为 sle_speed_server_adv.c 

星闪协议说明:

星闪广播规范-星闪SLE设备接入规范-设备开发-HarmonyOS设备开发 https://device.harmonyos.com/cn/docs/documentation/DevicePartner-Guides/device-development-sle-specifications-advertising-0000001942819954

星闪广播端修改例程sle_speed_server_adv.c 

按照标准的协议,需要如官网所示的格式

自己自由使用的情况下可以很简单而且没有31字节限制,修改g_sle_announce_data为你想要的

uint8_t g_sle_announce_data[] = {
    'F','r','e','e',' ','P','a','l','e','s','t','i','n','e',
    '8',' ','x','i','a','o',' ','s','h','i',' ','g','o','n','g',' ','z','u','o',' ','z','h','i'

};// 37 个字节

星闪接收端修改例程sle_speed_client.c

更改例程的sle_sample_seek_result_info_cbk,搜索到星闪广播设备后从串口打印结果

void sle_sample_seek_result_info_cbk(sle_seek_result_info_t *seek_result_data)
{
    if (seek_result_data != NULL) {

        // 打印设备MAC地址
        osal_printk("Found device: %02X:%02X:%02X:%02X:%02X:%02X\n",
                  seek_result_data->addr.addr[0], seek_result_data->addr.addr[1],
                  seek_result_data->addr.addr[2], seek_result_data->addr.addr[3],
                  seek_result_data->addr.addr[4], seek_result_data->addr.addr[5]);

        // 打印广播数据长度
        osal_printk("Adv Data Len: %d\n", seek_result_data->data_length);
        // 打印广播数据
        for (int i = 0; i < seek_result_data->data_length; i++) {
            osal_printk("%02X ", seek_result_data->data[i]);
        }
        osal_printk("\n");

        // 原本的代码,需要注释掉
        // uint8_t mac[SLE_ADDR_LEN] = {0x11, 0x22, 0x33, 0x44, 0x55, 0x66};
        // if (memcmp(seek_result_data->addr.addr, mac, SLE_ADDR_LEN) == 0) {
        //     (void)memcpy_s(&g_remote_addr, sizeof(sle_addr_t), &seek_result_data->addr, sizeof(sle_addr_t));
        //     sle_stop_seek();
        // }
    }
}

烧写程序:

1、修改系统配置,如广播端:

2、编译,超级慢,单细胞都等成类人猿了

3、设置下载端口:

按下开发板的复位按钮烧录

4、打开串口监视器,检查是否正确的输出了你发送的数据:

 

本文章已经生成可运行项目
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值