4.10.1. Лабораторная работа №4.10.1.md


Беспроводная связь - сканер радиоэфира

Тема работы

До сих пор все наши устройства были «привязаны» проводами. В этой лабораторной работе мы сделаем первый шаг в мир беспроводных технологий. Мы познакомимся с популярным радиомодулем NRF24L01, который позволяет устройствам общаться друг с другом «по воздуху». Мы не будем передавать данные, а напишем полезную программу-сканер, которая покажет нам, какие радиоканалы свободны, а какие заняты. Это важнейший первый шаг перед настройкой любой беспроводной связи.

Цель

  • Понять назначение и принцип работы интерфейса SPI.
  • Познакомиться с характеристиками и возможностями радиомодуля NRF24L01.
  • Научиться использовать специальные разъёмы на плате Рудирон для быстрой установки модулей.
  • Написать программу-сканер для анализа радиоэфира.

Оборудование и материалы

  • Отладочная плата Рудирон.
  • 1 радиомодуль NRF24L01.
  • USB-кабель для подключения Рудирона.
  • Компьютер с Arduino IDE и установленной библиотекой Rudiron_NRF24L01.

Ход работы

  1. Интерфейс SPI

    Радиомодуль NRF24L01 обменивается данными с микроконтроллером по интерфейсу SPI (Serial Peripheral Interface). В отличие от I2C, SPI — это более быстрый и простой интерфейс, который идеально подходит для устройств, требующих высокой скорости передачи данных, таких как радиомодули, дисплеи или SD-карты.

    В простейшем случае SPI использует 4 линии:

    • MISO (Master In, Slave Out) — данные от ведомого к ведущему.
    • MOSI (Master Out, Slave In) — данные от ведущего к ведомому.
    • SCK (Serial Clock) — тактовый сигнал, синхронизирующий передачу.
    • CS или SS (Chip Select / Slave Select) — пин для выбора ведомого устройства, с которым будет общаться ведущий.

    Рудирон, как ведущий, управляет всем процессом, а NRF24L01 является ведомым.

  2. Модуль `NRF24L01

    NRF24L01 — это трансивер, то есть он может и передавать, и принимать данные. Он работает на частоте 2.4 ГГц (как Wi-Fi и Bluetooth).

    Важно! Модуль NRF24L01 очень чувствителен к питанию и работает от 3.3В. Никогда не подключайте его вывод VCC к пину 5V — это мгновенно выведет модуль из строя!

    На плате Рудирон есть специальный разъём, предназначенный для прямой установки модуля NRF24L01. Это невероятно удобно, так как вам не нужно соединять 8 пинов проводами.

    • Установите модуль. Просто вставьте NRF24L01 в соответствующий разъём на плате Рудирон. Убедитесь, что он вставлен правильно, согласно ключу (маркировке) на плате и модуле.

    Блокируемые пины и прерывание IRQ:

    • При установке модуля NRF24L01 задействуются пины 20, 21, 22, 24, 28, которые становятся недоступными для других задач.
    • Модуль также использует линию прерывания, которая подключена к кнопке B2 (пин 31). Чтобы прерывания от радиомодуля работали корректно, необходимо установить перемычку IRQ на плате.
  3. Установка библиотеки Rudiron_NRF24L01

    • Скачайте архив с библиотекой из репозитория Rudiron Libraries.
    • В Arduino IDE перейдите в меню Sketch → Include Library → Add .ZIP Library… и выберите скачанный архив.
  4. Написание и загрузка кода

    • Установите перемычку PRG | RUN в положение PRG.
    • В Arduino IDE введите следующий код:

      #include <Rudiron_NRF24L01.h>
      
      // Создаём объект для работы с радиомодулем
      RF24 radio(28, 20); // Пины CE, CSN
      
      void setup() {
        Serial.begin(115200);
        Serial.println("Starting NRF24L01 Channel Scanner...");
      
        if (!radio.begin()) {
        Serial.println("Радиомодуль не найден! Проверьте подключение.");
        while (true); // Бесконечный цикл, если модуль не работает
        }
      
        // Устанавливаем минимальную мощность для сканирования
        radio.setPALevel(RF24_PA_MIN);
      }
      
      void loop() {
        const int num_channels = 126;
        int values[num_channels];
      
        // Сканируем все каналы
        for (int i = 0; i < num_channels; i++) {
        radio.setChannel(i);
        radio.startListening();
        delayMicroseconds(128);
        radio.stopListening();
      
        if (radio.testCarrier()) {
            values[i] = 1; // Канал занят
        } else {
            values[i] = 0; // Канал свободен
        }
        }
      
        // Выводим карту каналов в монитор порта
        for (int i = 0; i < num_channels; i++) {
        Serial.print(values[i]);
        }
        Serial.println();
      
        delay(1000); // Пауза перед следующим сканированием
      }
      
    • Нажмите кнопку «Upload», чтобы загрузить код на плату.
  5. Проверка работы

    • Откройте Монитор последовательного порта (Tools → Serial Monitor) и установите скорость 115200 бод.
    • Вы увидите строки из нулей и единиц. 0 означает, что радиоканал свободен, а 1 — что на нём есть какая-то активность (например, работает ваш Wi-Fi роутер).

Результаты

Вы создали полезную утилиту — сканер радиоэфира. Теперь вы можете определить, на каких каналах меньше всего помех, и использовать эту информацию для настройки надёжной беспроводной связи между вашими устройствами.

Анализ результатов

  • #include <Rudiron_NRF24L01.h>. Мы подключили библиотеку для работы с NRF24L01.
  • RF24 radio(28, 20);. Мы создали объект radio и указали пины CE и CSN, которые используются на Рудироне (28 и 20).
  • radio.testCarrier(). Эта функция «слушает» эфир на выбранном канале и возвращает true, если обнаруживает несущую частоту (сигнал от другого устройства).

Выводы

В этой лабораторной работе вы научились работать с радиомодулем NRF24L01 и интерфейсом SPI. Вы поняли, как использовать специальные разъёмы на плате Рудирон для быстрой сборки проектов и как важно правильно настраивать перемычки. Навыки работы с беспроводными технологиями открывают огромные возможности для создания систем «умного дома», роботов с дистанционным управлением и сетей датчиков.

Вопросы для самопроверки

  1. Для чего используется интерфейс SPI?
  2. Почему модуль NRF24L01 нельзя подключать к 5V?
  3. Какие пины на Рудироне задействуются при установке NRF24L01 в специальный разъём?
  4. Какую перемычку и в какое положение нужно установить для корректной работы прерываний от радиомодуля?
  5. Что означает 1 в выводе сканера? А 0?
  6. Как бы вы выбрали лучший канал для своего проекта, глядя на вывод сканера?

Поздравляем с первым шагом в мир беспроводной связи! Это завершает наше знакомство с основными возможностями Рудирона. Вы прошли огромный путь и теперь готовы к созданию практически любых проектов, которые только сможете придумать