玩转X-CTR100 l STM32F4 l NRF24L01+ 2.4G无线通信

我造轮子,你造车,创客一起造起来!塔克创新资讯【塔克社区 www.xtark.cn 】【塔克博客 www.cnblogs.com/xtark/ 】

本文介绍X-CTR100控制器 NRF24L01+ 2.4G无线通信模块的使用,可用于无线遥控、无线数据传输等应用场景。
原理
基本介绍
nRF24L01是由NORDIC生产的工作在2.4GHz~2.5GHz的ISM 频段的单片无线收发器芯片。无线收发器包括:频率发生器、增强型"SchockBurst"模式控制器、功率放大器、晶体振荡器、调制器和解调器。输出功率频道选择和协议的设置可以通过SPI 接口进行设置。几乎可以连接到各种单片机芯片,并完成无线数据传送工作。极低的电流消耗:当工作在发射模式下发射功率为0dBm 时电流消耗为11.3mA ,接收模式时为12.3mA,掉电模式和待机模式下电流消耗更低。
NRF24L01模块技术成熟,已经被大量应用,具有如下特点,关于模块详细说明,请参考NRF24L01模块资料。
工作在2.4G频段,全球开放的ISM频段,免许可证使用。
最高工作速率2Mbps,高效的GFSK调制,抗干扰能力强。
125个频道,满足多点通信和跳频通信需要。
内置CRC检错和点对多的通信地址控制。
具有自动应答及重发功能,通信更可靠。
标准模块

标准模块,VCC脚接电压范围为1.9V~3.6V之间,可直接接电压3.3V。
除电源VCC和接地端,其余脚都可以直接5V和3V单片机IO口直接相连,无需电平转换。


增强模块
标准模块一般无专用PA和LNA芯片,传输距离一般为50~100米。
如果要实现更远的传输距离,可选择如下增加PA和LNA的模块,通信距离可达2000米,与标准模块兼容。

产品参数:

实物图,可以使用高增益天线,增加收发距离。

例程
本例程需要两套X-CTR100和两个NRF24L01模块,其中一个用于数据发送,一个用于数据接收,可通过拨码开关SW1进行发送和接收模式选择,串口显示发送或接收的数据内容。
硬件说明
硬件资源:
X-CTR100控制器2套,NRF24L01+模块两套。
- 串口UART1
- NRF24L01板载接口
硬件连接:

注意不要把模块安装反了。
软件生态
X-SOFT软件生态,X-API文件如下。
ax_nrf24l01.c——X-CTR100 板载 NRF24L01+源文件
ax_ nrf24l01.h——X-CTR100 板载 NRF24L01+头文件
操作函数如下:
|
uint8_t AX_NRF24L01_Init(void); //NRF24L01初始化 void AX_NRF24L01_SetMode(uint8_t mode, uint8_t *addr_tx, uint8_t *addr_rx); //NRF24L01设置发射接收模式及地址 uint8_t AX_NRF24L01_SendPacket(uint8_t *pbuf); //NRF24L01发送数据包 uint8_t AX_NRF24L01_ReadPacket(uint8_t *pbuf); //NRF24L01读取数据包 |
宏定义:
|
//NRF24L01 地址宽度 #define #define
//NRF24L01 数据宽度 #define #define
//NRF24L01 操作状态 #define #define #define #define #define #define #define |
软件说明
本例程首先对NRF24L01初始化,如果初始化成功返回1,否则返回0。初始化成功后根据获取的拨码开关状态配置发送模式或接收模式。while循环进行数据发送或接收操作,每帧默认发送32字节数据,本例程对前4个字节进行赋值,其中第1个字节进行循环加1操作,用于标识发送帧号,发间隔为200ms,主程序代码如下。
|
int main(void) { uint8_t mode; //工作模式 uint8_t xrt1_address[AX_TX_ADR_WIDTH] = { 0x01,0x02,0x03,0x04,0x01 }; //发送端地址 uint8_t xrt2_address[AX_RX_ADR_WIDTH] = { 0x01,0x02,0x03,0x04,0x01 }; //接收端地址
uint8_t nrf24l01_txbuf[32] = { 0 }; uint8_t nrf24l01_rxbuf[32] = { 0 };
/* X-CTR100初始化 */ AX_Init(115200); printf("***X-CTR100 NRF24L01无线通信测试例程***\r\n\r\n");
//获取拨码开关SW1状态,并设定发射接收模式 mode = AX_SW_GetSW1Status(); printf("*通过拨码开关SW1可切换发送或接收模式,复位有效\r\n");
//模块初始化及配置 if (AX_NRF24L01_Init()) //NRF24L01初始化 { if (mode == 1) //发送模式 { printf("*当前工作模式:发射模式 \r\n"); AX_NRF24L01_SetMode(AX_NRF24L01_MODE_TX, xrt1_address, xrt2_address); //设置为发送模式,并配置地址 printf("*发射地址:%2x %2x %2x %2x %2x \r\n", xrt1_address[0], xrt1_address[1], xrt1_address[2], xrt1_address[3], xrt1_address[4]); printf("*接收地址:%2x %2x %2x %2x %2x \r\n\r\n", xrt2_address[0], xrt2_address[1], xrt2_address[2], xrt2_address[3], xrt2_address[4]); } else { printf("*当前工作模式:接收模式 \r\n"); AX_NRF24L01_SetMode(AX_NRF24L01_MODE_RX, xrt2_address, xrt1_address); //设置为接收模式,并配置地址 printf("*接收地址:%2x %2x %2x %2x %2x \r\n", xrt1_address[0], xrt1_address[1], xrt1_address[2], xrt1_address[3], xrt1_address[4]); printf("*等待接收数据...... \r\n\r\n"); } } else { //NRF24L01 故障或未连接 printf("*NRF24L01 初始化失败,请查看模块是否连接。。。 \r\n"); while (1) { AX_Delayms(50); AX_LEDR_Toggle(); //红灯闪烁 } }
//X-API测试:无线发送接收测试 nrf24l01_txbuf[0] = 0; nrf24l01_txbuf[1] = 1; nrf24l01_txbuf[2] = 2; nrf24l01_txbuf[3] = 3;
while (1) { if (mode == 1) //发送模式 { if (AX_NRF24L01_SendPacket(nrf24l01_txbuf) == AX_NRF24L01_TX_OK) { printf("*发送的数据:%2x %2x %2x %2x \r\n", nrf24l01_txbuf[0], nrf24l01_txbuf[1], nrf24l01_txbuf[2], nrf24l01_txbuf[3]);
AX_LEDG_On(); AX_Delayms(100); AX_LEDG_Off(); AX_Delayms(100); } else { AX_LEDR_On(); AX_Delayms(100); AX_LEDR_Off(); AX_Delayms(100); } nrf24l01_txbuf[0]++; } else { if (AX_NRF24L01_ReadPacket(nrf24l01_rxbuf) == AX_NRF24L01_RX_OK) { printf("*接收到数据:%2x %2x %2x %2x \r\n", nrf24l01_rxbuf[0], nrf24l01_rxbuf[1], nrf24l01_rxbuf[2], nrf24l01_rxbuf[3]);
AX_LEDG_On(); AX_Delayms(90); AX_LEDG_Off(); AX_Delayms(90); } else { AX_Delayms(90); } } } } |
实现效果
本例程需要两套X-CTR100和两个NRF24L01模块,通过拨码开关SW1可设置工作模式为发射或接收,其中一个用于数据发送,一个用于数据接收。发送端上电后,如果接收端未上电,由于NRF24L01设置自动应答模式,则发送端每次发送均失败,红灯会伴随闪烁。接收端上电后,则发送和接收端同步发送接收,绿灯伴随闪烁,并通过串口显示接收的数据,运行效果如下图。

玩转X-CTR100 l STM32F4 l NRF24L01+ 2.4G无线通信的更多相关文章
- 玩转X-CTR100 l STM32F4 l ADC 模拟数字转换
我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ] 本文介绍X-CTR100控制器 AD转换接 ...
- 玩转X-CTR100 l STM32F4 l MPU6050加速度陀螺仪传感器
我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ] 本文介绍X-CTR100控制器 板载加速度 ...
- 玩转X-CTR100 l STM32F4 l X-CTR100与树莓派搭建机器人平台
我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ] 本文介绍X-CTR100控制器与树莓派Linux系统 ...
- 玩转X-CTR100 l STM32F4 l 舵机控制
我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ] 本文介绍X-CTR100控制器的舵机控制,X-CTR ...
- 玩转X-CTR100 l STM32F4 l DRV8825 A4988 步进电机控制
我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ] 本文介绍X-CTR100控制器控制步进电机 ...
- 玩转X-CTR100 l STM32F4 l 基础例程printf、LED、蜂鸣器、拨码开关、位带操作
我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ] 本文介绍X-CTR100控制器基础板载资源 ...
- 玩转X-CTR100 l STM32F4 l PS2无线手柄
我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ] SONY的PS2无线手柄是索尼游戏机的遥控手柄,控制 ...
- 玩转X-CTR100 l STM32F4 l DSP指令集性能测试
我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ] 本文介绍X-CTR100控制器 DSP库的 ...
- 玩转X-CTR100 l STM32F4 l FPU单精度浮点性能测试
我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ] 本文介绍X-CTR100控制器如何开启ST ...
随机推荐
- every day a practice —— morning(5)
Huawei has not been accused of wrongdoing. As an administrative subpoena, the Treasury document does ...
- CF1107E Vasya and Binary String
比赛的时候又被垃圾题艹翻了啊. 这个题显然是区间dp 考虑怎么转移. 类似消除方块和ZYB玩字符串那样的一个DP. 可以从左到右依次考虑消除. dp[l][r][k][flag]表示区间l,r左边粘着 ...
- 把xml转成javabean的工具类
import java.io.IOException; import java.io.StringReader; import java.io.StringWriter; import javax.x ...
- sharding-jdbc读写分离原理解读
原帖地址:https://blog.csdn.net/yanyan19880509/article/details/78170233 前言 很多时候,为了应付DB的高并发读写,我们会采用读写分离技术. ...
- axios全局设置url公共请求头
需求由来:公司项目外链到别公司项目或者网页(通俗的说就是通过别的随意网页跳转至你项目网页),这时公司项目就要区分是从哪个公司或者哪个网页跳转过来的,从而进行不同的接口请求(公司所有接口都要带上请求头) ...
- Web Services的学习一
1.Web Services可以将应用程序转换成为网络应用程序,也就是说可以通过Web Services,应用程序可以向全世界发布信息,或者提供功能. 而且通过Web Services发布的,可以被其 ...
- xpath 获取表单的值
<input type="hidden" id="hospital_id" value="6666sui"> $selector ...
- 【转】js生成接口请求参数签名加密
js生成接口请求参数签名加密 签名算法规则: 第一步,设所有发送或者接收到的数据为集合M,将集合M内非空参数值的参数按照参数名ASCII码从小到大排序(字典序),使用URL键值对的格式(即key1=v ...
- 微信小程序生成二维码
微信小程序客户端生成二维码的方法, 请参考这里: https://github.com/demi520/wxapp-qrcode 代码片段如下: const QR = require(". ...
- mybatis标签之——<trim>及 <foreach collection>
https://www.cnblogs.com/zjfjava/p/8882614.html trim标记是一个格式化的标记,主要用于拼接sql的条件语句(前缀或后缀的添加或忽略),可以完成set或者 ...