Поиск по этому блогу

22 окт. 2016 г.

NRF24L01 - Arduino

Подключение к ардуине




Arduino Nano, UNO

SCK — D13
MOSI — D11
MISO — D12
CSN — D10
CE/SS — D9


Arduino MEGA

SCK — D52
MOSI — D51
MISO — D50
CSN — D53
CE/SS — D49

  Для СЕ и CSN можно использовать любые пины (меняется в скетче RF24 radio(9,10);).



  Для улучшения качества связи, рекомендуется припаять конденсатор ~100мкф между плюсом и минусом модуля.




Программирование


Пример №1

Итак, нам понадобится библиотека RF24, две ардуины, два модуля и один светодиод.


Первая ардуина будет по очереди отправлять два числа — 255 и 155:


#include 
#include 
RF24 radio(9, 10); // можно использовать любые
const uint32_t pipe = 123456789; // адрес
byte massiv[1];
void setup()
{
  Serial.begin(57600);
  radio.begin();
  radio.setDataRate(RF24_250KBPS); // скорость обмена данными RF24_1MBPS или RF24_2MBPS
  radio.openWritingPipe(pipe); // открыть канал на отправку
}

void loop()   {
  massiv[0] = 255;
  radio.write(massiv, 1);
  delay(500);
  massiv[0] = 155;
  radio.write(massiv, 1);
  delay(500);
}




Вторая ардуина будет принимать числа (255 и 155) и включать/выключать светодиод подключенный к D6:


#include 
#include 
RF24 radio(9, 10);
const uint32_t pipe = 123456789;
byte massiv[4];
void setup()   {
  pinMode(6, OUTPUT);
  Serial.begin(57600);
  radio.begin();
  radio.setDataRate(RF24_250KBPS); // RF24_1MBPS или RF24_2MBPS
  radio.openReadingPipe(1,pipe); // открыть канал на приём
  radio.startListening(); // приём
}

void loop()  {
  if(radio.available())
    {
      radio.read(massiv, 1);
      if(massiv[0] == 255)
        {
          Serial.println(massiv[0]); 
          digitalWrite(6, HIGH);
        }

      if(massiv[0] == 155)
        {
          Serial.println(massiv[0]); 
          digitalWrite(6, LOW);
        }        
     }
}




Пример №2

Первая ардуина будет посылать значения температуры и влажности второй ардуине. Потребуется библиотека stDHT.

Отправка:


#include 
#include 
RF24 radio(9, 10); #include "stDHT.h"
DHT sens(DHT22);
const uint32_t pipe = 123456789; byte massiv[2];
void setup()
{
  Serial.begin(57600);
  radio.begin();
  radio.setDataRate(RF24_250KBPS); 
  radio.openWritingPipe(pipe);
}

void loop()   {
  int t = sens.readTemperature(2); // чтение датчика на пине 2
  int h = sens.readHumidity(2); 
  massiv[0] = t;
  massiv[1] = h;
  radio.write(massiv, 2);
  delay(2000);
}



Приём:


#include 
#include 
RF24 radio(9, 10);
const uint32_t pipe = 123456789;
byte massiv[2];
void setup()   {
  pinMode(6, OUTPUT);
  Serial.begin(57600);
  radio.begin();
  radio.setDataRate(RF24_250KBPS); 
  radio.openReadingPipe(1,pipe);
  radio.startListening();
}

void loop()  {
  if(radio.available())
    {
      radio.read(massiv, 2);
      int t = massiv[0];
      int h = massiv[1]; 
      Serial.println(t);
      Serial.println(h);
    }
}


Здесь показаны простые примеры, «чтоб заработало», а вот для вдумчивого изучения рекомендую обратится к примерам из библиотеки.
    рекомендую обратится к примерам из библиотеки.