STM Урок 113. NRF24L01. Несколько передатчиков. Часть 3



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

 

Теперь займёмся третьим передатчиком. Схема для него будет такая же точно, как и для второго. Подключим теперь третий передатчик к ПК, а плату приёмника подключим к отдельному питанию.

Проект для третьего передатчика мы сделаем из проекта для второго, а назовём уже NRF24_TX_PIPE2.

Запустим данный проект в Cube MX, и, ничего в нём не трогая, сгенерируем проект и откроем его в Keil. Настроим программатор на авторезет, оптимизацию включим в 1, подключим файл NRF24.c и попробуем собрать проект. Прошивать пока не будем, так как одинаковые адреса, будут неизбежно коллизии на приёмнике.

Перейдём в файл NRF24.c и изменим адрес

 

uint8_t TX_ADDRESS[TX_ADR_WIDTH] = {0xb6,0xb5,0xa1};

 

Почему мы меняем именно первый байт?

Да потому что мы, когда изучали каналы, мы видели, что начиная с PIPE2, мы не можем полностью задавать адреса, а можем задавать только младшую часть адреса, которая и находится в буфере адреса в первой (а точней на нулевой) ячейке.

 

 

Также изменим время между попытками повторной передачи пакета в функции инициализации

 

NRF24_WriteReg(SETUP_RETR, 0x8F); // 2250 us, 15 retrans

 

В файле main.c в бесконечном цикле функции main() изменим время задержки

 

/* USER CODE BEGIN 3 */

  HAL_Delay(1358);

 

Соберём проект и прошьём контроллер.

Мы опять же ничего не увидим от данного передатчика на дисплее приёмника, так как мы ещё приёмник не настраивали на адрес третьего передатчика.

Поэтому подключим к отдельному питанию плату третьего передатчика, а плату приёмника опять подключим к ПК.

Перейдём в проект приёмника в файл NRF24.h и добавим макросы для третьего канала

 

#define RX_ADDR_P1 0x0B //'RX address pipe1' register address

#define RX_ADDR_P2 0x0C //'RX address pipe2' register address

#define TX_ADDR 0x10 //'TX address' register address

#define RX_PW_P0 0x11 //'RX payload width, pipe0' register address

#define RX_PW_P1 0x12 //'RX payload width, pipe1' register address

#define RX_PW_P2 0x13 //'RX payload width, pipe2' register address

 

 

 

Затем зайдём в файл NRF24.c и добавим третий адрес, а верней его младший байт

 

#define TX_PLOAD_WIDTH 7

#define TX_ADDRESS2 0xb6

 

Мы задаём только младшую часть адреса.

Перейдём теперь в функцию инициализации и сначала включим третий канал

 

NRF24_WriteReg(EN_AA, 0x07); // Enable Pipe0, Pipe1 and Pipe2

NRF24_WriteReg(EN_RXADDR, 0x07); // Enable Pipe0, Pipe1 and Pipe2

 

Передадим адрес модулю (вернее младшую часть адреса, поэтому и функцию мы уже используем не для буфера, а для обычного регистра)

 

NRF24_Write_Buf(RX_ADDR_P1, TX_ADDRESS1, TX_ADR_WIDTH);

NRF24_WriteReg(RX_ADDR_P2, TX_ADDRESS2);

 

Также зададим величину пакета для третьего канала

 

NRF24_WriteReg(RX_PW_P1, TX_PLOAD_WIDTH); //Number of bytes in RX payload in data pipe 1

NRF24_WriteReg(RX_PW_P2, TX_PLOAD_WIDTH); //Number of bytes in RX payload in data pipe 2

 

Соберём проект, прошьём контроллер и увидим следующую картину на нашем дисплее

 

 

А вот так выглядит вся наша схема (нажмите на картинку для увеличения изображения)

 

 

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

Всем спасибо за внимание!

 

 

Предыдущая часть Программирование МК STM32 Следующий урок

 

Исходный код для передатчика 0

Исходный код для передатчика 1

Исходный код для передатчика 2

Исходный код для приёмника

 

 

Модуль NRF24L01+ с антенной можно купить здесь NRF24L01+

Модуль NRF24L01+ без антенны можно купить здесь (целых 4 штуки) NRF24L01+

Адаптер для NRF24L01 можно купить здесь (5 штук) Адаптер для NRF24L01

Датчик температуры и влажности можно приобрести здесь DHT22

Отладочную плату можно приобрести здесь Nucleo STM32F401RE

Отладочную плату STM32F103C8T6 можно приобрести здесь STM32F103C8T6

Отладочную плату NUCLEO-F303K8 можно купить здесь NUCLEO-F303K8

Программатор недорогой можно купить здесь ST-Link V2

Дисплей LCD 20×4 можно приобрести здесь LCD 20×4

Переходник I2C to LCD можно приобрести здесьI2C to LCD1602 2004

 

 

Смотреть ВИДЕОУРОК (нажмите на картинку)

 

STM NRF24L01. Несколько передатчиков

Один комментарий на “STM Урок 113. NRF24L01. Несколько передатчиков. Часть 3
  1. Игорь:

    Добрый вечер, при нескольких передатчиках все работает штатно , считываю регистр observe_tx и время от времени набегает парочка недозвонов,не упущенных пакетов,а имменно «недозвонов»,это нормально?дальность очень маленькая,в пределах комнаты.т.е. передатчик недостукивается до приемника и тут же передает дальше. Или такого на столе не должно быть?

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*