Transmission sans fil de capteur 3 broches avec nRF24L01+ et ATtiny85
Composants et fournitures
| Composant | Quantité |
|---|---|
| Module nRF24L01+ | 2 |
| ATtiny85 | 1 |
| Arduino UNO | 1 |
| Condensateur céramique 10 nF | 1 |
| Résistance carbone 22 kΩ | 1 |
| Diode de commutation 1N4148 | 1 |
| Source d'alimentation 3,3 V | 1 |
| Support nRF24L01+ avec adaptateur (optionnel) | 1 |
À propos de ce projet
Ce projet fait suite à mon tutoriel précédent « Programmer un ATtiny85 avec un Arduino Uno ». Après avoir remplacé l'Arduino par un ATtiny85 moins cher, je cherchais un moyen économique de transmettre les données des capteurs. Le transceiver RF nRF24L01+, peu coûteux et à faible consommation, s'est imposé. Mais l'ATtiny85 ne dispose que de 5 broches I/O, insuffisantes pour connecter à la fois le nRF24L01+ (qui en nécessite normalement 5 : SCK, MISO, MOSI, CE, CSN) et un capteur. J'ai découvert une astuce pour piloter le nRF24L01+ avec seulement 3 broches de l'ATtiny85. Voici comment je l'ai mis en œuvre.
Modules
Deux modules : un émetteur (transmitter) basé sur ATtiny85 qui envoie des données, et un récepteur (receiver) basé sur Arduino Uno qui reçoit les données via un nRF24L01+. J'utilise la bibliothèque RF24 (tmrh20.github.io/RF24/). Suivez les instructions d'installation pour l'ajouter à l'Arduino IDE.
Émetteur (Transmitter)
L'émetteur envoie un nombre incrémenté chaque seconde. L'ATtiny85 transmet les données via le nRF24L01+ en n'utilisant que 3 broches, suivant la méthode de Ralph Doncaster.
Composants requis :
- ATtiny85
- nRF24L01+
- Condensateur céramique 10 nF
- Résistance carbone 22 kΩ
- Diode de commutation 1N4148
Code de l'émetteur (sender.ino) :
#define CE_PIN 3
#define CSN_PIN 3 // Configuration 3 broches : même broche pour CE et 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);
}
Branchement :
Suivez le schéma ci-dessous. L'astuce 3 broches utilise une résistance de 22 kΩ, un condensateur de 10 nF et une diode 1N4148 pour partager la broche CE/CSN.
Une fois alimenté, l'émetteur envoie une séquence de nombres chaque seconde.
Récepteur (Receiver)
Le récepteur reçoit les données de l'émetteur et les affiche dans le moniteur série.
Composants requis :
- Arduino Uno
- nRF24L01+
- Support nRF24L01+ avec adaptateur (optionnel)
Code du récepteur (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);
}
Branchement :
Important : L'alimentation du nRF24L01+ doit être en 3,3 V. Sur certains clones Arduino Uno, le régulateur 3,3 V ne fournit pas assez de courant. Solutions recommandées :
- Utiliser une alimentation 3,3 V séparée
- Ajouter un condensateur de 10 µF entre VCC et GND sur le module
- Utiliser un adaptateur de support nRF24L01+ (qui intègre souvent un régulateur)
Test
Alimentez l'émetteur. Connectez l'Arduino Uno au PC et ouvrez le moniteur série (115200 bauds). Vous devriez voir les payloads reçus s'afficher chaque seconde.
Rendre le montage permanent
J'ai soudé le tout sur une plaque à pastilles (perfboard) pour une version définitive.
Ce module simple démontre comment utiliser un nRF24L01+ avec seulement 3 broches d'un ATtiny85, libérant les autres broches pour la lecture de capteurs. Commentaires et suggestions bienvenus !
Code
Émetteur (C/C++)
#define CE_PIN 3
#define CSN_PIN 3
#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);
}
Récepteur (C/C++)
#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);
}
Schémas
Fichiers Fritzing joints :
nRF24L01%2B(With%20Socket)%20Attiny85.fzznRF24L01%2B%20Arduino%20Uno.fzz
Processus de fabrication
- Circuit avec interrupteur : guide pratique des circuits électriques de base
- Comment lire la température avec un DS18B20 sur Raspberry Pi 2
- Mesure de température sur Raspberry Pi avec capteurs 1‑Wire Maxim et pont I2C DS2482
- Surveillance précise de la température dans un placard serveur avec Raspberry Pi
- Posture Pal avec Walabot – Surveillance de distance en temps réel pour arrêter douleurs cou et dos
- Créer un Reconnaissance de Chiffres sur Raspberry Pi avec TensorFlow et OpenCV
- Démarrage avec TJBot : Construire, Configurer et Contrôler par la Voix Votre Propre Robot IA
- Construire un Segway auto‑équilibré avec Raspberry Pi
- Étendre GoPiGo v2 sur Windows 10 IoT Core pour Raspberry Pi 3