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+无线收发器的更多相关文章

  1. NRF24L01无线通讯模块驱动

    NRF24L01 无线模块,采用的芯片是 NRF24L01,该芯片的主要特点如下: )2.4G 全球开放的 ISM 频段,免许可证使用. )最高工作速率 2Mbps,高校的 GFSK 调制,抗干扰能力 ...

  2. STM32+NRF24L01无线(转)

    源:STM32+NRF24L01无线 硬件SPI和模拟SPI源码: nrf24发送(模拟SPI)BHS-STM32.rar nrf24接收(模拟SPI)BHS-STM32.rar nrf24发送(硬件 ...

  3. [Micropython]TPYBoard v10x NRF24L01无线通讯模块使用教程

    1.实验目的: •       学习使用NRF24L01无线通讯模块 2.所需原器件: •       TPYBoard v10X开发板两块 •       NRF24L01无线通讯模块两个 •    ...

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

    俗话说:每个人一生下来什么都会的,都是通过自己努力和探索出来的,NRF系列芯片,刚开始都好奇心加兴趣才来捣鼓它的,刚开始做硬件和软件,没有收发数据弄得整个人头都快炸开了,所以在此和大家分享一下前辈的经 ...

  5. STC8H开发(五): SPI驱动nRF24L01无线模块

    目录 STC8H开发(一): 在Keil5中配置和使用FwLib_STC8封装库(图文详解) STC8H开发(二): 在Linux VSCode中配置和使用FwLib_STC8封装库(图文详解) ST ...

  6. nRF24L01无线介绍

    CE:RX或TX模式选择 CSN:SPI片选信号 SCK:SPI时钟 MOSI:SPI数据输入 MISO:SPI数据输出 IRQ:可屏蔽中断脚 51测试程序 实测可用! #define TX_ADR_ ...

  7. nRF24L01无线模块笔记

    nRF24L01模块 官网链接: https://www.nordicsemi.com/Products/nRF24-series 常见的无线收发模块, 工作在2.4GHz频段, 适合近距离遥控和数据 ...

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

    哈哈,穷吊死一个,自己做的一个超简单的板还没有电源提供,只得借助我的大开发板啦.其实这2个模块是完全可以分开的,无线嘛,你懂得!进入正题,这个实验的功能就是一个发送模块(大的那个板)连接4个按键,通过 ...

  9. 树莓派与Arduino Leonardo使用NRF24L01无线模块通信之基于RF24库 (三) 全双工通信

    设计思路 Arduino Leonardo初始化为发送模式,发送完成后,立即切换为接收模式,不停的监听,收到数据后立即切换为发送模式,若超过一定时间还为接收到数据,则切换为发送模式. 树莓派初始化为接 ...

随机推荐

  1. Velocity脚本新手教程

    从网络下的数据汇编 一.Velocity简介 Velocity它是Apache该公司的开源产品,它是一套基于Java语言模板引擎,背景可以非常灵活的数据与模板文件一起反对.他直言不讳地说:,人使用模板 ...

  2. LR杂记 - loadrunner各项指标结果分析

    Transactions (用户事务分析) 用户事务分析是站在用户角度进行的基础性能分析. 1 . Transation Sunmmary (事务综述) 对事务进行综合分析是性能分析的第一步,通过分析 ...

  3. 【Swift】学习笔记(四)——设置(Collection)

    Swift和其他语言也提供了两种类型的集合:数组和字典 数组:数组用来按顺序存储同样类型的数据,swift规定它是类型安全的,每个数组都有自己的类型也就是其它语言所说的泛型. 创建数组: 1.var ...

  4. Cordova探险系列(一个)

    最早接触PhoneGap平台是在1年多之前,可以使用HTML.CSS和JavaScript跨平台来编写Android或者IOS设备程序.而且应用的核心代码不须要多少改动就行移植.确实让我感觉的到它应该 ...

  5. 简单vector达到

    得知c++于,看完这本书后,,最近苦于不知道下一步该怎么做了,在寻找STL在各种容器的源代码分析,我想一次又一次地实现它. 之前,很多问题看的时候不知道是怎么回事,意与理解的.这个vector类写得特 ...

  6. Android 布局管理器

    为了更好地管理Android应用程序的用户界面组件,Android它提供了一个布局管理.通过使用布局管理,Android具有良好的平台无关的图形用户界面应用程序. 平时,推荐布局管理器来管理分布式组件 ...

  7. ios 类似的效果淘宝商品详细页面

    今天试着写ios 分类似影响淘宝的商品详细页面 我使用第三方库EGORefreshTableHeaderView有一个下拉效果刷新PWLoadMoreTableFooterView上拉电阻负载许多其他 ...

  8. apk反编译工具-apktool

    apk很easy被反编译,关于这篇文章apktool反编译工具. (一)优势反编译 1.能学习别人优秀代码 看看优秀apk他们的string.color命名规则,看看布局排版等都能学习到东西. 2.进 ...

  9. JavaScript权威指南科13章 webj浏览器avascript

    13.1 clientjavascript window对象是所有clientjavascript特点和api主要的接入点.它代表了一个浏览器窗口,通过window对象引用它. window 方法 a ...

  10. DDD Reference

    版权声明:本文博客原创文章.博客,未经同意,不得转载.