Как использовать get_properties для получения RSSI в RF24?
Как использовать get_properties, как показано на рисунке ниже? Я не понимаю < a href="http://community.silabs.com/mgrfq63796/attachments/mgrfq63796/BluetoothandWiFi/8086/1/Si446X%20API%20DESCRIPTIONS.pdf">AN625, как использовать get_properties получить RSSI?
Добавление исходного кода на основе функций RH_RF24.
#include <SPI.h>
#include <RH_RF24.h>
// Одиночный экземпляр радиодрайвера
RH_RF24 rf24;
uint8_t Recieve_Data[20];
uint8_t receive_buffer[RH_RF24_MAX_MESSAGE_LEN];
uint8_t receive_buffer_length = sizeof(receive_buffer);
uint8_t Rssi;
unsigned long Micro_Time;
uint8_t status[8];
uint8_t buf[RH_RF24_MAX_MESSAGE_LEN];
uint8_t len = sizeof(buf);
void setup()
{
Serial.begin(115200);
if (!rf24.init())
Serial.println("init failed");
// По умолчанию после инициализации 434,0 МГц, модуляция GFSK_Rb5Fd10, мощность 0x10
while(!rf24.setFrequency(443));
rf24.setModemConfig(rf24.GFSK_Rb50Fd100); // 置成GFSK_Rb50Fd100
}
void loop()
{
rf24.setModeRx();
delay(100);
rf24.setModeIdle();
rf24.command(RH_RF24_CMD_GET_INT_STATUS, NULL, 0, status, sizeof(status));
Serial.print("Id ");
for (int i = 0; i <= 8; i++)
{
Serial.print((uint8_t)status[i]);
Serial.print(" ");
}
Serial.println();
/*
if (status[2])
{
uint8_t modem_status[6];
rf24.command(RH_RF24_CMD_GET_MODEM_STATUS, NULL, 0, modem_status, sizeof(modem_status));
delay(100);
for (int i = 0; i <= 6; i++)
{
Serial.print(modem_status[i]);
Serial.print(" ");
}
Serial.println();
}
*/
delay(400);
}
@lanse7pty, 👍0
Обсуждение1 ответ
Лучший ответ:
Используя RH_RF24 rf24;
(экземпляр радиодрайвера для одного экземпляра), чтение набора свойств становится очень простым.
- Свойства должны находиться в одной и той же ГРУППЕ,
- В одном запросе можно прочитать до 16 свойств.
Здесь и далее приведен пример чтения из
SYNC_CONFIG
вSYNC_BITS_7_0
(5 свойства).
Шаг 1. Объявите собственный uint8_t sync_stat[5];
или используйте все еще объявленный uint8_t status[8];
. р>
uint8_t sync_stat[5];
Шаг 2. Фактически, firstProperty
— это первое свойство, которое нужно прочитать, а count
— количество следующих друг за другом свойств, которые нужно прочитать (из SYNC_CONFIG = 0x1100
на SYNC_BITS_7_0 = 0x1104
.
// И проверяем возвращенный код
if (rf24.get_properties(SYNC_CONFIG,sync_stat,5)) {
// sync_stat[0]= SYNC_CONFIG
// ...
// sync_stat[4]= SYNC_BITS_7_0
}
Тогда эквивалентным
command()
является:
uint8_t buf[3];
buf[0] = SYNC_CONFIG >> 8;
buf[1] = 5;
buf[2] = SYNC_CONFIG & 0xff;
if (rf24.command(RH_RF24_CMD_GET_PROPERTY, buf, sizeof(buf),sync_stat,5)) {
// Тот же массив
}
- Декодировать радиочастотные удаленные сигналы с помощью ESP32 или node MCU?
- SD-карта и модуль Lora arduino uno
- Можно ли передавать радиосигнал дешевым передатчиком 433 МГц в виде строк и принимать его с помощью RTL-SDR?
- Зашифрованная радиосвязь Arduino
- Как исправить задержку курсора мыши на голосовой и двигательной головной мыши в беспроводных настройках?
- Что это за модуль NRF24L01?
- RF Keyfob простой код кнопки
- В чем разница между вариантами RF (wifi, xbee, NRF24L01)
Какую часть вы используете, так как эта функция доступна только для семейства приемопередатчиков Silicon Labs Si4460/4461/4463/4464 и эквивалентного семейства чипов HopeRF RF24/26/27 и модулей HopeRF RFM24W/26W/27W, @Gerben
@Gerben Я использую Si4463., @lanse7pty
Как указано в ["Github - lora_chisterapi/lib/radiohead/RH_RF24.cpp"](https://github.com/Snootlab/lora_chisterapi/blob/master/lib/radiohead/RH_RF24.cpp),
firstProperty = (GROUP << 8) + (START_PROP)
иuint8_t* values
+uint8_t count
используются для сохранения свойств чтения., @J. Piquard@ J.Piquard Не могли бы вы написать пример, я плохо его понимаю. Кажется, я могу получить RSSI, просто используя команду RH_RF24::, как в сети, которую вы указали., @lanse7pty
Вместо использования
command()
в качестве статического вызова (RH_RF24::command
), лучшим подходом должно быть использование экземпляра класса и объявлениеRH_RF24 rf24;
перед функциейsetup()
и инициализация экземпляр с вызовомrf24.init()
. Итак, не могли бы вы предоставить исходный код, который вы пробовали в своем Arduino, чтобы дать вам более конкретный пример?, @J. Piquard@J.Piquard J.Piquard Мне очень жаль, я не знаю, как редактировать код, поэтому, хотя я добавил их в свой вопрос, но они неясны., @lanse7pty
@ lanse7pty, я отформатировал добавленный вами исходный код, но дождитесь экспертной оценки. Ваш исходный код кажется хорошим, но будьте осторожны с использованием
sizeof(status)
в запросеrf24.command()
(доступно, только когда размер элемента равен 1 =sizeof(uint8_t)
), затемi <= 8
на дисплее цикла for., @J. Piquard