как узнать канал, с которого я получаю информацию, когда я использую nRF24L01 для соединения между 3 из них
Я использую nRF24L01 для соединения между тремя из них (1 - ведущий, а остальные - ведомые) и использую библиотеку nRF24. Проблема в том, что когда ведущий получает что-то от других ведомых, он не знает, с какого канала пришла информация. Так есть ли способ узнать, с какого канала?
//главный код канала: константные байтовые адреса[][6] = {"00001", "00002","00003"}; радио.openWritingPipe(addresses[1]); // мастр radio.openReadingPipe(2, адреса[0]); // карвул радио.openReadingPipe(2, адреса[2]); // carwl2
//код канала ведомого устройства 1: константные байтовые адреса[][6] = {"00001", "00002","00003"}; радио.openWritingPipe(адреса[0]); // carw1 радио.openReadingPipe(2, адреса[1]); // мастр
//код канала ведомого устройства 2: константные байтовые адреса[][6] = {"00001", "00002","00003"}; радио.openWritingPipe(адреса[0]); // 00003 радио.openReadingPipe(2, адреса[2]); // 00002
библиотека, которую я использую: https://github.com/nRF24/RF24
@zangin, 👍1
2 ответа
Лучший ответ:
Вы можете передать функцииRF24.available
указатель на переменную. Функция available запишет номер канала сообщения в эту переменную.
пример можно найти в документации
nRF24 очень универсален и может быть запрограммирован для ряда различных сетевых топологий. Кажется, вам нужно либо
- Сеть «один ко многим» — где главный узел отправляет данные подчиненным узлам
- Сеть «многие к одному» — где главный узел получает данные от многих подчиненных узлов.
Обе сети реализуются с использованием одного и того же радиоканала (RF_CH
) на всех узлах.
Для сети «один ко многим» вам необходимо иметь разные адреса RX для каждого подчиненного узла. Установите главный адрес TX на адрес RX соответствующего подчиненного узла, который вы хотите получать данные. Готово.
Для сети «многие к одному» вы ограничены 6 подчиненными узлами. На главном радио вам нужно будет установить адреса каналов данных 0-5 на адреса TX подчиненного. Главный будет прослушивать данные на всех каналах и сигнализировать прерывание всякий раз, когда данные будут получены на любом из них.
Чтобы добиться двунаправленной связи с (практически) неограниченным количеством подчиненных узлов, лучше всего использовать встроенную функцию ACK PAYLOAD nRF24. Помимо настройки сети «один ко многим», вам необходимо включить ACK payload на каждом радиоузле. Процедура, которой нужно следовать, приведена в техническом описании nRF24L01. Я не могу не рекомендовать, насколько важно это прочитать и извлечь уроки. Вы сможете отправить сообщение от главного устройства к одному подчиненному и получить данные обратно от этого узла в той же радиопередаче, автоматической повторной передаче и т. д., включенных в сделку. Таким образом, вы также узнаете, с какого узла поступают данные, — без необходимости кодировать идентификацию подчиненного узла в сообщении. Невероятно, чего позволят вам достичь эти маленькие радиоустройства!
- вопрос по трубке nRF24L01
- Использование функции уровня сигнала модуля nRF24L01
- Как автоматически сбросить nrf24l01+ с кодом?
- Не получаем данные от NRF24L01
- nRF24L01 не общается
- Как отправить данные датчика с Arduino через NRF24L01 на Raspberry Pi
- Модуль nRF24L01 с использованием библиотеки Mirf работал, а затем остановился
- Модуль Bluetooth против беспроводного модуля Arduino