Радиомодули nRF905 (PTR8000), подключение к Arduino

Недорогие радиомодули на 433Мгц с привычным подключением к Arduino и разъемом для внешней антенны, может быть альтернативой популярным nRF24L01+.

Характеристики nRF905.

  • Работа в безлицензионных диапазонах 433/868/915MHz (обвязка nRF905 для 433 и 868/915MHz разная)
  • Выходная мощность передатчика: +10dBm (10мВт), возможно снизить мощность до 6, -2, и -10dBm
  • Чувствительность приемника: -100dBm
  • GFSK модуляция, ширина полосы канала 100Кгц.
  • Скорость передачи по радио: 50kbps.
  • Радиус действия в прямой видимости: до 25м, с антеннами из комплекта.

Документация:

На радиомодуль PTR8000+ eng V1.1

На трансивер nRF905_PS_v1.5


Распиновка модуля и подключение к Arduino:

nRF905 не совместим с 5 вольтовыми логическими уровнями, подключение модуля без конвертера уровней может вывести его из строя.

  • VCC и GND — Пояснений не требует, питание +3,3V и масса, максимальное напряжение питания модуля 3,6V
  • CE — Standby – Режим низкого энергопотребления, High = TX/RX mode, Low = standby, подключается на любой свободный выход arduino, по умолчанию D8.
  • CLK — Не используется.
  • AM — Address Match — Выход прерывания, на выходе появляется логическая единица, когда получены данные адрес которых совпал с адресом модуля, подключать не обязательно.
  • DR — Data Ready — Выход прерывания, на выходе появляется логическая единица когда данные были отправлены и модуль готов получать следующие данные для отправки, подключать не обязательно.
  • MISO, MOSI, SCK — Интерфейс SPI
  • CSN — Chip Select интерфейса SPI, подключается на любой свободный выход arduino, по умолчанию D10.
  • TXE — TX or RX mode — Режим работы трансивера, High = TX, Low = RX, при подачи логической единицы, включается передатчик и циклически передает данные загруженные в буфер, если ноль, включается приемник. Подключается на любой свободный выход arduino, по умолчанию D9.
  • PWR — Power up — Включение модуля, High = on, Low = off
  • CD — Carrier detect — Обнаружение несущей частоты, на выходе появляется логическая единица если приемник обнаружил несущую частоту, используется для предотвращения коллизий.

Софт:

Для работы с nRF905 подходит популярная библиотека RadioHead, ссылка на нее тут.

Ниже код который я использовал для тестирования радиомодулей на дальность, он основан на примерах из библиотеки, тест показан на видео ниже.

Код приемника
// код приемника
#include <SPI.h>
#include <RH_NRF905.h>

 
//RH_NRF905 nrf905;
RH_NRF905 nrf905(6,7,5);  
 

void setup() 
{  Serial.begin(9600);
  while (!Serial) 
    ; // wait for serial port to connect. Needed for Leonardo only
  if (!nrf905.init())
    Serial.println("init failed");
  // Defaults after init are 433.2 MHz (channel 108), -10dBm
  nrf905.setRF(RH_NRF905::TransmitPower10dBm);
  nrf905.setChannel(116);        // 434.0 MHz
  pinMode(A0, OUTPUT);
}

void loop()
{
  if (nrf905.available())
  {
    // Should be a message for us now   
    int buf;
    int len = sizeof(buf);
    if (nrf905.recv((uint8_t*)&buf, (uint8_t*)&len))
    {
      digitalWrite(A0, !digitalRead(A0));
      Serial.print("got request: ");
      Serial.println(buf); 
  
    }
  }
}

Код передатчика
// код передатчика
#include <SPI.h>
#include <RH_NRF905.h>
 
 
RH_NRF905 nrf905;

unsigned int i = 0; 

void setup() {
  Serial.begin(9600);
  while (!Serial) 
    ; // wait for serial port to connect. Needed for Leonardo only
  if (!nrf905.init())
    Serial.println("init failed");
  // Defaults after init are 433.2 MHz (channel 108), -10dBm
  nrf905.setRF(RH_NRF905::TransmitPower10dBm);
  nrf905.setChannel(116);        // 434.0 MHz
}

 

void loop()
{
  i++;
  nrf905.send((uint8_t*)&i, sizeof(i));           
  nrf905.waitPacketSent();
   
  delay(500);
  
}



Купить:

на али, тут.


Видео: