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芯片好用多了,这个例子也是实现了双向传输,官方的例子是单向传输。

运行效果:

NRF52832 ESB通信相关推荐

  1. asp.net三层架构制作新闻管理_程序员蜕变为架构师必须要知道的「架构理论」...

    架构目的和指标 架构目的: 架构设计的主要目的是为了解决软件系统复杂度带来的问题,是用最小的人力成本来满足需求的开发和响应需求的变化,用最小的运行成本来保障软件的运行.让软件达到"高内聚.松 ...

  2. Microservices vs SOA - 微服务与SOA

    开始之前,我们先简单看下单体架构.SOA与微服务之间的区别,如下图所示: 简单来讲,对于单体架构,其就像一个超大容器,容器内集中包含了该应用的所有软件组件,并且组件与组件之间紧密耦合. 而对于SOA架 ...

  3. NRF52832之ESB功能与NRF24L01进行2.4G通信

    NRF52之ESB学习笔记 目的:为了能与NRF24L01通信,工程中加入nrf_esb.c, nrf_esb.h 先了解RADIO的各种工作状态及流程 1状态 RADIO的工作状态: DISABLE ...

  4. nrf52832与nrf24L01+通信

    使用2.4G无线芯片nrf24L01+与蓝牙芯片nrf52832通信,nrf52832工作在2.4G模式. nrf24L01+使用以前调试通过程序,两个nrf24L01+通信良好. nrf52832模 ...

  5. NRF52832与W25Q80通信

    1 NRF52832SPI主机的功能描述 nRF52832SPIM的主要特征 3个SPI实例 支持SPI的模式0到模式3 支持DMA Individual selection of IO pin fo ...

  6. [单片机框架][bsp层][nrf52832][nrf52840][nrf52810][nrf52820][ESB(2.4G)] ESB(2.4G)使用说明

    这个指南描述了什么是ESB(Enhanced ShockBurst)以及如何在nRF5系列中使用ESB. ESB支持双向数据包通信,包括数据包缓冲,数据包确认和丢失数据包的自动重传的基本协议.ESB提 ...

  7. Enhanced ShockBurst (ESB)原文翻译

    自我学习为主,同时也为所需要的提供一份资料 官方地址 增强型ShockBurst(ESB)是一种支持双向数据包通信的基本协议,包括数据包缓冲.数据包确认和丢失数据包的自动重传.ESB以低功耗提供无线通 ...

  8. nrf52 ESB通信协议底层探讨

    这里写自定义目录标题 nrf52 ESB通信协议底层分析 RADIO 数据包配置 ESB向导 nrf52 ESB通信协议底层分析 此文主要探讨nrf52832 2.4G RADIO数据传输过程,以及e ...

  9. Shuttle ESB实现消息推送

    ESB全称Enterprise Service Bus,即企业服务总线.它是传统中间件技术与XML.Web服务等技术结合的产物. ESB的出现改变了传统的软件架构,能够提供比传统中间件产品更为便宜的解 ...

最新文章

  1. lua 开发环境搭建(windows 平台)
  2. SQLServer 数据库变成单个用户后无法访问问题的解决方法
  3. android device monitor命令行窗口在哪里_Vulkan在Android使用Compute shader
  4. CentOS/用FTP客户端软件连接到服务器
  5. EPPLUS之外的选择,EXCEL的操作(NPOI,POI(java))
  6. vue cli 对解析的html内容的图片添加样式
  7. conda 安装指定版本tensorflow cpu/gpu
  8. [转载]Qt之模型/视图(实时更新数据)
  9. 797. 差分(有图解)
  10. Tomcat修改端口号(7.0 version)
  11. 自动部署 mysql_MySQL5.7自动部署脚本(持续更新)
  12. AndroidStudio Debug调试使用
  13. 编辑栏不见了_微信图文编辑器集合和使用技巧
  14. python基础四 面向对象编程
  15. 高效的JS 拼接字符串
  16. Pat(Advanced Level)Practice--1054(The Dominant Color)
  17. R语言使用循环语句一次性画出多幅图
  18. 各版本最新的Visual C++可再发行组件包(Redistributable Package)下载和合集
  19. python获取上一级目录
  20. 艺赛旗(RPA)Python 学习之异常

热门文章

  1. 2020北大信科计算机考研公示,2020年北京大学信息科学技术学院硕士研究生拟录取名单.pdf...
  2. emoji表情mysql报错_MySql存储emoji表情报错的处理方法
  3. bigemap手机版app如何加载矢量数据
  4. element ui注册页面(form+input+steps)
  5. 这世界就是,一些人总在昼夜不停地运转,而另外一些人,起床就发现世界已经变了。...
  6. 浪漫主义和革命英雄主义的回忆
  7. 每日工作记录——ERROR:Simulator:793 - Unable to elaborate instantiated module work
  8. 第3课:郭盛华教学视频_PHP连接MySQL数据库的方法
  9. 虚地址到实地址的翻译过程
  10. 1、ABP 文档介绍