In dem Beitrag 433MHz-Module für Arduino (XD-FST/XD-RF-5V) wurden schon andere Funk-Module getestet, hier soll das Empfänger-Modul RXB8 ausprobiert werden.
Betriebsspannung | 4,5V - 5,5V |
---|---|
Frequenz | 433,92 MHz |
Empfindlichkeit | -114dBm |
Stromaufnahme | 9,6mA (@5V) bei einer Datenrate von 2,4kbps |
Betriebstemperatur | -30°C bis +85°C |
Als Sende-Modul wird hier das XD-FST (FS1000A) verwendet.
Wie man im folgenden Bild sieht, ist das RXB8 zwar mit Pin versehen, passt jedoch nicht ins Raster, damit man es auf ein Breadboard stecken kann:
Eine kleine Anpassung und Ergänzung mit einer entsprechenden Antenne ist nun brauchbar.
(siehe: Rechner für Antennenlänge)
Arduino Uno/Nano | XD-FST (FS1000A) |
---|---|
GND | GND |
5V | VCC |
8 (oder anderer digitaler Pin) | Data |
Arduino Uno/Nano | RXB8 |
---|---|
GND | GND |
5V | +5V |
9 (oder anderer digitaler Pin) | Data |
Zum Test habe ich die Library
PaulStoffregen/RadioHead verwendet.
Für den Sender habe ich das Beispiel "RadioHead → ask → ask_transmitter" benutzt und
leicht abgewandelt, so dass es für meine Zwecke funktioniert. Es soll die Zeichenfolge ABC
alle 2 Sekunden verschicken:
#include <RH_ASK.h>
#ifdef RH_HAVE_HARDWARE_SPI
#include <SPI.h>
#endif
RH_ASK driver(2000, 9, 8, 10);
const char *msg = "ABC";
void setup()
{
Serial.begin(9600);
if (!driver.init()) {
Serial.println("error");
}
}
void loop()
{
Serial.println("senging msg " + String(msg));
driver.send((uint8_t *)msg, strlen(msg));
driver.waitPacketSent();
delay(2000);
}
Der constructor von RH_ASK bekommt dabei folgende Parameter:
RH_ASK(uint16_t speed = 2000, uint8_t rxPin = 11, uint8_t txPin = 12, uint8_t pttPin = 10, bool pttInverted = false);
8
)Der Sketch für den Receiver (RXB8) ist das Gegenstück und wurde aus dem Beispiel "RadioHead → ask → ask_receiver" adaptiert. Es empfängt die Signale des Senders und stellt sie auf der seriellen Konsole der Arduino-IDE dar:
#include <RH_ASK.h>
#ifdef RH_HAVE_HARDWARE_SPI
#include <SPI.h>
#endif
RH_ASK driver(2000, 9, 8, 10);
void setup()
{
Serial.begin(9600);
driver.init();
}
void loop()
{
uint8_t buf[RH_ASK_MAX_MESSAGE_LEN];
uint8_t buflen = sizeof(buf);
if (driver.recv(buf, &buflen)) {
driver.printBuffer("Got:", buf, buflen);
}
}
Hier wird der Datenpin 9
für den Empfang verwendet.