Суббота, 23.09.2017, 19:24
RC - Мастерская
Главная | Каталог статей | Регистрация | Вход
Меню
Статистика
Главная » Статьи » Инструкции » Микроконтроллеры

Трансивер 2.4 гГц nRF24L01+
Трансивер 2.4 гГц nRF24L01+


Купить на Паркфлаере
Купить на Паркфлаере (другая распиновка)
Купить на Паркфлаере
Купить на "Умные устройства"

Радиомодуль построен на однокристальном трансивере nRF24L01. Радиус действия до 100м. Его удобно использовать для построения беспроводных сетей домашней автоматизации, каналов дистанционного управления, в игрушках. Модуль имеет компактные размеры и встроенную антенну.

Характеристики:
Интерфейс подключения: SPI (5V tolerant)
Напряжения питания: 3.3В
Диапазон: 2.4 гГц
Модуляция: GFSK
Количество каналов: 128
Количество одновременных каналов радиосвязи: 6
Длинна сетевого адреса: 5байт
Скорость радиоканала: 250Кбит/с, 1Мбит/с, 2Мбит/с

Даташит
Библиотека для Arduino (Mirf) 

Используя эту библиотеку, я столкнулся с неожиданной проблемой: на одной из моих плат разъем для модуля оказался на программном SPI (iBoard Pro от Itead Studio). Библиотеку пришлось несколько подредактировать, чтоб была возможность использовать как хардверный, так и софтверный SPI. Результат можно скачать тут.

Распиновка:

 

 

NRF24L01 pin Arduino Uno/Nano/Mini Arduino Mega
1 - GND GND GND
2 - VCC 3.3V 3.3V
3 - CE(прием/передача) 9 9
4 - CSN(Выбор устройства, инвертированный) 13 53
5 - SCK(тактирование) 10 52
6 - MOSI 11 51
7 - MISO 12 50
8 - IRQ(прерывание) 2 2


Для тестирования необходимо 2 модуля с двумя микроконтроллерами. Тестовый пример передает данные, принятые по параллельному порту МК1 на параллельный порт МК2.
При прошивке микроконтроллеров необходимо установить для МК1:
#define TX_ADDR "app1"
#define RX_ADDR "app2"
Для МК2:
#define TX_ADDR "app2"
#define RX_ADDR "app1"

Пример кода (Arduino) для теста:
#include <SPI.h>
#include <Mirf.h>
#include <nRF24L01.h>
#include <MirfHardwareSpiDriver.h>
#define MAX_BUFF 32 //Буфер приёма-передачи
#define TX_ADDR "app2"
#define RX_ADDR "app1"

void setup(){
  Serial.begin(9600);
  Mirf.spi = &MirfHardwareSpi;
  Mirf.cePin = 9;
  // UNO
  Mirf.csnPin = 10;
  //MEGA
  //
Mirf.csnPin = 53;
  Mirf.init();
 
  Mirf.setRADDR((byte *)RX_ADDR); //Здесь задаём собственный адрес
  Mirf.payload = MAX_BUFF; //Здесь задаём буфер
  Mirf.channel = 10;
  //Это канал приёма-передачи - должен быть одинаковым у устройств.
  Mirf.config();
  
  Serial.println("Start..");
}

char buff[MAX_BUFF];
int c_count = 0;
 
void loop(){
  int i;
  //sending
  if (c_count = Serial.available()) {
    if (c_count <= MAX_BUFF) {
      for (i=0; i<c_count; i++) {
        buff[i] = Serial.read();
      }
    } else {
      for (i=0; i<MAX_BUFF; i++) {
        buff[i] = Serial.read();
      }
    }
    buff[i] = 0;
    Mirf.setTADDR((byte *)TX_ADDR); //Адрес получателя
    Serial.print(">");
    Mirf.send((uint8_t *)buff);
    while(Mirf.isSending()){
    }
    Serial.println(buff);
  }
  delay(10);
  //receiving
  if(Mirf.dataReady()) {
    Mirf.getData((uint8_t *)buff);
    if (buff[0]!=0)
    {
    Serial.print("<");
    Serial.println(buff);
    }
  }
  delay(100);
}

 

 

Категория: Микроконтроллеры | Добавил: Mactep (22.08.2013)
Просмотров: 5984 | Теги: nrf24l01, Arduino | Рейтинг: 0.0/0
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Поиск