Чип nRF24L01 2,4 ГГц от компании Nordic Semiconductor поддерживает интерфейс SPI, имеет аппаратный канальный уровень и многоканальность. При этих достоинствах микросхема очень дешёвая.
По сравнению с модулями Wi-Fi, такими как ESP8266 / ESP32, nRF24L01 имеет меньшее энергопотребление, существенно дешевле (но необходимо микропроцессорное устройство управления), из недостатков — меньшая пропускная способность.
Если у вас есть хорошая сеть Wi-Fi, то вы можете подумать над тем, чтобы использовать модули Wi-Fi для своих систем и устройств.
Также модули Wi-Fi подходят, если нет жёстких ограничений по энергопотреблению. Если мы используем микросхему nRF24L01 для отправки данных в облако через Интернет, то можно применить микроконтроллер ESP или плату Raspberry в качестве шлюза.
Аппаратная часть интерфейса NRF24L01 имеет 8 выводов — Vcc, GND, IRQ, CE, выводы SPI (CSN (инвертированный сигнал выбора микросхемы), SCK, MISO и MOSI). Допускается подача на порты ввода-вывода напряжения до 5 В, в то время, как рабочий диапазон напряжения питания микросхемы 1,9–3,6 В.
Назначение выводов:
- CSN – выбор режима приёма-передачи
- SCK – синхронизация
- MISO – выход данных
- MOSI – входящие данные
Вывод CSN с активным низким уровнем, обычно находится в высоком уровне. Когда сигнал на этом выводе переключается на низкий уровень, микросхема 24L01 начинает слушать порт SPI.
Порт CE используется для управления отправкой и получением данных в режимах передачи и приёма.
Вывод прерывания IRQ с активным низким уровнем. Предусмотрено три внутренних прерывания, которые могут установить этот сигнал в низкий уровень при активации. Бит каждого из трёх прерываний можно замаскировать, чтобы, состояние вывода IRQ не менялось, когда бит активируется.
7 комментариев. Оставить новый
2ой пример не работает. ESP в эфире ничего не видит
Очень интере но а ссылку на измененную библиотеку и soft spi получить реально?
В скетче ошибка
radio.write(msg, 6); заменить на radio.write(&msg, 6);
библиотека
https://github.com/nhatuan84/RF24
ESP32 fix https://github.com/nRF24/RF24/commit/3007a78bee59b7b6e6ecae91dc391a8246b22f49
Подскажите пожалуйста что нужно изменить в библиотеке чтобы использовать ее с esp8266nodemku и на других номерах пинов
Необязательно использовать модифицированную библиотеку RF24. RF24 позволяет передать в метод begin нестандартный SPI. Все подключено как в примере для ESP32 и работает:
#define SCK 26
#define MISO 25
#define MOSI 27
#define CE 12
#define CS 14
RF24 radio(CE, CS);
void setup()
{
Serial.println(“Starting SPI”);
Serial.flush();
SPI.begin(SCK, MISO, MOSI, CS);
Serial.println(“Started”);
Serial.flush();
while (!radio.begin(&SPI)) //активировать модуль
{
Serial.println(“Can’t find RF24”);
Serial.flush();
delay(1);
}
Serial.println(“OK”);
}
но это программный SPI. лучше все же аппаратный использовать на стандартных пинах, так как аппаратный много быстрее (если нужна скорость). на 30 пиновой карте SPI связанный с Flash вроде как не разведен (GPIO 6-11 отсутствуют на плате), поэтому можно вроде как без опаски использовать HSPI & VSPI (кроме нюансов некоторых с некоторыми модулями). Вот рабочий HSPI пример (как работать с мульти SPI шинами есть пример в IDE Examples->Spi->Spi_multiple buses) для NRF 24:
//DEFAULT HSPI PINS
#define HSPI_MISO 12
#define HSPI_MOSI 13
#define HSPI_SCLK 14
#define HSPI_SS 15 //SS/CS
#define RF24_CE 27 //CE
SPIClass* hspi = NULL;
void setup()
{
Serial.println(“Starting SPI”);
Serial.flush();
hspi = new SPIClass(HSPI);
hspi->begin();
Serial.println(“Started”);
Serial.flush();
while (!radio.begin(hspi)) //активировать модуль
{
Serial.println(“Can’t find RF24”);
Serial.flush();
delay(1);
}
Serial.println(“OK”);
}