NRF52832 ESB通信

article/2025/8/17 1:08:22

esb通信,也就是纯2.4g的一个通信,据说是兼容24L01+芯片,没有试过,这里是用两个nrf52832芯片做的通信实验。

相关历程参考 如下:

历程里面注释确实不多。

里面函数api介绍可以参考官方SDK文档:https://infocenter.nordicsemi.com/index.jsp

esb通信和24L01+芯片初始化内容大致是类似的,基本上就是初始化通信速度,模式,重发时间,通道,地址,等,

小区别:

esb多了一个回调函数。

地址 =基地址(4byte)+前缀地址(1byte )两部分组成,地址长度是5个字节,在24L01+中是没有这样分开配置的。同样的,除了pipe0的基地址可以改,其它pipe只有使用同样的基地址,所有的pipe前缀地址都可以改变。

//发射初始化
uint32_t esb_init_tx( uint8_t ch, uint8_t *addr  )
{clocks_start();uint32_t err_code;//uint8_t base_addr_0[4] = {0x57, 0xE7, 0x87, 0xE7};//uint8_t base_addr_1[4] = {0xC2, 0xC2, 0xC2, 0xC2};uint8_t addr_prefix[8] = {0xE7, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8 };nrf_esb_config_t nrf_esb_config         = NRF_ESB_DEFAULT_CONFIG;nrf_esb_config.protocol                 = NRF_ESB_PROTOCOL_ESB_DPL;nrf_esb_config.retransmit_delay         = 600;nrf_esb_config.bitrate                  = NRF_ESB_BITRATE_2MBPS;nrf_esb_config.event_handler            = nrf_esb_event_handler_tx;nrf_esb_config.mode                     = NRF_ESB_MODE_PTX;nrf_esb_config.selective_auto_ack       = false;err_code = nrf_esb_init(&nrf_esb_config);err_code =nrf_esb_set_rf_channel(ch);   //通信通道err_code = nrf_esb_set_base_address_0(addr);  //只用pipe 0,4个地址可变//err_code = nrf_esb_set_base_address_1(base_addr_1);err_code = nrf_esb_set_prefixes(addr_prefix, NRF_ESB_PIPE_COUNT);return err_code;
}

本文章是对esb通信进行了封装,方便直接调用使用

所有源码:

#include "wp_esp.h"
#include "app_error.h"#include "bsp.h"
#include "nrf_delay.h"
#include "nrf_esb.h"
#include "nrf_log.h"static nrf_esb_payload_t        tx_payload = NRF_ESB_CREATE_PAYLOAD(0, 0x0, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00);
nrf_esb_payload_t rx_payload;void nrf_esb_event_handler_rx(nrf_esb_evt_t const * p_event)
{switch (p_event->evt_id){case NRF_ESB_EVENT_TX_SUCCESS:printf("TX SUCCESS EVENT\r\n");break;case NRF_ESB_EVENT_TX_FAILED:printf("TX FAILED EVENT\r\n");break;case NRF_ESB_EVENT_RX_RECEIVED:printf("RX RECEIVED EVENT\r\n");if (nrf_esb_read_rx_payload(&rx_payload) == NRF_SUCCESS){printf("Receiving packet: %02x\r\n", rx_payload.data[1]);}break;}
}//接收初始化
uint32_t esb_init_rx( uint8_t ch, uint8_t *addr )
{uint32_t err_code;//uint8_t base_addr_0[4] = {0xe7, 0xE7, 0xE7, 0xE7};//uint8_t base_addr_1[4] = {0xC2, 0xC2, 0xC2, 0xC2};uint8_t addr_prefix[8] = {0xE7, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8 };nrf_esb_config_t nrf_esb_config         = NRF_ESB_DEFAULT_CONFIG;nrf_esb_config.payload_length           = 8;nrf_esb_config.protocol                 = NRF_ESB_PROTOCOL_ESB_DPL;nrf_esb_config.bitrate                  = NRF_ESB_BITRATE_2MBPS;nrf_esb_config.mode                     = NRF_ESB_MODE_PRX;nrf_esb_config.event_handler            = nrf_esb_event_handler_rx;nrf_esb_config.selective_auto_ack       = false;err_code = nrf_esb_init(&nrf_esb_config);err_code =nrf_esb_set_rf_channel(ch);err_code = nrf_esb_set_base_address_0(addr);//err_code = nrf_esb_set_base_address_1(base_addr_1);err_code = nrf_esb_set_prefixes(addr_prefix, 8);return err_code;
}void nrf_esb_event_handler_tx(nrf_esb_evt_t const * p_event)
{switch (p_event->evt_id){case NRF_ESB_EVENT_TX_SUCCESS:printf("TX SUCCESS EVENT\r\n");break;case NRF_ESB_EVENT_TX_FAILED:printf("TX FAILED EVENT\r\n");(void) nrf_esb_flush_tx();(void) nrf_esb_start_tx();break;case NRF_ESB_EVENT_RX_RECEIVED:printf("RX RECEIVED EVENT\r\n");while (nrf_esb_read_rx_payload(&rx_payload) == NRF_SUCCESS){if (rx_payload.length > 0){printf("RX RECEIVED PAYLOAD %x\r\n",rx_payload.data[1]);}}break;}
}//发射初始化
uint32_t esb_init_tx( uint8_t ch, uint8_t *addr  )
{uint32_t err_code;//uint8_t base_addr_0[4] = {0x57, 0xE7, 0x87, 0xE7};//uint8_t base_addr_1[4] = {0xC2, 0xC2, 0xC2, 0xC2};uint8_t addr_prefix[8] = {0xE7, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8 };nrf_esb_config_t nrf_esb_config         = NRF_ESB_DEFAULT_CONFIG;nrf_esb_config.protocol                 = NRF_ESB_PROTOCOL_ESB_DPL;nrf_esb_config.retransmit_delay         = 600;nrf_esb_config.bitrate                  = NRF_ESB_BITRATE_2MBPS;nrf_esb_config.event_handler            = nrf_esb_event_handler_tx;nrf_esb_config.mode                     = NRF_ESB_MODE_PTX;nrf_esb_config.selective_auto_ack       = false;err_code = nrf_esb_init(&nrf_esb_config);err_code =nrf_esb_set_rf_channel(ch);err_code = nrf_esb_set_base_address_0(addr);  //只用pipe 0,4个地址可变//err_code = nrf_esb_set_base_address_1(base_addr_1);err_code = nrf_esb_set_prefixes(addr_prefix, NRF_ESB_PIPE_COUNT);return err_code;
}uint32_t esp_start_rx(void )
{return nrf_esb_start_rx();
}void test_send(void )
{tx_payload.noack = false;if (nrf_esb_write_payload(&tx_payload) == NRF_SUCCESS){//printf("Sending packet ok \r\n");tx_payload.data[1]++;}else{printf("Sending packet failed \r\n");}}

发射端调用:

u8 ch =10;u8 addr[4] ={0x57, 0xE7, 0x87, 0xE7};esb_init_tx(ch,addr);printf("ESP TX \r\n");printf("Sending packet ...");while(1){test_send();nrf_delay_ms(1000);}

接收端使用:

u8 ch =10;u8 addr[4] ={0x57, 0xE7, 0x87, 0xE7};esb_init_rx(ch,addr);esp_start_rx();printf("ESP RX \r\n");while (1){}

可以看到,只有发射端在主任务里面做了发送处理,接收端所有的处理都在回调函数里面,比24L01芯片好用多了,这个例子也是实现了双向传输,官方的例子是单向传输。

运行效果:


http://chatgpt.dhexx.cn/article/VeVkrmGJ.shtml

相关文章

NRF52840/NRF52832/NRF52810/NRF52811/NRF52805蓝牙5.0芯片对比

目录 一、蓝牙5.0传输速度翻倍,距离4倍、8倍数据传输量领跑物联网连接标准二、通信速度提高一倍意味着功耗减半三、四倍通信距离意味着蓝牙将抢夺Wi-Fi在智能家居市场的份额四、增加数据广播容量五、组网技术扩大应用范围六、NRF52系列BLE5.0芯片对比NRF52840-QIAA-…

nRF52833支持BLE 5.1,浅析与nRF52840参数对比

nRF52833 SoC作为Nordic nRF52系列的第五个新成员,该芯片能提供多协议解决方案,支持高温性能、测向功能,迅速成为专业照明和其他工业应用的理想选择之一。 Nordic现在提供nRF52833工程样品,这款SoC器件将提供三种不同的封装&…

【手把手带你学nRF52832/nRF52840 · (1)开发环境搭建】

1、首先去Nordic官网下载SDK SDK下载链接 ▼点击选定下图中的17.0.2版本,可以看到目前最新的版本是17.1.0 ▼下拉网页到最后,确认要下载的文件,前面的一些例程可以去掉,保留最后一个SDK文件即可,点击Download file…

NORDIC蓝牙52系列芯片选型与参数对比-NRF52805,NRF52810,NRF52811,NRF52820,NRF52832,NRF52833,NRF52840

NRF52805,NRF52810,NRF52811,NRF52820,NRF52832,NRF52833,NRF52840参数对比

nRF52832的硬件资源小结

nRF52832是NRODIC公司推出的一款带有低功耗蓝牙功能的ARM Cortex-M4 32-bit 浮点单元处理器,64MHz时钟, 存储器有两种配置:512kB flash/64kB RAM和256kB flash/32kB RAM. 最小的封装为WLCSP(wafer level chip scale package), 长宽高分别为&a…

从零开始的nrf52832蓝牙开发(1)--蓝牙协议基础

想要进行蓝牙开发,第一步肯定要对蓝牙协议有所了解。除了要对蓝牙的一些专业术语有所熟悉,还应该对蓝牙协议每层功能有一定认知。 概略图: 物理层(PHY): 物理层规定了蓝牙频段:2400MHz~2483.…

01、NRF52832介绍功耗、射频参数、芯片处理能力、内存和支持协议详解

众所周知,低功耗代蓝牙以其低功耗的优势,凸显出强大的市场竞争力,而其中 nRF52832 这一款低功耗蓝牙芯片更是受到大家的欢迎。 下面云想智慧带你从功耗、射频参数、芯片处理能力、内存和支持协议这 5 个方面来解说 nRF52832 为什么受到欢迎。…

NRF52832蓝牙芯片详细介绍及应用方案

NRF52XX系列蓝牙Soc芯片选型表 NRF52810-QFAA 处理器:ARM Cortex M4RAM:24kBFLASH:192kB支持协议:BLE、ANT、私有2.4G封装:QFN48尺寸(mm):6 x 6 NRF52810-QCAA 处理器&#xff1…

SpringBoot前端模板

Springboot支持thymeleaf、freemarker、JSP,但是官方不建议使用JSP,因为有些功能会受限制,这里介绍thymeleaf和freemarker。 一、thymeleaf模板 thymeleaf模板的前端界面为.html格式的文件,可以直接使用浏览器进行查看,方便进…

后台管理系统前端模板(html + CSS + JavaScript)

这是为大家准备的资源链接🤐🤐🤐: 提取码:0000 bootstrap_htmb.zip_免费高速下载|百度网盘-分享无限制百度网盘为您提供文件的网络备份、同步和分享服务。空间大、速度快、安全稳固,支持教育网加速&#…

39个精美前端模板

为了方便广大程序员开发,整理了网上常见的免费的后台模板给大家。 1.Ace_admin Ace_admin 下载地址:http://pan.baidu.com/s/1dFaRCCL 2.AdminEx AdminEx 下载地址:http://pan.baidu.com/s/1gfxOkpl 3.AdminLTE AdminLTE 下载地址&a…

django 使用网上下载的前端模板

记录一下django使用前端模板的过 新手,没写过前端,不对的地方欢迎大神指教!!!谢谢。 环境 windows7 django3.X pycharm 1使用pycharm 创建django项目 2创建app,python manage.py startapp app名称 3把下载好…

基于html+css+js线上订餐系统前端模板

h180效果图 部分源码 html <!doctype html> <html> <head><meta charset"utf-8"><meta http-equiv"X-UA-Compatible" content"IEedge,chrome1"><title>Cooker</title><meta name"descriptio…

使用Vue+Element-UI从0搭建一个常见的前端模板

首先&#xff0c;创建一个vue项目&#xff0c;这里不做过多阐述&#xff0c;直接写模板 简单的介绍一下一般的页面布局包括顶部导航栏&#xff0c;左侧菜单栏&#xff0c;和主要的信息展示页面 我们直接勾勒出一个这样的架子,这里使用了element-UI&#xff0c;记得用npm下载一…

免费html模板bootstrap,20 款超棒免费的 Bootstrap 管理和前端模板

1. SB Admin 2 2. Admin Lite 3. Director Responsive Admin Template Free 4. Free Bootstrap Admin Template Dream 5. Dashgum – Free Dashboard 6. Free Responsive Admin Template – Zontal Admin 7. Free Download Bootstrap Admin Template 8. Janux – Free Responsi…

【精美前端模板】你还不心动吗?

文章目录 &#x1f449;引言&#x1f48e;&#x1f31f;久等了&#xff01;&#x1f449;一、UniDark&#x1f449;二、My hat&#x1f449;三、ELYSIUM 魔兽世界&#x1f449;四、Sea Food美食&#x1f449;五、 Raduate&#x1f449;六、Goaway&#x1f449;七、CLEAN FRESH …

小区管理系统之后台管理前端模板

&#x1f525;作者主页&#xff1a;疯狂行者&#x1f525; &#x1f496;简介&#xff1a;Java领域新星创作者&#x1f3c6;、【计算机源码之家】公号作者✌ 简历模板、学习资料、面试题库【关注我&#xff0c;都给你】&#x1f496; &#x1f496;文末获取源码联系&#x1f…

前端模板引擎 -- Freemarker

一、Freemarker介绍 FreeMarker是一个模板引擎&#xff0c;一个基于模板生成文本输出的通用工具&#xff0c;使用纯Java编写。 FreeMarker被设计用来生成HTML Web页面&#xff0c;特别是基于MVC模式的应用程序。 虽然FreeMarker具有一些编程的能力&#xff0c;但通常由Java程序…

前端模板

总述 “模板”这个词&#xff0c;可能很多人第一印象是后端的技术&#xff08;Smarty&#xff0c;Velocity等&#xff09;&#xff0c;但本文要讲的却不是后端的概念&#xff0c;而是前端开发中所使用到的一种技术&#xff0c;也就是“前端模板”技术。 模板的工作原理可以简单…

前端模板template

一、背景 前端小白的成长历程&#xff0c;一般都会经历html模板的一些问题,jquery template/artTemplate/yayaTemplate等常见的模板使用&#xff0c;这里就不作介绍了。 先谈谈我们为什么要使用模板&#xff1f; 当一个html页面有许多重复功能、累赘功能、有逻辑功能&#xf…