Настройка передатчика и приемника 433 МГц в одном скетче Arduino с помощью Radiohead

Я установил пару передатчика и приемника 433 МГц на одной плате Arduino Uno. Используя библиотеку RCSwitch, я мог успешно отправлять и получать сигналы. Однако, используя библиотеку Radiohead, я мог только отправлять и не получал приема. Мне любопытно, почему, и я благодарен за любую помощь.

Вот скетч. И приемник, и передатчик получают питание от Arduino 5V и GND. Контакт DATA передатчика подключен к контакту 12 Arduino. Контакт DATA приемника подключен к контакту 11. Похоже, что они «жестко запрограммированы» в библиотеке Radiohead. В моем приемнике есть дополнительный контакт выбора чипа (CS), который я подключил к контакту 10.

Использование последовательного монитора показывает, что передатчик и приемник инициализируются без проблем, и сообщение отправляется. Я использовал библиотеку RCSwitch с передатчиком и приемником на одной плате, и это сработало (т. е. отправленные сообщения были получены правильно), поэтому мне любопытно, в чем проблема с Radiohead.

// Включить библиотеку амплитудной манипуляции RadioHead
#include <RH_ASK.h>
// Включить зависимую библиотеку SPI
#include <SPI.h> 

// Создать объект амплитудной манипуляции
RH_ASK rf_receiver;
RH_ASK rf_transmitter;

void setup()
{
    // Инициализировать объект ASK
    if (!rf_receiver.init())
        Serial.println("Failed to initialize receiver.");
    if (!rf_transmitter.init())
        Serial.println("Failed to initialize transmitter.");

    Serial.begin(9600);

    digitalWrite(10, HIGH);   // включить CS на некоторых принимающих устройствах
}

void loop()
{
    const char *msg = "Hello world!";
    rf_transmitter.send((uint8_t *)msg, strlen(msg));
    rf_transmitter.waitPacketSent();
    Serial.print("Message sent: ");
    Serial.println((char*)msg);


    uint8_t buf[12];
    uint8_t buflen = sizeof(buf);

    if (rf_receiver.recv(buf, &buflen))
    {
      Serial.print("Message received: ");
      Serial.println((char*)buf);
    }
    else
    {
      Serial.print("No message rec'd: ");
      Serial.println(*&buflen);
      Serial.println((char*)buf);
    }

    delay(1000);
}

, 👍0


1 ответ


Лучший ответ:

1

Ответ можно найти в исходном коде 0f RH_ASK.h (вы должны прочитать хорошо сделанную документацию, прежде чем использовать эту библиотеку):

В настоящее время поддерживается только один экземпляр RH_ASK для каждого скетча.

Поэтому вам придется написать такое расширение самостоятельно, использовать два Arduino или другую библиотеку для тестирования.

,