And this is the client code (the ESP32 that receives the LoRa command and sets the LED to that value)
#include <SPI.h>
#include <LoRa.h>
#include <Wire.h>
#include <Adafruit_SSD1306.h>
//#include <FastLED.h>
#define NUM_LEDS 4 //16
#define LED_PIN 4
#define LED_TYPE WS2812B
#define COLOR_ORDER RGB
//CRGB leds[NUM_LEDS];
#define SCK 5 // GPIO5 -- SX1278's SCK
#define MISO 19 // GPIO19 -- SX1278's MISO
#define MOSI 27 // GPIO27 -- SX1278's MOSI
#define SS 18 // GPIO18 -- SX1278's CS
#define RST 14 // GPIO14 -- SX1278's RESET
#define DI0 26 // GPIO26 -- SX1278's IRQ(Interrupt Request)
#define BAND 868E6
#define OLED_RESET 4
Adafruit_SSD1306 display(OLED_RESET);
String rssi = "RSSI --";
String packSize = "--";
String packet = "";
char Message;
int msize;
int firstmessage = 0;
int Red;
int Green;
int Blue;
int Bright;
void loraData(){
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0,15);
display.println("Received "+ packSize + " bytes");
display.setCursor(0,0);
display.println(rssi);
display.setCursor(0,30);
display.println(packet);
display.display();
if ( packet.startsWith("GET_STATUS")) {
Serial.println("LORA_OK");
delay(25);
LoRa.beginPacket();
LoRa.print("LORA_OK");
LoRa.endPacket();
if (firstmessage == 0) {
LoRa.beginPacket();
LoRa.print("LORA_OK");
LoRa.endPacket();
firstmessage = 1;
}
packet = "";
} else if ( packet.startsWith("SET_RED=")) {
Serial.println("SET_RED");
packet.remove(0, 8);
Red = packet.toInt();
delay(25);
LoRa.beginPacket();
LoRa.print("RED_OK");
LoRa.endPacket();
packet = "";
} else if ( packet.startsWith("SET_GREEN=")) {
Serial.println("SET_GREEN");
packet.remove(0, 10);
Green = packet.toInt();
Serial.println(Green);
delay(25);
LoRa.beginPacket();
LoRa.print("GREEN_OK");
LoRa.endPacket();
packet = "";
} else if ( packet.startsWith("SET_BLUE=")) {
Serial.println("SET_BLUE");
packet.remove(0, 9);
Blue = packet.toInt();
Serial.println(Blue);
delay(25);
LoRa.beginPacket();
LoRa.print("BLUE_OK");
LoRa.endPacket();
packet = "";
} else if ( packet.startsWith("SET_BRIGHT=")) {
Serial.println("SET_BRIGHT");
packet.remove(0, 11);
Bright = packet.toInt();
Serial.println(Bright);
//FastLED.setBrightness(Bright);
for( int i = 0; i < NUM_LEDS; i++) {
//leds[i] = CRGB( Red, Green, Blue);
}
//FastLED.show();
delay(25);
LoRa.beginPacket();
LoRa.print("BRIGHT_OK");
LoRa.endPacket();
packet = "";
} else {
packet = "";
}
delay(random(25) + 50);
LoRa.receive();
}
void cbk(int packetSize) {
packet ="";
packSize = String(packetSize,DEC);
for (int i = 0; i < packetSize; i++) { packet += (char) LoRa.read(); }
rssi = "RSSI " + String(LoRa.packetRssi(), DEC) ;
loraData();
}
void setup() {
pinMode(16,OUTPUT);
digitalWrite(16, LOW); // set GPIO16 low to reset OLED
delay(50);
digitalWrite(16, HIGH); // while OLED is running, must set GPIO16 in high、
Serial.begin(115200);
while (!Serial);
Serial.println();
Serial.println("LoRa Receiver");
Serial.println("Preparing LED...");
delay( 3000 ); // power-up safety delay
//FastLED.addLeds<LED_TYPE, LED_PIN, COLOR_ORDER>(leds, NUM_LEDS).setCorrection( TypicalLEDStrip );
Serial.println("Starting LoRa...");
SPI.begin(SCK,MISO,MOSI,SS);
LoRa.setPins(SS,RST,DI0);
if (!LoRa.begin(868E6)) {
Serial.println("Starting LoRa failed!");
while (1);
}
//LoRa.onReceive(cbk);
LoRa.receive();
Serial.println("init ok");
display.begin(SSD1306_SWITCHCAPVCC, 0x3c);
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0,0);
display.println("LoRa Receiver");
display.display();
delay(1500);
}
void loop() {
int packetSize = LoRa.parsePacket();
msize = LoRa.parsePacket();
if (packetSize) { cbk(packetSize); }
delay(10);
}