【Espruino】NO.15 nRF24L01+无线收发器

http://blog.csdn.net/qwert1213131/article/details/35853747

本文属于个人理解,能力有限,纰漏在所难免,还望指正!

【小鱼有点电】

【Espruino中文社区】

nRF24L01+(或nRF24L01P)是一款工作在2.4~2.5GHz 世界通用ISM 频段的单片无线收发器芯片。无线收发器包括:频率发生器、增强型SchockBurst模式控制器、功率放大器、晶体振荡器调制器、解调器。输出功率频道选择和协议的设置可以通过SPI接口进行设置。

极低的电流消耗,当工作在发射模式下发射功率为0dBm时电流消耗为11.3mA,接收模式时为13.5mA,掉电模式和待机模式下电流消耗更低。

因为在无线通讯应用中经常会遇到远距离通讯的要求,目前有一些nRF24L01+无线模块在原设计上增加了PA(功率放大器)和LNA(低噪声放大器)的型号,如“nRF24L01+PA”等。在发射部分通过PA电路将nRF24L01+最大0dBm的输出功率放大到+22dBm左右,同时在接收部分通过LNA电路增加接收信号的强度。通过这种方式可以有效的增加nRF24L01+无线模块的通讯距离,在空旷环境下最高可增加到2km。【以上段落摘自百度百科

对于这个器件已经有模块库可以直接调用,非常方便,不需要理会底层硬件如何工作。

需要注意的:每个器件都有发送和接收地址,不能同时进行收发,收发包大小上限为32字节。

模块与板子的连接如下所示,当然也可以使用其他引脚:

NRF24L01+ Name Espruino Type
1 GND GND GND
2 3.3V 3.3 3.3v
3 CE B1 GPIO Out
4 CSN B0 GPIO Out
5 SCK A5 SPI SCK
6 MOSI A7 SPI MOSI
7 MISO A6 SPI MISO
8 IRQ unused GPIO In

NRF24L01P的模块库已经封装好了相应的数据处理函数,我们可以发生命令、接收数据,甚至对设备重新编程。

由于NRF24L01P使用SPI接口,因此需首先配置SPI接口,SPI1.setup({sck:A5,
miso:A6, mosi:A7});然后调用NRF24L01P模块,var
nrf =require("NRF24L01P").connect(
SPI1, B0, B1);

配置从机:

SPI1.setup({sck:A5, miso:A6, mosi:A7});
var nrf = require("NRF24L01P").connect( SPI1, B0, B1 );
function onInit() {
  nrf.init([0,0,0,0,1], [0,0,0,0,2]);
}
onInit();
setInterval(function() {
  nrf.slaveHandler();
}, 50);

配置主机:

SPI1.setup({sck:A5, miso:A6, mosi:A7});
var nrf = require("NRF24L01P").connect( SPI1, B0, B1 );
function onInit() {
  nrf.init([0,0,0,0,2], [0,0,0,0,1]);
}
onInit();
setInterval(function() {
  nrf.masterHandler();
}, 50);

需要注意的是,init函数里面的两个地址,一个是接收地址,一个是发送地址,将init函数放到onInit()函数中,可以在Espruino启动时自动调用onInit()。把以上代码分别下载进两个板子后,就可以开始下面的操作了。

我们在web IDE中,操作主机板使用sendCommand函数来向从机发送命令,则会收到从机返回的结果。

若输入nrf.sendCommand("1+2",function(r){print("=="+r);});则会收到“=3”。

若输入nrf.sendCommand("LED2.set()",function(r){print("=="+r);});则会收到“=undefined”,并且从机的LED2点亮。

当然我们还可以对Espruino无线编程,

nrf.sendCommand("function on() { LED3.set(); }");
nrf.sendCommand("on();");

当然slaveHandler和masterHandler不是必须的,我们还可以直接调用send和dataReady来进行通讯,示例如下所示:

发送端代码如下:

SPI1.setup({sck:A5, miso:A6, mosi:A7});
var nrf = require("NRF24L01P").connect( SPI1, B0, B1 );
function onInit() {
  nrf.init([0,0,0,0,1], [0,0,0,0,2]);
}
onInit();
setInterval(function() {
  var value = analogRead(A0); // 读取A0电压值
  nrf.sendString(""+value);   //将电压值发送出去
}, 5000);

接收端代码如下:

SPI1.setup({sck:A5, miso:A6, mosi:A7});
var nrf = require("NRF24L01P").connect( SPI1, B0, B1 );
function onInit() {
  nrf.init([0,0,0,0,2], [0,0,0,0,1]);
}
onInit();

dataLine = "";
setInterval(function() {
  while (nrf.dataReady()) {
    var data = nrf.getData();
    for (var i in data) {
      var ch = data[i];
      if (ch===0 && dataLine!=="") {
        console.log(dataLine);
        // 我们可以将数据保存到SD卡,使用require('fs').appendFile("log.txt", dataLine+"\n");
        dataLine = "";
      } else if (ch!==0) {
        dataLine += String.fromCharCode(ch);
      }
    }
  }
}, 50);

【Espruino】NO.15 nRF24L01+无线收发器,布布扣,bubuko.com

时间: 2024-10-13 22:20:27

【Espruino】NO.15 nRF24L01+无线收发器的相关文章

[51单片机] SPI nRF24L01无线 [可以放在2个单片机里实现通信]

main.c 1 #include<reg51.h> 2 #include"2401.h" 3 4 #define uint unsigned int 5 #define uchar unsigned char 6 7 sbit KEY8=P3^7; //发送按键 8 sbit beep=P2^3;//喇叭 9 sbit LED6=P1^6; ////接收到数据后的功能实现灯 10 11 void delay_ms(uint z) //延时函数 12 { 13 uint x

[51单片机] nRF24L01 无线模块 测试 按键-灯-远程控制

哈哈,穷吊死一个,自己做的一个超简单的板还没有电源提供,只得借助我的大开发板啦.其实这2个模块是完全可以分开的,无线嘛,你懂得!进入正题,这个实验的功能就是一个发送模块(大的那个板)连接4个按键,通过按动这4个不同的按键来发送4种不同的命令,来控制接收端(小的板)点亮4个不同的灯. >_<!首先是发送模块: 1 void main() 2 { 3 uchar Tx_Buf1[]={1}; //发送的信息1 4 uchar Rx_Buf[32]; //接收到的数据暂存器,最多32字节数据 5 i

[51单片机] SPI nRF24L01 无线简单程序 1

main.c 1 #include <reg51.h> 2 #include <api.h> 3 4 #define uchar unsigned char 5 6 /***************************************************/ 7 #define TX_ADR_WIDTH 5 // 5字节宽度的发送/接收地址 8 #define TX_PLOAD_WIDTH 4 // 数据通道有效数据宽度 9 #define LED P2 10 11

CC1101 低成本,低功耗的SUB 1G无线收发器

CC1101是低成本的1GHz以下的无线收发器,为极低功耗的无线应用而设计.电路主要设计为ISM(工业.科学和医疗)和SRD(短距离设备),频段在315.433.868和915,但是可以很容易的编程,使之工作在其他频率,在300-348MHz,387-464 MHz 和 779-928 MHz 频段     CC1101 特性 体积小(QLP 4×4mm封装,20脚): 真正的单片UHF RF收发器: 频率波段:300-348 MHz.400-464 MHz和800-928 MHz: 高灵敏度(

[51单片机] nRF24L01 无线模块 串口法命令 通过无线控制另一个的灯

>_<!概述: 这是在上一个的基础上通过按键发送4种不同命令来控制接收端的LED灯亮的改进版(上一个:http://www.cnblogs.com/zjutlitao/p/3840013.html),这里俺把按键发命令给去掉,然后加入一个串口通信的功能,PC通过串口给发送端发送命令,然后发送端通过无线将命令发给接收端来实现控制,这里接收端和上一个例程中的一样,只是在发送端的代码里去除了按键控制,变成了串口控制. >_<!发送端电路: >_<!接收电路图: >_&l

nRF2401A/nRF24L01/nRF24L01+无线模块最常见问题汇集(转)

俗话说:每个人一生下来什么都会的,都是通过自己努力和探索出来的,NRF系列芯片,刚开始都好奇心加兴趣才来捣鼓它的,刚开始做硬件和软件,没有收发数据弄得整个人头都快炸开了,所以在此和大家分享一下前辈的经验,希望大家会少走弯路. Q:最近在选型的时候发现基本常见的无线模块都是3V供电,而我使用的单片机是5V的,它们之间要怎么连接呢?直接连接会不会损坏模块? 回答: 如果你使用的51单片机的P0口是高阻引脚,可以直接将无线模块的IO脚连接到P0端口,并在对应的连线与3V电源间放置1K~10K左右的偏置

CB1 驱动NRF24L01 无线模块 通信成功

系统:lubuntu 官方  (喜欢cb官方原版)硬件: cb   NRF24L01*2   51开发板一块   杜邦线若干 CB1 驱动NRF24L01 无线模块与STC51单片机通信成功!!! 1.废话不多说,上图上代码: 2.自制51单片机开发板:(24L01在右下角,有内置接口)   3.来张清晰的图,上面手抖了,      LCD1602显示温度,并实时通过无线发给cubieboard 1   4. 下图,第一位是正负温度指示,0x00代表正 ,0xff代表零下  . 后两位分别代表温

STM32+NRF24L01无线(转)

源:STM32+NRF24L01无线 硬件SPI和模拟SPI源码: nrf24发送(模拟SPI)BHS-STM32.rar nrf24接收(模拟SPI)BHS-STM32.rar nrf24发送(硬件SPI)BHS-STM32.rar nrf24接收(硬件SPI)BHS-STM32.rar NRF24L01资料 NRF24.rar 部分代码: #define TX_PLOAD_WIDTH 20 // 20 uints TX payload u8 TxBuf[32]={0}; #define CE

基于stm32的遥控小船(二)NRF24L01无线模块

无线收发数据我用的模块是NF24L01……这个模块小巧而便宜……几个引脚如图……功能大概是这样的 CSN:片选,电平为低时芯片工作 CE:CSN为低时控制CE状态 SCK:SPI时钟 MOSI:Master output slave input MISO:Master input slave output IRQ:中断,低电平触发(发送完成,接收数据,达到最大重发次数时触发) 关于这个模块详细的可以参照<NRF24L01学习笔记>……写的很全面详尽…… 调无线对我来说是一个比较痛苦的过程……我