nRF24L01+ mit ATtiny85 3 Pins
Komponenten und Verbrauchsmaterialien
| × | 2 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 |
Über dieses Projekt
Dies wäre die Fortsetzung meines vorherigen Projekts Programmierung von ATtiny85 mit Arduino Uno. Jetzt mit dem billigeren ATtiny85 suchte ich nach billigeren Möglichkeiten, die Sensordaten zu übertragen. Was mich zu nRF24L01+ brachte, einem billigen HF-Transceiver mit geringer Leistung. Das schien mir die bessere Lösung zu sein. Aber es gab ein Problem, die Beschränkung der Anzahl der Pins in ATtiny85. Ich kann nicht sowohl nRF24L01+ als auch den darin enthaltenen Sensor verbinden. Also habe ich nach Lösungen gesucht und bin auf "nrf24l01+ control with 3 ATtiny85 pins" gestoßen. Hier bespreche ich, wie ich es implementiert habe.
Module
Es werden hier zwei Module Sender und Empfänger sein. Der Sender wäre ein ATtiny85, der einige Daten sendet, und der Empfänger wäre Arduino Uno, der die Daten über nRF25L01 + empfängt. Ich nutze die RF24-Bibliothek (http://tmrh20.github.io/RF24/). Folgen Sie den dort gegebenen Anweisungen und fügen Sie es zur Arduino IDE hinzu, bevor Sie damit beginnen. Ich werde nicht viel über RF24 erklären, da es eine sehr gute Dokumentation dazu gibt.
Sender
Der Sender sendet jede Sekunde eine aufsteigende Zahl. Der ATtiny85 sendet die Daten über nRF24L01+ mit nur 3 Pins. Ich befolge die Anweisungen von Ralph Doncaster bei der Implementierung.
Die erforderlichen Komponenten wären
- ATtiny85
- nRF24L01+
- Keramischer Kondensator - 10nF
- Kohlenstoffschichtwiderstand - 22kΩ
- Schaltdiode - 1n4148
Laden Sie den folgenden Code in ATtiny85 hoch (siehe mein vorheriges Projekt "Programmieren von ATtiny85 mit Arduino Uno", wenn Sie wissen möchten, wie)
sender.inoSchließen Sie die Komponenten wie unten gezeigt an
Wenn die Stromquelle angeschlossen ist, beginnt der Sender alle 1 Sekunde mit dem Senden einer Zahlenfolge.
Empfänger
Der Empfänger empfängt die vom Sender gesendeten Daten und die empfangenen Daten können im Serial Monitor angezeigt werden.
Die erforderlichen Komponenten wären
- Arduino Uno
- nRF24L01+
- nRF24L01+ Sockeladapter (optional)
Laden Sie den folgenden Code zu Uno hoch
empfänger.inoSchließen Sie die Komponenten wie unten gezeigt an
Wenn dies nicht klar ist, beziehen Sie sich auf die Fritzing-Datei, die diesem Projekt beigefügt ist. Bitte beachten Sie, dass Vcc immer 3v3 sein sollte. Bei einigen Arduino Uno-Klonen hat die 3v3-Leistung möglicherweise nicht genug Strom, was dazu führt, dass nRF24L01+ nicht funktioniert. Eine der folgenden Methoden wird empfohlen, um dies zu beheben
- Verwenden Sie ein separates 3v3-Netzteil
- Fügen Sie im Modul selbst einen 10uF-Kondensator zwischen Vcc und Gnd hinzu.
- Verwenden Sie einen nRF24L01+-Sockeladapter
Wenn Sender und Empfänger bereit sind, ist es Zeit zum Testen. Stellen Sie sicher, dass die Stromversorgung des Senders eingeschaltet ist. Verbinden Sie das Arduino Uno mit dem PC und öffnen Sie den seriellen Monitor in Arduino ide. Es sollte wie folgt funktionieren
Dauerhaft machen
Mit meinen geringen Kenntnissen im Löten habe ich es mit Perfboard dauerhaft gemacht.
Dies ist ein einfacheres Modul, um zu demonstrieren, wie der nRF24L01+ und wie wir nur 3 Pins von ATtiny85 verwenden können, um ihn anzuschließen, damit die restlichen Pins zum Lesen von Sensordaten verfügbar sind. Rückmeldungen/Vorschläge sind willkommen.
Code
- Sender
- Empfänger
SenderC/C++
#define CE_PIN 3#define CSN_PIN 3 //Da wir eine 3-Pin-Konfiguration verwenden, verwenden wir denselben Pin für CE und CSN#include "RF24.h"RF24-Radio (CE_PIN, CSN_PIN); Byte-Adresse[11] ="SimpleNode";unsigned long payload =0;void setup() { radio.begin(); // Radio starten radio.setAutoAck(1); // Stellen Sie sicher, dass autoACK aktiviert ist radio.setRetries(15,15); // Maximale Verzögerung zwischen Wiederholungen und Anzahl der Wiederholungen radio.openWritingPipe(address); // Schreibe in die Geräteadresse 'SimpleNode'}void loop(void){ payload++; radio.write( &payload, sizeof(unsigned long) ); //Sende Daten an 'Empfänger' jede Sekunde Verzögerung (1000);}
EmpfängerC/C++
#define CE_PIN 7#define CSN_PIN 8#include#include "RF24.h"RF24-Funk(CE_PIN, CSN_PIN);Byte-Adresse[11] ="SimpleNode";unsigned long payload =0;void setup () { Serial.begin (115200); radio.begin(); // Radio starten radio.setAutoAck(1); // Stellen Sie sicher, dass autoACK aktiviert ist radio.setRetries(15,15); // Maximale Verzögerung zwischen Wiederholungen und Anzahl der Wiederholungen radio.openReadingPipe (1, Adresse); // Auf Geräteadresse 'SimpleNode' schreiben radio.startListening();}void loop(void){ radio.stopListening(); radio.startListening(); radio.read( &payload, sizeof(unsigned long) ); If (Nutzlast! =0) {Serial.print ( "Got Payload"); Serial.println (Nutzlast); } Verzögerung(1000);}
Schaltpläne
nRF24L01%2B(With%20Socket)%20Attiny85.fzz nRF24L01%2B%20Arduino%20Uno.fzzHerstellungsprozess
- Schaltung mit Schalter
- Nudelholz
- Temperatur lesen mit DS18B20 | Raspberry Pi 2
- Temperaturmessung mit RASPBERRY PI
- Überwachen der Temperatur mit Raspberry Pi
- Posture Pal with Walabot
- KI-Ziffernerkennung mit PiCamera
- Erste Schritte mit TJBot
- Einen Segway mit Raspberry Pi bauen
- GoPiGo v2 mit Windows IoT