Настройка передатчика и приемника 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);
}
@Sun Bee, 👍0
1 ответ
Лучший ответ:
Ответ можно найти в исходном коде 0f RH_ASK.h (вы должны прочитать хорошо сделанную документацию, прежде чем использовать эту библиотеку):
В настоящее время поддерживается только один экземпляр RH_ASK для каждого скетча.
Поэтому вам придется написать такое расширение самостоятельно, использовать два Arduino или другую библиотеку для тестирования.
- Декодирование 2.4G RF пульта дистанционного управления?
- nRF24L01 + потеря пакетов, вызванная считыванием Arduino и связью с датчиками
- Радиочастотный сниффер с Arduino
- Можно ли передавать радиосигнал дешевым передатчиком 433 МГц в виде строк и принимать его с помощью RTL-SDR?
- Библиотека Rc switch отображает полученные значения только один раз с помощью serial monitor
- Связь Arduino UNO/Nano с модулем SP1ML-868
- Выбор PIN для подключения радиочастотного приемника
- Библиотека RadioHead изменяет состояние при получении нового сообщения