nRF24L01+ with ATtiny85 3 Pins
组件和用品
| × | 2 | ||||
| × | 1 | ||||
![]() |
| × | 1 | |||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 |
关于这个项目
这将是我之前使用 Arduino Uno 编程 ATtiny85 项目的延续。现在有了更便宜的 ATtiny85,我正在寻找更便宜的方法来传输传感器数据。这让我想到了 nRF24L01+ 一种廉价、低功耗的射频收发器。这对我来说似乎是更好的解决方案。但是有一个问题,ATtiny85 中的引脚数量限制。我无法同时连接 nRF24L01+ 和其中的传感器。所以我一直在寻找解决方案并遇到“nrf24l01+ control with 3 ATtiny85 pins”。我在这里讨论我是如何实现它的。
模块
这里将有发射器和接收器两个模块。发射器是 ATtiny85,发送一些数据,接收器是 Arduino Uno,通过 nRF25L01+ 接收数据。我使用 RF24 库 (http://tmrh20.github.io/RF24/)。在开始之前按照那里给出的说明将其添加到 Arduino IDE。我不会对 RF24 做太多解释,因为有关于它的非常好的文档。
发射器
发射器每秒发送一个递增的数字。 ATtiny85 将仅使用 3 个引脚通过 nRF24L01+ 发送数据。我按照 Ralph Doncaster 给出的说明进行实施。
所需的组件是
- ATtiny85
- nRF24L01+
- 陶瓷电容器 - 10nF
- 碳膜电阻器 - 22kΩ
- 开关二极管 - 1n4148
将以下代码上传到 ATtiny85(如果您想知道如何操作,请参阅我之前的项目“使用 Arduino Uno 对 ATtiny85 进行编程”)
发件人.ino如下图连接组件



接通电源后,发射器将开始每 1 秒发送一次数字序列。
接收器
接收端接收发送端发送的数据,在串口监视器中可以看到接收到的数据。
所需的组件是
- Arduino Uno
- nRF24L01+
- nRF24L01+ 插座适配器(可选)
将以下代码上传到 Uno
接收器.ino如下图连接组件


如果这不清楚,请参阅此项目附带的 fritzing 文件。请注意,Vcc 应始终为 3v3。在某些 Arduino Uno 克隆中,3v3 电源可能没有足够的电流,从而导致 nRF24L01+ 无法工作。建议使用以下任何一种方法来解决此问题
- 使用单独的 3v3 电源
- 在模块本身的 Vcc 和 Gnd 之间添加一个 10uF 电容器。
- 使用 nRF24L01+ 插座适配器
准备好发射器和接收器后,现在是时候进行测试了。确保变送器的电源处于 ON 状态。将 Arduino Uno 连接到 PC 并在 arduino ide 中打开串行监视器。它应该如下工作
使其永久化
由于我对焊接知之甚少,我使用穿孔板使其永久化。



这是一个更简单的模块,用于演示 nRF24L01+ 如何以及我们如何仅使用 ATtiny85 的 3 个引脚来连接它,以便其余引脚可用于读取传感器数据。欢迎提供反馈/建议。
代码
- 发射器
- 接收器
发送器C/C++
#define CE_PIN 3#define CSN_PIN 3 //由于我们使用的是 3 pin 配置,我们将对 CE 和 CSN 使用相同的 pin#include "RF24.h"RF24 radio(CE_PIN, CSN_PIN);byte address[11] ="SimpleNode";unsigned long payload =0;void setup() { radio.begin(); // 启动收音机 radio.setAutoAck(1); // 确保启用 autoACK radio.setRetries(15,15); // 重试和重试次数之间的最大延迟 radio.openWritingPipe(address); // 写入设备地址 'SimpleNode'}void loop(void){ payload++; radio.write( &payload, sizeof(unsigned long) ); //将数据发送到“接收器”每秒钟延迟(1000);}
接收器C/C++
#define CE_PIN 7#define CSN_PIN 8#include#include "RF24.h"RF24 radio(CE_PIN, CSN_PIN);byte address[11] ="SimpleNode";unsigned long payload =0;void设置(){ Serial.begin(115200);收音机。开始(); // 启动收音机 radio.setAutoAck(1); // 确保启用 autoACK radio.setRetries(15,15); // 重试和重试次数之间的最大延迟 radio.openReadingPipe(1, address); // 写入设备地址 'SimpleNode' radio.startListening();}void loop(void){ radio.stopListening(); radio.startListening(); radio.read( &payload, sizeof(unsigned long) ); if(payload !=0){ Serial.print("Got Payload"); Serial.println(payload); } 延迟(1000);}
示意图
nRF24L01%2B(With%20Socket)%20Attiny85.fzz nRF24L01%2B%20Arduino%20Uno.fzz制造工艺