码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2014-06-30 17:44:46      阅读:261      评论:0      收藏:0      [点我收藏+]

标签:javascript   stm32   开源硬件   arduino   espruino   

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

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

【小鱼有点电】

【Espruino中文社区】

bubuko.com,布布扣
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

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

标签:javascript   stm32   开源硬件   arduino   espruino   

原文地址:http://blog.csdn.net/qwert1213131/article/details/35853747

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!