Modifying LILYGO T3 LoRa32 RTL_433 ESP OOK receiver example
https://github.com/NorthernMan54/rtl_433_ESP
Visual Studio Code
PlatformIO
It would be easy to add e.g. saving found devices data to TF card ...
/*
Basic rtl_433_ESP example for OOK/ASK Devices
*/
#include <ArduinoJson.h>
#include <ArduinoLog.h>
#include <rtl_433_ESP.h>
#include <wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#ifndef RF_MODULE_FREQUENCY
# define RF_MODULE_FREQUENCY 433.92
#endif
#define JSON_MSG_BUFFER 512
#define LED_SDA 21
#define LED_SCL 22
#define LED_RST -1
#define SCR_W 128
#define SCR_H 64
Adafruit_SSD1306 display(SCR_W, SCR_H, &Wire, LED_RST);
bool bLED = false;
char messageBuffer[JSON_MSG_BUFFER];
rtl_433_ESP rf; // use -1 to disable transmitter
int count = 0;
void rtl_433_Callback(char* message) {
JsonDocument jsonDocument;
deserializeJson(jsonDocument,message);
logJson(jsonDocument);
count++;
}
void logJson(JsonDocument jsondata) {
#if defined(ESP8266) || defined(ESP32) || defined(__AVR_ATmega2560__) || defined(__AVR_ATmega1280__)
char JSONmessageBuffer[measureJson(jsondata) + 1];
serializeJson(jsondata, JSONmessageBuffer, measureJson(jsondata) + 1);
#else
char JSONmessageBuffer[JSON_MSG_BUFFER];
serializeJson(jsondata, JSONmessageBuffer, JSON_MSG_BUFFER);
#endif
#if defined(setBitrate) || defined(setFreqDev) || defined(setRxBW)
Log.setShowLevel(false);
Log.notice(F("."));
Log.setShowLevel(true);
#else
Log.notice(F("Received message : %s" CR), JSONmessageBuffer);
if (bLED) {
display.clearDisplay();
display.setTextColor(WHITE);
display.setTextSize(1);
display.setCursor(0,0);
display.print(JSONmessageBuffer);
display.display();
}
#endif
}
void setup() {
Serial.begin(921600);
delay(1000);
Wire.begin(LED_SDA, LED_SCL);
delay(50);
if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3c, false, false)) {
Log.notice(F("SSD1306 allocation failed"));
}
else {
bLED = true;
}
#ifndef LOG_LEVEL
LOG_LEVEL_INFO
#endif
Log.begin(LOG_LEVEL, &Serial);
Log.notice(F(" " CR));
Log.notice(F("****** setup ******" CR));
rf.initReceiver(RF_MODULE_RECEIVER_GPIO, RF_MODULE_FREQUENCY);
rf.setCallback(rtl_433_Callback, messageBuffer, JSON_MSG_BUFFER);
rf.enableReceiver();
Log.notice(F("****** setup complete ******" CR));
rf.getModuleStatus();
}
unsigned long uptime() {
static unsigned long lastUptime = 0;
static unsigned long uptimeAdd = 0;
unsigned long uptime = millis() / 1000 + uptimeAdd;
if (uptime < lastUptime) {
uptime += 4294967;
uptimeAdd += 4294967;
}
lastUptime = uptime;
return uptime;
}
int next = uptime() + 30;
#if defined(setBitrate) || defined(setFreqDev) || defined(setRxBW)
# ifdef setBitrate
# define TEST "setBitrate" // 17.24 was suggested
# define STEP 2
# define stepMin 1
# define stepMax 300
// # define STEP 1
// # define stepMin 133
// # define stepMax 138
# elif defined(setFreqDev) // 40 kHz was suggested
# define TEST "setFrequencyDeviation"
# define STEP 1
# define stepMin 5
# define stepMax 200
# elif defined(setRxBW)
# define TEST "setRxBandwidth"
# ifdef defined(RF_SX1276) || defined(RF_SX1278)
# define STEP 5
# define stepMin 5
# define stepMax 250
# else
# define STEP 5
# define stepMin 58
# define stepMax 812
// # define STEP 0.01
// # define stepMin 202.00
// # define stepMax 205.00
# endif
# endif
float step = stepMin;
#endif
void loop() {
rf.loop();
#if defined(setBitrate) || defined(setFreqDev) || defined(setRxBW)
char stepPrint[8];
if (uptime() > next) {
next = uptime() + 120; // 60 seconds
dtostrf(step, 7, 2, stepPrint);
Log.notice(F(CR "Finished %s: %s, count: %d" CR), TEST, stepPrint, count);
step += STEP;
if (step > stepMax) {
step = stepMin;
}
dtostrf(step, 7, 2, stepPrint);
Log.notice(F("Starting %s with %s" CR), TEST, stepPrint);
count = 0;
int16_t state = 0;
# ifdef setBitrate
state = rf.setBitRate(step);
RADIOLIB_STATE(state, TEST);
# elif defined(setFreqDev)
state = rf.setFrequencyDeviation(step);
RADIOLIB_STATE(state, TEST);
# elif defined(setRxBW)
state = rf.setRxBandwidth(step);
if ((state) != RADIOLIB_ERR_NONE) {
Log.notice(F(CR "Setting %s: to %s, failed" CR), TEST, stepPrint);
next = uptime() - 1;
}
# endif
rf.receiveDirect();
// rf.getModuleStatus();
}
#endif
}
Comments
Post a Comment