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. Web指纹识别目的Discuz识别+粗糙的版本演绎

    这个识别程序是本学期在我的职业培训项目.它是做一类似至Zoomeye怪东西,然后使用ES集成,为了让搜索引擎寻找.因此,我们必须首先去网上识别相应的能力Web包裹,如果用户输入的关键词:Discuz ...

  2. LeetCode :: Validate Binary Search Tree[具体分析]

    Assume a BST is defined as follows: The left subtree of a node contains only nodes with keys less th ...

  3. Project_2007关键

    本人今天成功用这个密钥,安装project2007. 分享给着急的小伙伴们. W2JJW-4KYDP-2YMKW-FX36H-QYVD8 版权声明:本文博客原创文章.博客,未经同意,不得转载.

  4. Android Activity之间通信

    package com.example.myapp; import android.app.Activity; import android.content.DialogInterface; impo ...

  5. 深入浅出jsonp(转)

    前言 第一次听说jsonp,其实早在2年之前.当时在做一个活动页面的抽奖模块,要从服务端get一个概率,当时什么都不懂,同事说用ajax,我就用ajax,同事说dataType改成jsonp,我就改成 ...

  6. 对于超大型SQL SERVER数据库执行DBCC操作

    原文:对于超大型SQL SERVER数据库执行DBCC操作 对于数据库维护,主要使用DBCC CHECKDB来实现,以下是对大型数据库的使用说明,小型数据库一般直接使用就可以了: 1.2008(200 ...

  7. socket抓取网页

    #include <iostream> #include <string> #include <netdb.h> #include <stdio.h> ...

  8. 每天收获一点点------Hadoop之HDFS基础入门

    一.HDFS出现的背景 随着社会的进步,需要处理数据量越来越多,在一个操作系统管辖的范围存不下了,那么就分配到更多的操作系统管理的磁盘中,但是却不方便管理和维护—>因此,迫切需要一种系统来管理多 ...

  9. EXCEL Pivot table manipulate

    Add filter For the Demo time,I would like to filter out the products which not in Red and Black colo ...

  10. 让UIAlertController兼容的同时iphone和ipad

    让UIAlertController兼容的同时iphone和ipad by 吴雪莹 var alert = UIAlertController(title: nil, message: message ...