ref http://playground.arduino.cc/InterfacingWithHardware/Nrf24L01
Ref : https://github.com/aaronds/arduino-nrf24l01/tree/master/Mirf
example 1: check register
/** | |
* Pins: | |
* Hardware SPI: | |
* MISO -> 12 | |
* MOSI -> 11 | |
* SCK -> 13 | |
* | |
* Configurable: | |
* CE -> 8 | |
* CSN -> 7 | |
*/ | |
#include <SPI.h> | |
#include <Mirf.h> | |
#include <nRF24L01.h> | |
#include <MirfHardwareSpiDriver.h> | |
void setup() { | |
Serial.begin(9600); | |
Serial.println( "Starting wireless..." ); | |
// Setup | |
Mirf.spi = &MirfHardwareSpi; | |
Mirf.init(); | |
Mirf.setRADDR((byte *)"clie1"); | |
Mirf.payload = sizeof(unsigned long); | |
Mirf.config(); | |
// Read and print RF_SETUP | |
byte rf_setup = 0; | |
Mirf.readRegister( RF_SETUP, &rf_setup, sizeof(rf_setup) ); | |
Serial.print( "rf_setup = " ); | |
Serial.println( rf_setup, BIN ); | |
Serial.println( "Wireless initialized!" ); | |
} | |
void loop() {} |
example 2: tx example
/** | |
* A Mirf example to test the latency between two Ardunio. | |
* | |
* Pins: | |
* Hardware SPI: | |
* MISO -> 12 | |
* MOSI -> 11 | |
* SCK -> 13 | |
* | |
* Configurable: | |
* CE -> 8 | |
* CSN -> 7 | |
* | |
* Note: To see best case latency comment out all Serial.println | |
* statements not displaying the result and load | |
* 'ping_server_interupt' on the server. | |
*/ | |
#include <SPI.h> | |
#include <Mirf.h> | |
#include <nRF24L01.h> | |
#include <MirfHardwareSpiDriver.h> | |
void setup(){ | |
Serial.begin(9600); | |
/* | |
* Setup pins / SPI. | |
*/ | |
/* To change CE / CSN Pins: | |
* | |
* Mirf.csnPin = 9; | |
* Mirf.cePin = 7; | |
*/ | |
/* | |
Mirf.cePin = 7; | |
Mirf.csnPin = 8; | |
*/ | |
Mirf.spi = &MirfHardwareSpi; | |
Mirf.init(); | |
/* | |
* Configure reciving address. | |
*/ | |
Mirf.setRADDR((byte *)"clie1"); | |
/* | |
* Set the payload length to sizeof(unsigned long) the | |
* return type of millis(). | |
* | |
* NB: payload on client and server must be the same. | |
*/ | |
Mirf.payload = sizeof(unsigned long); | |
/* | |
* Write channel and payload config then power up reciver. | |
*/ | |
/* | |
* To change channel: | |
* | |
* Mirf.channel = 10; | |
* | |
* NB: Make sure channel is legal in your area. | |
*/ | |
Mirf.config(); | |
Serial.println("Beginning ... "); | |
} | |
void loop(){ | |
unsigned long time = millis(); | |
Mirf.setTADDR((byte *)"serv1"); | |
Mirf.send((byte *)&time); | |
while(Mirf.isSending()){ | |
} | |
Serial.println("Finished sending"); | |
delay(10); | |
while(!Mirf.dataReady()){ | |
//Serial.println("Waiting"); | |
if ( ( millis() - time ) > 1000 ) { | |
Serial.println("Timeout on response from server!"); | |
return; | |
} | |
} | |
Mirf.getData((byte *) &time); | |
Serial.print("Ping: "); | |
Serial.println((millis() - time)); | |
delay(1000); | |
} |
another arduino run
/** | |
* An Mirf example which copies back the data it recives. | |
* While wating the arduino goes to sleep and will be woken up | |
* by the interupt pin of the mirf. | |
* | |
* Warning: Due to the sleep mode the Serial output donsn't work. | |
* | |
* Pins: | |
* Hardware SPI: | |
* MISO -> 12 | |
* MOSI -> 11 | |
* SCK -> 13 | |
* | |
* Configurable: | |
* CE -> 8 | |
* CSN -> 7 | |
*/ | |
#include <SPI.h> | |
#include <Mirf.h> | |
#include <nRF24L01.h> | |
#include <MirfHardwareSpiDriver.h> | |
#include <avr/sleep.h> | |
void wakeupFunction(){ | |
} | |
void toSleep(){ | |
attachInterrupt(0,wakeupFunction,LOW); | |
sleep_mode(); | |
detachInterrupt(0); | |
} | |
void setup(){ | |
Serial.begin(9600); | |
/* | |
* Set the SPI Driver. | |
*/ | |
Mirf.spi = &MirfHardwareSpi; | |
/* | |
* Setup pins / SPI. | |
*/ | |
Mirf.init(); | |
/* | |
* Configure reciving address. | |
*/ | |
Mirf.setRADDR((byte *)"serv1"); | |
/* | |
* Set the payload length to sizeof(unsigned long) the | |
* return type of millis(). | |
* | |
* NB: payload on client and server must be the same. | |
*/ | |
Mirf.payload = sizeof(unsigned long); | |
/* | |
* Write channel and payload config then power up reciver. | |
*/ | |
Mirf.config(); | |
/* | |
* Configure seep mode to save power. | |
*/ | |
set_sleep_mode(SLEEP_MODE_PWR_DOWN); | |
sleep_enable(); | |
Serial.println("Listening..."); | |
} | |
void loop(){ | |
/* | |
* A buffer to store the data. | |
*/ | |
byte data[Mirf.payload]; | |
/* | |
* If a packet has been recived. | |
*/ | |
if(!Mirf.isSending() && Mirf.dataReady()){ | |
/* | |
* Get load the packet into the buffer. | |
*/ | |
Mirf.getData(data); | |
/* | |
* Set the send address. | |
*/ | |
Mirf.setTADDR((byte *)"clie1"); | |
/* | |
* Send the data back to the client. | |
*/ | |
Mirf.send(data); | |
}else{ | |
/* No data - night night. */ | |
toSleep(); | |
} | |
} |
Vi -> 5V
VDD -> 3.6V
datasheet
Ref : https://www.sparkfun.com/datasheets/Components/SMD/nRF24L01Pluss_Preliminary_Product_Specification_v1_0.pdf
沒有留言:
張貼留言