Эффективная беспроводная передача данных с nRF24L01+ и ATtiny85 по 3 пинам
Компоненты и расходные материалы
| nRF24L01+ | × | 2 |
| ATtiny85 | × | 1 |
| Arduino UNO (для программирования ATtiny85 и как приёмник) | × | 1 |
| Керамический конденсатор 10 нФ | × | 1 |
| Углеродный резистор 22 кОм | × | 1 |
| Диод 1N4148 | × | 1 |
| Источник питания 3.3 В | × | 1 |
| Адаптер-сокет для nRF24L01+ (опционально) | × | 1 |
О проекте
Продолжение проекта «Программирование ATtiny85 с помощью Arduino Uno». Ищу дешёвый способ передачи данных с датчиков — нашёл nRF24L01+, недорогой трансивер с низким потреблением. Проблема: у ATtiny85 мало выводов, не хватает на nRF24L01+ и датчик одновременно. Решение — управление nRF24L01+ всего тремя пинами ATtiny85 (идея Ralph Doncaster).
Модули
Два модуля: передатчик (ATtiny85 + nRF24L01+) и приёмник (Arduino Uno + nRF24L01+). Используется библиотека RF24 (добавить в Arduino IDE).
Передатчик
Отправляет увеличивающееся число каждую секунду, используя только 3 пина ATtiny85.
Необходимые компоненты:
- ATtiny85
- nRF24L01+
- Керамический конденсатор 10 нФ
- Углеродный резистор 22 кОм
- Диод 1N4148
Прошейте ATtiny85 кодом sender.ino (как прошивать — см. предыдущий проект).



При подаче питания передатчик начинает отправлять последовательность чисел каждую секунду.
Приёмник
Принимает данные и выводит в Serial Monitor.
Компоненты:
- Arduino Uno
- nRF24L01+
- Адаптер-сокет для nRF24L01+ (опционально)
Загрузите код receiver.ino в Uno.


Важно: Питание nRF24L01+ строго 3.3 В. На некоторых клонах Arduino 3.3 В не даёт достаточно тока. Решения:
- Отдельный стабилизатор 3.3 В
- Конденсатор 10 мкФ между VCC и GND на модуле
- Использовать адаптер-сокет с встроенным стабилизатором
Для теста: включите передатчик, подключите Uno к ПК, откройте Serial Monitor (115200 бод). Должны появляться принятые числа.
Делаем устройство постоянным
Собрал на монтажной плате (perfboard).



Простой модуль, демонстрирующий управление nRF24L01+ тремя пинами ATtiny85, освобождая остальные для датчиков. Приветствуются отзывы и предложения.
Код
Передатчик (sender.ino)
#define CE_PIN 3
#define CSN_PIN 3 // 3-пиновая схема: CE и CSN на одном пине
#include "RF24.h"
RF24 radio(CE_PIN, CSN_PIN);
byte address[11] = "SimpleNode";
unsigned long payload = 0;
void setup() {
radio.begin();
radio.setAutoAck(1);
radio.setRetries(15, 15);
radio.openWritingPipe(address);
}
void loop(void) {
payload++;
radio.write(&payload, sizeof(unsigned long));
delay(1000);
}
Приёмник (receiver.ino)
#define CE_PIN 7
#define CSN_PIN 8
#include <SPI.h>
#include "RF24.h"
RF24 radio(CE_PIN, CSN_PIN);
byte address[11] = "SimpleNode";
unsigned long payload = 0;
void setup() {
Serial.begin(115200);
radio.begin();
radio.setAutoAck(1);
radio.setRetries(15, 15);
radio.openReadingPipe(1, address);
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);
}
delay(1000);
}
Схемы (Fritzing)
nRF24L01%2B(With%20Socket)%20Attiny85.fzznRF24L01%2B%20Arduino%20Uno.fzz
Производственный процесс
- Цепь с переключателем: практическое руководство по базовым электрическим цепям
- Валёк для теста: от этрусских истоков к современному мастерству
- Как считывать температуру с DS18B20 на Raspberry Pi 2
- Измерение температуры на Raspberry Pi с датчиками Maxim 1-Wire и мостом DS2482 I2C
- Точный мониторинг температуры в серверной на Raspberry Pi
- Posture Pal с Walabot — мониторинг расстояния в реальном времени для предотвращения боли в шее и спине
- Распознавание рукописных цифр на Raspberry Pi с TensorFlow и OpenCV
- Начало работы с TJBot: сборка, настройка и голосовое управление ИИ-роботом
- Сборка самобалансирующегося Segway на Raspberry Pi
- Расширение GoPiGo v2 на Windows 10 IoT Core для Raspberry Pi 3