Skip to content

Instantly share code, notes, and snippets.

@bprobbins
Last active May 4, 2020 16:56
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save bprobbins/ac53cb5972b9aa82080b8e4dbd8cbb5a to your computer and use it in GitHub Desktop.
Save bprobbins/ac53cb5972b9aa82080b8e4dbd8cbb5a to your computer and use it in GitHub Desktop.
Particle xenon rf9x reliable datagram client
#include <Particle.h>
#include <RF9X-RK.h> //https://github.com/rickkas7/RF9X-RK
#include <RHReliableDatagram.h>
#include <RH_RF95.h>
#include <SPI.h>
#define CLIENT_ADDRESS 1
#define SERVER_ADDRESS 2
/*
Adafruit rf95 feather wiring:
CS->A
RST->F
IRQ->E
*/
#define RFM95_CS D3
#define RFM95_RST A5
#define RFM95_INT D2
#define RF95_FREQ 915.0
SYSTEM_MODE(MANUAL);
SYSTEM_THREAD(ENABLED);
// Singleton instance of the radio driver
RH_RF95 driver(D6, D2);
float frequency = 915.0;
char radiopacket[100];
// Class to manage message delivery and receipt, using the driver declared above
RHReliableDatagram manager(driver, CLIENT_ADDRESS);
uint32_t timer = millis();
char data[20];
uint8_t buf[RH_RF95_MAX_MESSAGE_LEN];
int logRate = 5000;
byte sendLen;
void setup() {
Mesh.disconnect();
Mesh.off();
Particle.disconnect();
pinMode(RFM95_RST, OUTPUT);
digitalWrite(RFM95_RST, HIGH);
Serial.begin(115200) ;
// manual reset
digitalWrite(RFM95_RST, LOW);
delay(10);
digitalWrite(RFM95_RST, HIGH);
delay(10);
if (!manager.init())
Serial.println("init failed");
driver.setFrequency(frequency);
driver.setTxPower(23, false);
}//setup
void loop()
{
if (millis() - timer > logRate) {
timer = millis(); // reset the timer
snprintf(radiopacket, sizeof(radiopacket),"aFloat:,%1.2f",9.9); //you'd initialize data to send here
sendLen = strlen(radiopacket);
radiopacket[sendLen] = '\0';
Serial.println("Sending to rf95_reliable_datagram_server");
// Send a message to manager_server
if (manager.sendtoWait((uint8_t*)radiopacket, sizeof(radiopacket), SERVER_ADDRESS))
{
// Now wait for a reply from the server
uint8_t len = sizeof(buf);
uint8_t from;
if (manager.recvfromAckTimeout(buf, &len, 2000, &from))
{
buf[len] = 0;
Serial.printlnf("got reply from 0x%02x rssi=%d %s", from, driver.lastRssi(), (char *) buf);
}
else
{
Serial.println("No reply, is rf95_reliable_datagram_server running?");
}
}
else
Serial.println("sendtoWait failed");
delay(500);
}//if (millis() - timer > 2000)
}//loop
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment